수색…
통사론
- conn.Execute (sql, transaction : tran); // 이름으로 매개 변수를 지정합니다.
- conn.Execute (sql, parameters, tran);
- conn.Query (sql, transaction : tran);
- conn.Query (sql, parameters, tran);
- 기다리고 conn.ExecuteAsync (sql, transaction : tran); // 비동기
- 기다리고 conn.ExecuteAsync (sql, parameters, tran);
- conn.QueryAsync (sql, transaction : tran);을 기다린다.
- conn.QueryAsync (sql, parameters, tran);을 기다립니다.
트랜잭션 사용
이 예제에서는 SqlConnection을 사용하지만 모든 IDbConnection이 지원됩니다.
또한 모든 IDbTransaction은 관련 IDbConnection에서 지원됩니다.
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;
}
}
}
}
인서트 속도 향상
트랜잭션에 삽입 그룹을 래핑하면이 StackOverflow 질문 / 답변 에 따라 속도가 향상됩니다.
이 기술을 사용하거나 대량 복사를 사용하여 수행 할 일련의 관련 작업 속도를 높일 수 있습니다.
// 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
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow