SQL Server CE 3.5
SQL Server 2008
DataLenSumQuery:
SELECT SUM(DATALENGTH(Data)) FROM ...
在 SQL Server CE 上,Data
列的类型是IMAGE
在 SQL Server Standard 上,类型Data
为varbinary(MAX)
,因为 Microsoft 表示标准版的 IMAGE 类型已弃用并将被删除。
此代码适用于标准版:
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;
}
但在标准上抛出异常:
从具体化的“System.Int64”类型到可为空的“System.Int32”类型的指定转换无效。
如果Data
两个提供者上的列都是 IMAGE 并且使用<int?>
了 for,ExecuteStoreQuery
则工作正常。
Microsoft 建议在 Standard 上迁移到 varbinary(MAX),但 Compact 版本甚至不支持它。