2010-08-19 25 views
2

我想通過C#將聚合函數添加到SQL Server 2005中。但是,當我部署項目失敗,出現以下錯誤:在CLR聚合函數列表序列化C#

.Net SqlClient Data Provider: Msg 6222, Level 16, State 1, Line 1 Type "AggregationTest.CountNonintersectingIntervals" is marked for native serialization, but field "intervals" of type "AggregationTest.CountNonintersectingIntervals" is not valid for native serialization

下面是我使用的代碼:

[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; 
} 

能否請你幫我解決問題

回答

1

您必須初始化SqlUserDefinedAggregate屬性作爲Format.UserDefined和實施IBinarySerialize接口,把你的intervals實例的照顧。