任何人都可以帮助我如何验证交易
示例:
transaction = mySqlConn.BeginTransaction(IsolationLevel.ReadCommitted)
如果还有一个已打开的交易,那么上面的代码将被忽略..如何在开启新交易之前知道是否有交易尚未提交以避免嵌套交易?
答案 0 :(得分:1)
您是否看过使用System.Transactions.TransactionScope?它旨在处理此类场景implicitly,而无需编写自定义代码。
如果要在不使用System.Transactions的情况下使用显式事务管理,则必须传递事务对象(或以某种方式使其可用),并且您需要决定何时启动事务。例如检查SqlTransaction是否为null,如果是,则启动事务,否则只使用现有事务。
您可以执行以下操作(省略了对transaction.Rollback()的错误处理):
using (SqlConnection connection = new SqlConnection(connectionString))
{
connection.Open();
SqlTransaction transaction = null;
DoSomething(connection, ref transaction);
DoSomethingElse(connection, ref transaction);
transaction.Commit();
}
public void DoSomething(SqlConnection connection, ref SqlTransaction transaction)
{
SqlCommand command = connection.CreateCommand();
transaction = GetTransaction(connection, transaction);
command.Connection = connection;
command.Transaction = transaction;
...
}
public void DoSomethingElse(SqlConnection connection, ref SqlTransaction transaction)
{
...
}
public SqlTransaction GetTransaction(SqlConnection connection, SqlTransaction transaction)
{
if (transaction == null)
{
transaction = connection.BeginTransaction(IsolationLevel.ReadCommitted);
}
return transaction;
}
但通常您只需创建自己的事务并将其传递给其他方法,并了解它已经初始化并且可以安全使用。