Ведение транзакции из asp.net C # для базы данных при вставке данных в две таблицы - PullRequest
2 голосов
/ 12 сентября 2011

У меня есть две таблицы в моей базе данных, а именно .PurchaseOrderMST и SiteTRS. Первичным ключом PurchaseOrderMST является внешний ключ в SiteTRS. Дело в том, что сначала данные вставляются в PurchaseOrderMST, а затем SiteTRS с использованием двух отдельных SP. Я хочу поддерживать транзакцию во время вставки в эти две таблицы из asp.net (C #). Если данные в первой таблице вставлены успешно, то и только тогда данные во второй таблице должны быть вставлены. Если вставка не выполняется во вторых таблицах, вставка в первых таблицах также должна откатываться. Как я могу сделать это, используя механизм транзакций asp.net ???

1 Ответ

2 голосов
/ 12 сентября 2011

Это на самом деле не связано с ASP.NET, но, как правило, как транзакции работают в .NET Framework. С SqlClient вот как вы это делаете:

using (var connection = new SqlConnection("your connectionstring"))
{
    connection.Open();

    using (var transaction = connection.BeginTransaction())
    {
        try
        {
            using (var command1 = new SqlCommand("SP1Name", connection, transaction))
            {
                command1.ExecuteNonQuery();
            }

            using (var command2 = new SqlCommand("SP2Name", connection, transaction))
            {
                command2.ExecuteNonQuery();
            }

            transaction.Commit();
        }
        catch
        {
            transaction.Rollback();
            throw;
        }
    }
}

Вам, конечно, нужно добавить Parameters к SqlCommand объектам перед их выполнением, и какой метод выполнения вы используете (ExecuteNonQuery(), ExecuteScalar() или ExecuteReader()), зависит от того, действительно ли ваши хранимые процедуры возвращают любые данные или нет.

...