gpt4 book ai didi

.net - 删除大量行时,SQL Server CE 4 出现 DivideByZeroException

转载 作者:行者123 更新时间:2023-12-04 04:31:42 26 4
gpt4 key购买 nike

我有一个使用 LINQ-to-SQL 和 SQL Server CE 4 的应用程序。我知道这不是官方支持的,但我们已经使它工作,但以下异常(exception)。有时,我们会在尝试更新数据库中的一行时遇到错误。

我们使用 DataContext从数据库中选择一行,更新几列(一个 bool 值和一个字节列),然后我们调用 SubmitChanges() .当我们提交更改时,我们会收到一个 DivideByZeroException 和以下堆栈跟踪:

System.DivideByZeroException: Attempted to divide by zero.
at System.Data.SqlServerCe.NativeMethodsHelper.CompileQueryPlan(IntPtr pQpCommand, String pwszCommandText, ResultSetOptions options, IntPtr[] pParamNames, IntPtr prgBinding, Int32 cDbBinding, IntPtr& pQpPlan, IntPtr pError)
at System.Data.SqlServerCe.NativeMethods.CompileQueryPlan(IntPtr pQpCommand, String pwszCommandText, ResultSetOptions options, IntPtr[] pParamNames, IntPtr prgBinding, Int32 cDbBinding, IntPtr& pQpPlan, IntPtr pError)
at System.Data.SqlServerCe.SqlCeCommand.CompileQueryPlan()
at System.Data.SqlServerCe.SqlCeCommand.ExecuteCommand(CommandBehavior behavior, String method, ResultSetOptions options)
at System.Data.SqlServerCe.SqlCeCommand.ExecuteNonQuery()
at System.Data.Linq.SqlClient.SqlProvider.Execute(Expression query, QueryInfo queryInfo, IObjectReaderFactory factory, Object[] parentArgs, Object[] userArgs, ICompiledSubQuery[] subQueries, Object lastResult)
at System.Data.Linq.SqlClient.SqlProvider.ExecuteAll(Expression query, QueryInfo[] queryInfos, IObjectReaderFactory factory, Object[] userArguments, ICompiledSubQuery[] subQueries)
at System.Data.Linq.SqlClient.SqlProvider.System.Data.Linq.Provider.IProvider.Execute(Expression query)
at System.Data.Linq.ChangeDirector.StandardChangeDirector.DynamicUpdate(TrackedObject item)
at System.Data.Linq.ChangeDirector.StandardChangeDirector.Update(TrackedObject item)
at System.Data.Linq.ChangeProcessor.SubmitChanges(ConflictMode failureMode)
at System.Data.Linq.DataContext.SubmitChanges(ConflictMode failureMode)
at System.Data.Linq.DataContext.SubmitChanges()



编辑:

分析后,问题似乎是在删除语句上生成的,类似于:

DELETE FROM [WorkItemUid] WHERE ([Oid] = 24151 /* @p0 /) AND ([WorkItemOid] = 745 / @p1 /) AND ([SeriesInstanceUid] = '1.3.12.2.1107.5.1.4.54023.30000004101914490887500000063' / @p2 /) AND ([SopInstanceUid] = '1.3.12.2.1107.5.1.4.54023.30000004101913521221800001089' / @p3 /) AND ([Complete] = 1) AND ([FailureCount] = 0 / @p4 */) AND ([File] IS NULL) AND (NOT ([Failed] = 1))



错误发生在我试图单独删除约 1500 条外键记录的语句中。当我更改代码以单独删除行时,我将其缩小到无法删除的大约 45 行。然后我使用 SQL Compact 查询分析器尝试对行本身执行删除,但它也确实失败了,除以零异常。

因此,这似乎不是 Linq-to-Sql 错误,而是 SQL Server Compact CE 4.0 本身删除这些行的问题。我试图删除并从一个干净的数据库开始,并复制填充然后从数据库中删除,问题再次发生。当删除时发生某些事情的外键记录超过 1500 条时,这可能是一个问题。

一堆谷歌搜索大多是空的,但我确实找到了对 DivideByZeroException 的引用。使用 SQL Server CE 3.5,位于 this引用。我已经确认我正在使用 SQL Server CE 4.0 程序集,所以这似乎不是问题。关于上述错误是否仍然适用于 SQL Server CE 4.0 的任何想法?进一步检查后似乎是同样的问题。

最佳答案

升级到 SQL Server Compact CTP1似乎已经解决了这个问题。删除问题中报告的行时,我不再看到异常。该问题似乎与从表中删除行有关,其中外键关系中有 > 1500 行。

关于.net - 删除大量行时,SQL Server CE 4 出现 DivideByZeroException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10017277/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com