c#和SQL Server 2008 CLR序列化问题

本文关键字:CLR 序列化 问题 2008 Server SQL | 更新日期: 2023-09-27 18:07:10

我试图在c#中创建一个SqlUserDefinedAggregate,以附加到我的SQL Server 2008实例。我正在使用。net 3.5。基本上,我想要计算我看到字符串值的次数。它确实需要是一个聚合函数,因为它的用途。该函数的代码在逻辑上是合理的,但是当我去部署时,我得到这样的结果:

部署错误SQL01268: .Net SqlClient Data Provider: Msg 6222, Level16、状态1,行1输入"GEMCLR"。"CountTypes"被标记为本机序列化,但是类型"GEMCLR"的字段"m_types"。CountTypes"不是本机序列化有效。

m_typesDictionary<string, int>。我的代码大纲看起来像这样:

[Serializable]
[Microsoft.SqlServer.Server.SqlUserDefinedAggregate (Format.Native)]
public struct CountTypes
{
    private Dictionary<string, int> m_types;
    public void Init ()
    {
        m_types = new Dictionary<string, int> ();
    }
    public void Accumulate (SqlString value) { ... }
    public void Merge (CountTypes group) { ... }
    public SqlString Terminate () { ... }
}

c#和SQL Server 2008 CLR序列化问题

通常字典不是开箱即可序列化的,这是你的问题,有很多关于如何解决这个问题的文章,例如Adam Semel的如何在c#中序列化字典或哈希表