小编aef*_*123的帖子

SqlTransaction已经完成

我有一个应用程序可能会对SQL Server 2005数据库进行数千次插入.如果插入因任何原因(外键约束,字段长度等)而失败,则应用程序将记录插入错误并继续.

每个插入都独立于其他插入,因此数据库完整性不需要事务.但是,我们希望使用它们来提高性能.当我使用事务时,我们将在每100次提交中大约有1次出现以下错误.

This SqlTransaction has completed; it is no longer usable.
   at System.Data.SqlClient.SqlTransaction.ZombieCheck()
   at System.Data.SqlClient.SqlTransaction.Commit()
Run Code Online (Sandbox Code Playgroud)

为了尝试追踪原因,我在每个事务操作中都放置了trace语句,这样我就可以确保在调用commit之前没有关闭事务.我已经确认我的应用程序不会关闭交易.然后我使用完全相同的输入数据再次运行应用程序并成功.

如果我关闭日志,它会再次失败.把它重新打开,然后成功.这个开/关切换是通过app.config完成的,无需重新编译.

显然,记录行为会改变时间并使其起作用.这表明存在线程问题.但是,我的应用程序不是多线程的.

我已经看到一个MS KB条目表明.Net 2.0框架的错误可能会导致类似的问题(http://support.microsoft.com/kb/912732).但是,他们提供的修复程序无法解决此问题.

.net sql-server transactions sql-server-2005

24
推荐指数
3
解决办法
3万
查看次数

标签 统计

.net ×1

sql-server ×1

sql-server-2005 ×1

transactions ×1