簡體   English   中英

在vb.net中打開交易驗證

[英]opening transaction validation in vb.net

誰能幫助我如何驗證交易

例:

transaction = mySqlConn.BeginTransaction(IsolationLevel.ReadCommitted)

如果仍然有一個已打開的事務,那么上面的代碼將被忽略。我如何才能知道在打開新事務之前是否尚未提交事務以避免嵌套事務?

您是否看過使用System.Transactions.TransactionScope 它旨在隱式處理這種情況,而無需編寫自定義代碼。

如果要在不使用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;  
}

但是通常您只需要創建事務並將其傳遞給其他方法即可,前提是該事務已被初始化並且可以安全使用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM