Szukaj…


Składnia

  • Conn.Execute (sql, transakcja: tran); // określ parametr według nazwy
  • Conn.Execute (sql, parametry, tran);
  • Conn.Query (sql, transakcja: tran);
  • Conn.Query (sql, parametry, tran);
  • czekaj na conn.ExecuteAsync (sql, transakcja: tran); // Asynchronizacja
  • czekaj na conn.ExecuteAsync (sql, parametry, tran);
  • czekaj na conn.QueryAsync (sql, transakcja: tran);
  • czekaj na conn.QueryAsync (sql, parametry, tran);

Korzystanie z transakcji

W tym przykładzie użyto SqlConnection, ale dowolne IDbConnection jest obsługiwane.

Również dowolna transakcja IDb jest obsługiwana z powiązanego połączenia IDb.

public void UpdateWidgetQuantity(int widgetId, int quantity)
{
    using(var conn = new SqlConnection("{connection string}")) {
        conn.Open();

        // create the transaction
        // You could use `var` instead of `SqlTransaction`
        using(SqlTransaction tran = conn.BeginTransaction()) {
            try
            {
                var sql = "update Widget set Quantity = @quantity where WidgetId = @id";
                var parameters = new { id = widgetId, quantity };

                // pass the transaction along to the Query, Execute, or the related Async methods.
                conn.Execute(sql, parameters, tran);

                // if it was successful, commit the transaction
                tran.Commit();
            }
            catch(Exception ex)
            {
                // roll the transaction back
                tran.Rollback();

                // handle the error however you need to.
                throw;
            }
        }
    }   
}

Przyspiesz wkładki

Zawijanie grupy wstawek w transakcji przyspieszy je zgodnie z tym pytaniem / odpowiedzią StackOverflow .

Możesz użyć tej techniki lub możesz użyć Kopiowania zbiorczego, aby przyspieszyć serię powiązanych operacji do wykonania.

// Widget has WidgetId, Name, and Quantity properties
public void InsertWidgets(IEnumerable<Widget> widgets)
{
    using(var conn = new SqlConnection("{connection string}")) {
        conn.Open();

        using(var tran = conn.BeginTransaction()) {
            try
            {
                var sql = "insert Widget (WidgetId,Name,Quantity) Values(@WidgetId, @Name, @Quantity)";
                conn.Execute(sql, widgets, tran);
                tran.Commit();
            }
            catch(Exception ex)
            {
                tran.Rollback();
                // handle the error however you need to.
                throw;
            }
        }
    }   
}


Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow