Server 3.5
Server 2008
DataLenSumQuery:
SELECT SUM(DATALENGTH(Data)) FROM ...在Server中,Data列的类型是IMAGE
在Server标准中,Data的类型是varbinary(MAX),因为微软说标准版本的图像类型被废弃,并将被删除。
此代码适用于标准版本:
using (var container = new DatabaseModelContainer())
{
var result = container.ExecuteStoreQuery<long?>(DataLenSumQuery).FirstOrDefault();
long test= result.HasValue ? result.Value : 0L;
}但是在CE上抛出异常:
System.InvalidOperationException:从物化的'System.Int32‘类型到可为空的'System.Int64’类型的指定强制转换无效。
反之亦然,这适用于CE:
using (var container = new DatabaseModelContainer())
{
var result = container.ExecuteStoreQuery<int?>(DataLenSumQuery).FirstOrDefault();
long test= result.HasValue ? result.Value : 0L;
}但是在Standard上抛出异常:
从物化的“System.Int64”类型到可为空的“System.Int32”类型的指定强制转换无效。
如果两个提供程序上的Data colum都是图像,并且使用了用于ExecuteStoreQuery的<int?>,则工作正常。
微软建议在标准版上使用var二进制(MAX),但Compact甚至不支持它。
发布于 2012-11-27 08:53:30
选择CAST(SUM(DATALENGTH(Data))作为BIGINT)
container.ExecuteStoreQuery<long?>()https://stackoverflow.com/questions/13576716
复制相似问题