본문 바로가기
IT-개발,DB

ADO.NET: 데이터베이스 트랜잭션 사용 (asp.net)

by SB리치퍼슨 2016. 1. 25.

ADO.NET: 데이터베이스 트랜잭션 사용

출처: 인터넷



ADO.NET: 데이터베이스 트랜잭션 사용

데이터베이스 트랜잭션은 데이터베이스에 대한 데이터 커밋을 제어하는 데 사용됩니다. 예를 들어, 표준 계좌 프로시저의 경우에는 입출금 계좌에서 동시에 입출금이 발생해야 합니다. 하지만 정전이나 네트워크 오류 등으로 인해 컴퓨터가 중단될 경우, 한 레코드만 업데이트되거나 추가될 가능성이 있습니다. 이러한 상황을 방지하기 위해 트랜잭션이 사용됩니다. ADO.NET의 트랜잭션은 ADO에서처럼 데이터베이스 수준에서 처리되므로 데이터베이스에서 트랜잭션을 지원해야 합니다.

트랜잭션에 대한 세 가지 기본 명령에는 BeginTransactionCommit 및 Rollback이 있습니다. BeginTransaction은 트랜잭션 시작을 표시합니다. BeginTransaction과 다음 명령인 Rollback 또는 Commit 사이에 발생되는 모든 것은 트랜잭션의 일부로 간주됩니다. 다음 코드 예제에서는 트랜잭션을 사용하는 방법을 보여 줍니다.

 

 

 

SqlConnection myConnection = new SqlConnection("server=(local)\\VSdotNET;Trusted_Connection=yes;database=northwind");
    SqlCommand myCommand = new SqlCommand();
  

  SqlTransaction myTrans;
    
    // Open the connection.
    myConnection.Open();
    
    // Assign the connection property.
    myCommand.Connection  = myConnection;
    
    // Begin the transaction.
    myTrans = myConnection.BeginTransaction();
    
    // Assign transaction object for a pending local transaction
    myCommand.Transaction = myTrans;
    
    try
    {
      // Restore database to near its original condition so sample will work correctly.
      myCommand.CommandText = "DELETE FROM Region WHERE (RegionID = 100) OR (RegionID = 101)";
      myCommand.ExecuteNonQuery();
    
      // Insert the first record.
      myCommand.CommandText = "Insert into Region (RegionID, RegionDescription) VALUES (100, 'MidWestern')";
      myCommand.ExecuteNonQuery();
    
      // Insert the second record.
      myCommand.CommandText = "Insert into Region (RegionID, RegionDescription) VALUES (101, 'MidEastern')";
      myCommand.ExecuteNonQuery();
    
      myTrans.Commit();
      Console.WriteLine("Both Records are written to the database!");
    }
    catch(Exception e)
    {
      myTrans.Rollback();
      Console.WriteLine(e.ToString());
      Console.WriteLine("Neither record is written to the database!");
    }
    finally
    {
      myConnection.Close();
    }

반응형

댓글