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?