如何检查连接是否已在事务中?我正在使用Microsoft SQL Server数据库文件。
经过一番搜索,我发现了另一个“堆栈溢出”问题。事实证明,您不能在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,因为嵌套事务已完全中止。
0