MySQL транзакции в asp.net? - PullRequest
0 голосов
/ 23 июля 2010

Можете ли вы, ребята, дать мне знать, как обрабатывать транзакции в asp.net?

т.е. У меня есть несколько запросов (присутствующих в разных функциях и вызываемых в разных ситуациях), которые должны быть выполнены в целом. Итак, как мне это сделать?

Не уверен в синтаксисе и методе / практике написания операторов в .net (коммит, откат и т.д.)

Пожалуйста, дайте мне знать. Также, пожалуйста, укажите мне на хорошие статьи, если это возможно. Спасибо !!!

Ответы [ 4 ]

1 голос
/ 23 июля 2010

Я рекомендую использовать TransactionScope , потому что вы можете использовать его независимо от того, какую БД вы используете. С ним можно даже выполнять распределенные транзакции (операции с несколькими базами данных в рамках одной транзакции).

Вы можете обратиться к ссылке для примера кода, но в целом вы делаете это:

try
{
    using (TransactionScope scope = new TransactionScope())
    {
        using (MySqlConnection connection1 = new MySqlConnection (connectionString))
        {
            // Opening the connection automatically enlists it in the 
            // TransactionScope as a lightweight transaction.
            connection1.Open();

            // create the DB commands and perform the DB operations
            .
            .
            .

            // The Complete method commits the transaction. If an exception has been thrown,
            // Complete is not called and the transaction is rolled back.
            scope.Complete();    
        }
    }
}
catch (Exception e)
{
    // something went wrong, handle the exception accordingly. Note
    // that since we did not call TransactionScope.Complete, nothing
    // gets committed to the DB.
}
0 голосов
/ 23 июля 2010

Не знаю много о TransactionScope, но я просто использую обычную IDbTransaction, например:

IDbConnection conn = null;
IDbCommand cmd = null;
IDbTransaction tran = null;

try
{
    conn = DatabaseUtil.GetConnection(); //Get the connection somehow
    cmd = conn.CreateCommand();

    tran = conn.BeginTransaction();
    cmd.Transaction = tran;


    //Do your DB Work

    tran.Commit();
}
catch (SystemException ex)
{
    tran.Rollback();
}
finally
{
    if (conn != null) conn.Close();
}

С классами IDb вы в определенной степени независимы от БД.

0 голосов
/ 23 июля 2010

Если это локальная транзакция, вы также можете использовать объект транзакции ado.net. TransactionScope будет обрабатывать распределенные транзакции, если необходимо, но требует настройки MSDTC, если транзакция повышена до распределенной транзакции.

http://msdn.microsoft.com/en-us/library/2k2hy99x.aspx

Оба находятся в пространстве имен System.Transactions http://msdn.microsoft.com/en-us/library/system.transactions.aspx

0 голосов
/ 23 июля 2010
...