Ste*_*sky 9 .net sql-server-ce linq-to-sql
我有一个使用LINQ-to-SQL和SQL Server CE 4的应用程序.我知道这不是官方支持的,但我们已经使它工作,但有以下例外.有时,在尝试更新数据库时,我们会在数据库中出现一行错误.
我们使用a DataContext从数据库中选择一行,更新几列(一个布尔和一个字节列),然后我们调用SubmitChanges().当我们提交更改时,我们会收到包含以下堆栈跟踪的DivideByZeroException:
System.DivideByZeroException:尝试除以零.
在System.Data.SqlServerCe.NativeMethodsHelper.CompileQueryPlan(IntPtr的pQpCommand,字符串pwszCommandText,ResultSetOptions选项,IntPtr的[] pParamNames,IntPtr的prgBinding,的Int32 cDbBinding,IntPtr的&pQpPlan,IntPtr的PERROR)
在System.Data.SqlServerCe.NativeMethods.CompileQueryPlan(IntPtr的pQpCommand , System.Data.SqlServerCe.SqlCeCommand.ExecuteCommand(CommandBehavior behavior,
System.Data.SqlServerCe.SqlCeCommand.CompileQueryPlan())
中的字符串pwszCommandText,ResultSetOptions选项,IntPtr [] pParamNames,IntPtr prgBinding,Int32 cDbBinding,IntPtr&pQpPlan,IntPtr pError)串的方法,ResultSetOptions选项)
在System.Data.SqlServerCe.SqlCeCommand.ExecuteNonQuery()
在System.Data.Linq.SqlClient.SqlProvider.Execute(表达式查询,queryInfo queryInfo,IObjectReaderFactory工厂,对象[] parentArgs,对象[] userArgs, System.Data.Linq.SqlClient.SqlProvider.ExecuteAll中的ICompiledSubQuery [] subQueries,Object lastResult)
(表达式查询,QueryInfo [] queryInfos,IObjectReaderF actory工厂,对象[] userArguments,ICompiledSubQuery []子查询)
在System.Data.Linq.SqlClient.SqlProvider.System.Data.Linq.Provider.IProvider.Execute(表达式查询)
在System.Data.Linq.ChangeDirector.StandardChangeDirector. DynamicUpdate(TrackedObject项目)
在System.Data.Linq.ChangeDirector.StandardChangeDirector.Update(TrackedObject项目)
在System.Data.Linq.ChangeProcessor.SubmitChanges(ConflictMode failureMode)
在System.Data.Linq.DataContext.SubmitChanges(ConflictMode failureMode)
在System.Data.Linq.DataContext.SubmitChanges()
编辑:
在分析时,问题似乎是在delete语句上生成的,类似于:
DELETE FROM [WorkItemUid] WHERE([OID] = 24151/*@ P0 /)和([WorkItemOid] = 745 / @ P1 /)和([SeriesInstanceUid] = '1.3.12.2.1107.5.1.4.54023.30000004101914490887500000063'/ @ P2 /)和([SopInstanceUid] = '1.3.12.2.1107.5.1.4.54023.30000004101913521221800001089'/ @ P3 /)和([完成] = 1)AND([FailureCount] = 0 / @ P4*/)和([文件] 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的引用.我已经确认我正在使用SQL Server CE 4.0程序集,所以这似乎不是问题.有关上述错误是否仍适用于SQL Server CE 4.0的任何想法?经过进一步审查后,它出现了同样的问题.
| 归档时间: |
|
| 查看次数: |
1163 次 |
| 最近记录: |