Список сериализации в функции агрегации CLR C # - PullRequest
2 голосов
/ 19 августа 2010

Я пытаюсь добавить функцию агрегирования в SQL Server 2005 через C #.Но при развертывании проекта происходит сбой со следующей ошибкой:

. Поставщик данных SqlClient .Net: сообщение 6222, уровень 16, состояние 1, строка 1 Тип «AggregationTest.CountNonintersectingIntervals» помечается для собственной сериализации, но поле "интервалы" типа "AggregationTest.CountNonintersectingIntervals" недопустимо для собственной сериализации

Вот код, который я использую:

[Serializable]
[Microsoft.SqlServer.Server.SqlUserDefinedType(Format.Native)]
public struct Interval : INullable
{

    public Interval(int beginning, int ending) : this()
    {
        this.beginning = beginning;
        this.ending = ending;
    }

    public override string ToString()
    {
        return "(" + beginning + ", " + ending + ")";
    }

    public bool IsNull { get { return m_Null; } }

    public static Interval Null { get { /*Some code*/ } }

    public static Interval Parse(SqlString s)
    {
         /*Some code*/
    }

    public int beginning;
    public int ending;
    private bool m_Null;
}

[Serializable]
[Microsoft.SqlServer.Server.SqlUserDefinedAggregate(Format.Native)]
public struct CountNonintersectingIntervals
{
    public void Init()
    {
        intervals = new List<Interval>();
    }

    public void Accumulate(Interval interval)
    {
        intervals.Add(interval);
    }

    public void Merge(CountNonintersectingIntervals Group)
    {
        intervals.AddRange(Group.intervals);
    }

    public SqlInt32 Terminate()
    {
        // Some complicated calculation using intervals
    }

    private List<Interval> intervals;
}

Не могли бы вы помочь мнерешить проблему

Ответы [ 2 ]

1 голос
/ 06 ноября 2014

Вы должны инициализировать атрибут SqlUserDefinedAggregate как Format.UserDefined и реализовать интерфейс IBinarySerialize, чтобы заботиться о своем экземпляре intervals.

0 голосов
/ 27 июля 2012

Собственная сериализация действительна только для blittable типов (которых нет List<Interval>).

http://social.msdn.microsoft.com/forums/en-us/sqlnetfx/thread/D4A58ABA-4C95-4232-AF6E-270892BE45C5

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...