sql - "This SqlTransaction has completed; it is no longer usable."...配置错误?

标签 sql stored-procedures sql-server-2008-r2 server-error

我已经为此工作了大约一天半,并在网上搜索了大量博客和帮助文章。我在 SO 上发现了几个与此错误相关的问题,但我认为它们并不完全适用于我的情况(或者在某些情况下,不幸的是,我无法很好地理解它们以实现 :P)。我不确定我是否可以很好地描述这一点以获得帮助......但这里是:

我们有一个 .NET 应用程序来跟踪我们的资源。有将资源复制到时间跟踪系统和计费系统的导出功能;这将访问链接到时间和计费数据库的存储过程。

我最近将计费系统数据库移到了新服务器(原服务器:Server 2003 SP2、SQL 2005;新服务器:Server 2008 R2、SQL 2008 R2)。我有一个指向 2008 数据库的链接服务器设置。我更新了存储过程以指向 2008 服务器,然后我收到了关于 MSDTC 和 RPC 的错误(http://www.safnet.com/writing/tech/archives/2007/06/server_myserver.html)。我在链接服务器上启用了“rpc/rpc out”,并将 MSDTC 设置为允许网络访问(类似这样:http://www.sqlwebpedia.com/content/msdtc-troubleshooting)。

现在,当我尝试运行导出功能时,我得到了上述信息:“此 SqlTransaction 已完成;它不再可用。”对我来说奇怪的是,当我刚刚运行存储过程(来自 SSMS)时,它说它成功完成。

有没有人见过这个?我在配置中遗漏了什么吗?我继续浏览相同的页面,我发现的唯一一件事是我在更改 MSDTC 后没有重新启动(此处提到:http://social.msdn.microsoft.com/forums/en-US/adodotnetdataproviders/thread/7172223f-acbe-4472-8cdf-feec80fd2e64/)。

我可以发布部分或全部存储过程,如果有帮助的话...请告诉我。

最佳答案

我相信此错误消息是由于“僵尸交易”造成的。

寻找事务被提交两次(或回滚两次,或回滚并提交等)的可能区域。 .Net 代码是否在 SP 已经提交事务之后提交事务? .Net 代码是否在遇到错误时回滚它,然后尝试在 catch(或 finally)子句中再次回滚它?

有可能在旧服务器上从未遇到过错误情况,因此从未遇到过错误的“双重回滚”代码。也许现在你有这样一种情况,新服务器上有一些配置错误,现在错误代码通过异常处理被命中。

你能调试到错误代码中吗?你有堆栈跟踪吗?

关于sql - "This SqlTransaction has completed; it is no longer usable."...配置错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6358806/

相关文章:

javascript - 如何从 C# 生成的 html 输入中获取多个值

sql-server - Sql 服务器表分区 - 我可以跨服务器分配表吗?

database - 在 Delphi 中,我应该在循环中使用多个数据库插入还是使用存储过程?

sql - 用数组“插入”

mysql - 如何使用子查询优化此查询?

mysql - 运行 "show databases;"查询导致 "No database selected"错误,但只是第一次

sql-server - SQL Server - 存储过程 - 忽略异常

oracle - 如何从 Oracle 中的 select 语句调用带有 Rowtype 参数的函数

.net - LINQ 查询中多个 from 选择器的含义是什么

sql - 在单列上 : Algebraic operation on Aggregate functions