SQL-使用 DbContext 与 SQL CE 的连接的参数查询在 Int64-Parameter 接近 Int64-MaxValue 时导致溢出
SQL-Query with Parameters using DbContext's connection to SQL CE causes overflow when Int64-Parameter is near Int64-MaxValue
我有一个使用 Entity Framework 6.1 和 SQL CE 的应用程序。
考虑以下 SQL 脚本,该脚本使用 DbContext 的连接执行:
SELECT CAST((table2.Int64No + 1) AS bigint) AS Int64No
FROM
(SELECT MAX(table1.Int64No) AS Int64No
FROM
(SELECT MAX(Int64No) AS Int64No
FROM TestEntities
WHERE (Int64No > (@end - @start))
AND (Int64No <= @end)
UNION SELECT (@end - @start) AS Int64No) AS table1) AS table2
WHERE (table2.Int64No <= (@end - @start))
想法是找到现有的最大值和 return 下一个可用的值,但如果根本没有找到条目,仍然 return 一个值。 @end 和@start 也是 Int64 值。
一切正常,直到@start 达到接近Int64.MaxValue
的值。具体来说,我创建了一个调用 SQL 脚本的测试应用程序,其中 @start
为 1 并且 @end
在每个循环中增加。有趣的是,当 @end
达到 9223372036854774273(即 Int64.MaxValue
- 1534)时,查询会抛出异常:
{System.Data.SqlServerCe.SqlCeException (0x80004005): Expression
evaluation caused an overflow. [ Name of function (if known) = ]
at System.Data.SqlServerCe.Accessor.get_Value() at
System.Data.SqlServerCe.SqlCeDataReader.FetchValue(Int32 index) at
System.Data.SqlServerCe.SqlCeDataReader.IsDBNull(Int32 ordinal) at
System.Data.SqlServerCe.SqlCeDataReader.GetValue(Int32 ordinal) at
System.Data.SqlServerCe.SqlCeCommand.ExecuteScalar() at
DbParameterTest.MainWindow.ButtonBase_OnClick(Object sender,
RoutedEventArgs e) in c:\Users\pfch\Documents\Visual Studio
2013\Projects\DbParameterTest\DbParameterTest\MainWindow.xaml.cs:line
93}
当我重构调用并将参数直接插入 SQL 时(即不使用参数化 SQL 查询),一切正常。
有什么解释吗?
SQL Compact 引擎中的错误 - 您是否使用最新版本的 SQL CE?
我有一个使用 Entity Framework 6.1 和 SQL CE 的应用程序。
考虑以下 SQL 脚本,该脚本使用 DbContext 的连接执行:
SELECT CAST((table2.Int64No + 1) AS bigint) AS Int64No
FROM
(SELECT MAX(table1.Int64No) AS Int64No
FROM
(SELECT MAX(Int64No) AS Int64No
FROM TestEntities
WHERE (Int64No > (@end - @start))
AND (Int64No <= @end)
UNION SELECT (@end - @start) AS Int64No) AS table1) AS table2
WHERE (table2.Int64No <= (@end - @start))
想法是找到现有的最大值和 return 下一个可用的值,但如果根本没有找到条目,仍然 return 一个值。 @end 和@start 也是 Int64 值。
一切正常,直到@start 达到接近Int64.MaxValue
的值。具体来说,我创建了一个调用 SQL 脚本的测试应用程序,其中 @start
为 1 并且 @end
在每个循环中增加。有趣的是,当 @end
达到 9223372036854774273(即 Int64.MaxValue
- 1534)时,查询会抛出异常:
{System.Data.SqlServerCe.SqlCeException (0x80004005): Expression evaluation caused an overflow. [ Name of function (if known) = ]
at System.Data.SqlServerCe.Accessor.get_Value() at System.Data.SqlServerCe.SqlCeDataReader.FetchValue(Int32 index) at System.Data.SqlServerCe.SqlCeDataReader.IsDBNull(Int32 ordinal) at System.Data.SqlServerCe.SqlCeDataReader.GetValue(Int32 ordinal) at System.Data.SqlServerCe.SqlCeCommand.ExecuteScalar() at DbParameterTest.MainWindow.ButtonBase_OnClick(Object sender, RoutedEventArgs e) in c:\Users\pfch\Documents\Visual Studio 2013\Projects\DbParameterTest\DbParameterTest\MainWindow.xaml.cs:line 93}
当我重构调用并将参数直接插入 SQL 时(即不使用参数化 SQL 查询),一切正常。
有什么解释吗?
SQL Compact 引擎中的错误 - 您是否使用最新版本的 SQL CE?