sql-server - 使用单个事务范围时获取 TransactionInDoubtException
问题描述
我以以下方式使用事务范围,
var option1 = new TransactionOptions();
option1.IsolationLevel = IsolationLevel.ReadCommitted;
option1.Timeout = TimeSpan.FromSeconds(Convert.ToInt32(ConfigurationManager.AppSettings["Tide:TransactionTimeout"]))
using (var transactionScope = new TransactionScope(TransactionScopeOption.RequiresNew, option1))
{
//delete data from database
//multiple BulkInsertData in different tables of database
//update data
transactionScope.Complete();
}
没有内部事务开始。我得到了 TransactionInDoubtException,我不明白它为什么会发生。之前的代码运行流畅,但是从昨天开始突然抛出这个异常
System.Transactions.TransactionInDoubtException:事务有问题。---> System.Data.SqlClient.SqlException:COMMIT TRANSACTION 请求没有对应的 BEGIN TRANSACTION。在 System.Data.SqlClient.SqlConnection.OnError(SqlException 异常,布尔 breakConnection,Action`1 wrapCloseInAction)在 System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj,布尔 callerHasConnectionLock,布尔 asyncClose)在 System.Data.SqlClient.TdsParser System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior、SqlCommand cmdHandler、SqlDataReader dataStream、BulkCopySimpleResultSet bulkCopyHandler、
解决方案
从异常消息
COMMIT TRANSACTION 请求没有对应的 BEGIN TRANSACTION
您似乎正在运行一些未正确处理错误的 SQL。你在运行的 SQL 中有这样的东西吗?
BEGIN TRAN
-- Some SQL here that generates an error
COMMIT TRAN
在这种情况下,BEGIN TRAN...
子句中的任何错误都会导致事务失败。何时COMMIT TRAN
调用事务状态无法确定,因此出现TransactionInDoubt
异常。您需要确保SET XACT_ABORT ON
在程序开始时调用并正确处理错误:
SET XACT_ABORT, NOCOUNT ON
BEGIN TRY
BEGIN TRAN
-- Some SQL here that generates an error
COMMIT TRAN
END TRY
BEGIN CATCH
IF @@trancount > 0 ROLLBACK TRANSACTION
DECLARE @msg nvarchar(2048) = error_message()
RAISERROR (@msg, 16, 1)
RETURN 55555
END CATCH
推荐阅读
- python - Python:修改和编辑函数内的数据框
- node.js - 如何付款 意图在 Stripe 中向已连接的帐户收费
- mysql - 有没有办法在 SQL 的左连接之后获取变量并将它们添加为列?
- javascript - 在 DOM 中搜索大于“x”的数字,然后附加带有差异的数字
- c# - 为什么我不能用这种模式删除“[restr=戸]”
- javascript - 无法在 Javascript async/await try/catch 客户端代码中访问 res.statusMessage 以读取从快速后端抛出的异常
- c# - .NET CORE 串行类在使用 tty 端口发布到 Linux 机器时未读取 BaseStream 或 ReadBuffer 中超过 4KBytes 的数据
- php - Jquery Ajax Post 再次返回数据
- ios - 为什么 WKWebView 不打开 target="_blank" 的链接?
- javascript - 如何定位用户并根据他们的语言显示页面