簡體   English   中英

CLR聚合函數C#中的列表序列化

[英]List serialization in CLR aggregation function C#

我正在嘗試通過C#將聚合函數添加到SQL Server 2005中。 但是當我部署項目時,它失敗並顯示以下錯誤:

.Net SqlClient數據提供程序:消息6222,級別16,狀態1,行1類型“ AggregationTest.CountNonintersectingIntervals”類型已標記為本機序列化,但類型為“ AggregationTest.CountNonintersectingIntervals”的字段“ intervals”不適用於本機序列化

這是我正在使用的代碼:

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

你能幫我解決問題嗎

您必須將SqlUserDefinedAggregate屬性初始化為Format.UserDefined並實現IBinarySerialize接口,以照顧intervals實例。

本機序列化僅對可填充類型有效( List<Interval>無效)。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM