2010-05-04 84 views
0

誰能幫我我如何可以驗證交易開盤交易的驗證

例如:

transaction = mySqlConn.BeginTransaction(IsolationLevel.ReadCommitted) 

如果仍有打開的事務,那麼上面的代碼會忽略..怎麼辦我知道在開啓新交易前是否還有一筆尚未交易的交易,以避免嵌套交易?

回答

1

你看過使用System.Transactions.TransactionScope?它旨在處理這種類型的場景implicitly而不必編寫自定義代碼。

如果您打算使用顯式事務管理而不使用System.Transactions,則必須傳遞事務對象(或以某種方式使其可用),並且您需要決定何時啓動事務。例如檢查SqlTransaction是否爲空,如果是,則啓動一個事務,否則只使用現有的事務。

你可以做這樣的事情(錯誤處理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; 
} 

但通常你只需創建您的交易並理解其傳遞到其他方法已經初始化並可以安全使用。

+0

如何檢查交易是否爲空? – Mark 2010-05-04 03:46:20