gpt4 book ai didi

sql - 检查连接是否在事务中

转载 作者:行者123 更新时间:2023-12-03 15:47:44 24 4
gpt4 key购买 nike

我收到了 SqlConnection does not support parallel transactions.异常和 this answer当连接尝试打开两个事务时提到它。这正是我正在做的。我认为嵌套事务没问题(我使用 sqlite 作为原型(prototype))。

如何检查连接是否已经在事务中?我正在使用 Microsoft SQL Server 数据库文件。

最佳答案

经过一番搜索,我找到了另一个 Stack Overflow question .事实证明,您不能在 ADO.NET 中嵌套事务。当您尝试时,您可能最终会启动两个不相关的事务,这会导致并行事务错误。

要查看连接当前是否处于事务中,您可以:

var com = yourConnection.CreateCommand();
com.CommandText = "select @@TRANCOUNT";
var trancount = com.ExecuteScalar();

这将返回嵌套事务的数量。

请注意,您可以手动嵌套事务,而无需使用 SqlTransaction 对象。例如:
var com = yourConnection.CreateCommand();
com.CommandText = "BEGIN TRANSACTION";
com.ExecuteNonQuery();
com.CommandText = "BEGIN TRANSACTION";
com.ExecuteNonQuery();
com.CommandText = "INSERT INTO TestTable (name) values ('Joe');";
com.ExecuteNonQuery();
com.CommandText = "COMMIT TRANSACTION";
com.ExecuteNonQuery();
com.CommandText = "ROlLBACK TRANSACTION";
com.ExecuteNonQuery();

com.CommandText = "SELECT COUNT(*) FROM TestTable";
Console.WriteLine("Found {0} rows.", com.ExecuteScalar());

这将打印 0 ,因为嵌套事务完全中止。

关于sql - 检查连接是否在事务中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2856020/

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