대 SqlTransaction 나는 "상속"한 약간의 C# 방법에서는 ADO.NET SqlCommand 개체를 만들고 항목의 목록을 통해 루프 데이터베이스 (SQL 서버 2005)에 저장한다.리팩토링 ADO.NET - TransactionScope에
지금까지 기존의 SqlConnection/SqlCommand 방식이 사용되었고 모든 것이 제대로 작동하는지 확인하기 위해 이전 항목을 삭제 한 다음 새 항목을 삽입하는 두 단계가 ADO.NET SqlTransaction으로 래핑되었습니다.
using (SqlConnection _con = new SqlConnection(_connectionString))
{
using (SqlTransaction _tran = _con.BeginTransaction())
{
try
{
SqlCommand _deleteOld = new SqlCommand(......., _con);
_deleteOld.Transaction = _tran;
_deleteOld.Parameters.AddWithValue("@ID", 5);
_con.Open();
_deleteOld.ExecuteNonQuery();
SqlCommand _insertCmd = new SqlCommand(......, _con);
_insertCmd.Transaction = _tran;
// add parameters to _insertCmd
foreach (Item item in listOfItem)
{
_insertCmd.ExecuteNonQuery();
}
_tran.Commit();
_con.Close();
}
catch (Exception ex)
{
// log exception
_tran.Rollback();
throw;
}
}
}
최근에는 .NET TransactionScope 클래스에 대해 많이 읽었으며 궁금한 점이 있습니다. 나는
using (TransactionScope _scope = new TransactionScope())
{
using (SqlConnection _con = new SqlConnection(_connectionString))
{
....
}
_scope.Complete();
}
당신이 선호하는 무엇
, 왜 사용으로 전환하여 아무것도 (일기 좋게, 속도, 안정성)을 얻을 것인가?
마크
그래, 고마워 존 - 그리고 네, 맞아 -이 예제에서는 using() 블록 (아직!)에 SqlCommand가 없다 -이 작업이 진행 중이다 :-) –
re : SQLCommand using, there is any 가비지 컬렉션 이외의 다른 이유 : 예 : Dispose()는 SQLConnection에 대해 Close() 메서드를 호출하므로 Dispose()는 SQLCommand 메서드를 호출합니까? –
클래스가'IDisposable'을 구현하고,이 클래스의 인스턴스를 생성하면, 그 클래스에 Dispose를 호출해야합니다. 가장 간단한 방법은'using' 블록을 사용하는 것입니다. 나는 항상 그것을 구현하는 습관에 빠져있는 것이 가장 좋습니다. –