проверка открытия транзакции в vb.net - PullRequest
0 голосов
/ 04 мая 2010

Может ли кто-нибудь помочь мне с проверкой транзакции

пример:

transaction = mySqlConn.BeginTransaction(IsolationLevel.ReadCommitted)

Если открытая транзакция все еще существует, приведенный выше код будет игнорироваться. Как узнать, была ли транзакция еще не совершена до открытия новой транзакции, чтобы избежать вложенной транзакции?

1 Ответ

1 голос
/ 04 мая 2010

Вы смотрели на использование System.Transactions.TransactionScope ? Он предназначен для обработки сценариев этого типа неявно без необходимости написания пользовательского кода.

Если вы собираетесь использовать явное управление транзакциями без использования System.Transactions, вам нужно будет передать объект транзакции (или каким-то образом сделать его доступным), и вам нужно будет решить, когда начинать транзакцию. например проверьте, имеет ли значение SqlTransaction значение null, и, если это так, запустите транзакцию, в противном случае просто используйте существующую транзакцию.

Вы могли бы сделать что-то вроде этого (Обработка ошибок для транзакции. Функция возврата () опущена):

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

Но обычно вы просто создаете свою транзакцию и передаете ее другим методам, понимая, что она уже инициализирована и безопасна для использования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...