2010-05-04 2 views
0

Может кто-нибудь поможет мне о том, как я могу проверить транзакциюоткрытия проверка транзакций в vb.net

пример:

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