我得到一个SqlConnection does not support parallel transactions.例外,这个答案提到它何时连接尝试打开两个事务.这正是我在做的事情.我认为嵌套的事务是可以的(我使用sqlite作为原型).
如何检查连接是否已在事务中?我正在使用Microsoft SQL Server数据库文件.
经过一番搜索,我发现了另一个Stack Overflow问题.事实证明,您无法在ADO.NET中嵌套事务.当您尝试时,您可能最终会启动两个不相关的事务,这会导致并行事务错误.
要查看某个事务中当前是否存在连接,您可以:
var com = yourConnection.CreateCommand();
com.CommandText = "select @@TRANCOUNT";
var trancount = com.ExecuteScalar();
Run Code Online (Sandbox Code Playgroud)
这将返回嵌套事务的数量.
请注意,您可以手动嵌套事务,而无需使用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());
Run Code Online (Sandbox Code Playgroud)
打印0,因为嵌套事务完全中止.
| 归档时间: |
|
| 查看次数: |
5242 次 |
| 最近记录: |