悬赏分:20 浏览:185 次
用CLR写个聚集函数,代码如下.
执行结束都提示啥溢出的.
我检查了序列化代码 没有啥溢出的问题.请哪个牛人告诉我怎么回事.
A first chance exception of type 'System.OverflowException' occurred in System.Data.dll
using System;
using System.Data;
using System.Data.SqlClient;
using System.Data.SqlTypes;
using Microsoft.SqlServer.Server;
using System.Collections.Generic;
[Serializable]
[Microsoft.SqlServer.Server.SqlUserDefinedAggregate
(Format.UserDefined, //use custom serialization to serialize the intermediate result
IsInvariantToNulls = true, //optimizer property
IsInvariantToDuplicates = false, //optimizer property
IsInvariantToOrder = false, //optimizer property
MaxByteSize = 8000) //maximum size in bytes of persisted value
]
public struct AVG2 : IBinarySerialize 

{
public void Init()
{
// Put your code here
re = new List<double>();
count = 0;
}
public void Accumulate(SqlDouble Value)
{
// Put your code here
if (!Value.IsNull)
{
re.Add(Value.Value);
count++;
}
}
public void Merge(AVG2 Group)
{
// Put your code here
re = Group.re;
count = Group.count;
}
public SqlDouble Terminate()
{
double sum = 0;
foreach (double item in re)
{
sum += item;
}
return sum / re.Count;
}
// This is a place-holder member field
private int count;
private List<double> re;
IBinarySerialize Members#region IBinarySerialize Members
public void Read(System.IO.BinaryReader r)
{
re = new List<double>();
re.Clear();
int count = r.ReadInt32();
for (int i = 0; i < count; i++)
{
double b = r.ReadDouble();
re.Add(b);
}
}
public void Write(System.IO.BinaryWriter w)
{
w.Write(count);
for (int i = 0; i < count; i++)
{
w.Write(re[i]);
}
}
#endregion
}
|
2个月前 zeus2 : w.Write(count); for (int i = 0; i < count; i++) { w.Write(re[i]); } 序列化就是这样写的。。 |