小编典典

检查连接是否在事务中

sql

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


阅读 191

收藏
2021-04-22

共1个答案

小编典典

经过一番搜索,我发现了另一个“堆栈溢出”问题。事实证明,您不能在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,因为嵌套事务已完全中止。

2021-04-22