gpt4 book ai didi

.net - Sql事务已完成

转载 作者:行者123 更新时间:2023-12-01 23:26:46 25 4
gpt4 key购买 nike

我有一个应用程序,它可能会对 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()

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

如果我关闭日志记录,它会再次失败。重新打开就成功了。此开/关切换是通过 app.config 完成的,无需重新编译。

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

我看到一个 MS 知识库条目表明 .Net 2.0 框架的错误可能会导致类似的问题 ( http://support.microsoft.com/kb/912732 )。然而,他们提供的修复并没有解决这个问题。

最佳答案

感谢您的所有反馈。我一直在 MSDN 论坛上与 MSFT 的人员合作,以了解到底发生了什么。事实证明,该问题是由于日期时间转换问题导致其中一项插入失败所致。

主要问题是,如果是日期转换错误,则会显示此错误。但是,如果是另一个错误(例如字段太长),则不会导致此问题。在这两种情况下,我都希望事务仍然存在,因此我可以对其调用回滚。

我有一个完整的示例程序来复制这个问题。如果有人希望查看它或与 MSFT 的交流,您可以在 microsoft.public.dotnet.framework.adonet 中的 MSFT 新闻组上的 SqlTransaction.ZombieCheck 错误线程下找到该线程。

关于.net - Sql事务已完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/611700/

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