在vb.net中打开事务验证

时间:2010-05-04 02:52:39

标签: .net vb.net transactions

任何人都可以帮助我如何验证交易

示例:

transaction = mySqlConn.BeginTransaction(IsolationLevel.ReadCommitted)

如果还有一个已打开的交易,那么上面的代码将被忽略..如何在开启新交易之前知道是否有交易尚未提交以避免嵌套交易?

1 个答案:

答案 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;  
}

但通常您只需创建自己的事务并将其传递给其他方法,并了解它已经初始化并且可以安全使用。