SQL サーバー CE 3.5
SQL サーバー 2008
DataLenSumQuery:
SELECT SUM(DATALENGTH(Data)) FROM ...
SQL Server CE では、Data
列のタイプはIMAGE
SQL Server Standard では、のタイプはData
ですvarbinary(MAX)
。Microsoft は、標準版の IMAGE タイプは非推奨であり、削除されると述べているためです。
このコードは、Standard エディションで正常に動作します。
using (var container = new DatabaseModelContainer())
{
var result = container.ExecuteStoreQuery<long?>(DataLenSumQuery).FirstOrDefault();
long test= result.HasValue ? result.Value : 0L;
}
ただし、CE で例外をスローします。
System.InvalidOperationException: 具体化された 'System.Int32' 型から null 許容の 'System.Int64' 型への指定されたキャストは無効です。
逆に、これは CE で機能します。
using (var container = new DatabaseModelContainer())
{
var result = container.ExecuteStoreQuery<int?>(DataLenSumQuery).FirstOrDefault();
long test= result.HasValue ? result.Value : 0L;
}
ただし、標準では例外がスローされます:
実体化された 'System.Int64' 型から null 許容の 'System.Int32' 型への指定されたキャストは無効です。
Data
両方のプロバイダーの列が IMAGE で、<int?>
forExecuteStoreQuery
が使用されている場合は正常に動作します。
Microsoft は Standard で varbinary(MAX) に移行することを提案していますが、Compact エディションはそれをサポートしていません。