트랜잭션은 여러 작업을 함께 바인딩한다.
예를 들어 응용 프로그램이 두 가지 작업을 수행한다고 가정한다. 먼저 데이터베이스에 새 테이블을 만든다. 그런 다음 특수 개체를 호출하여 데이터를 수집하고 형식을 지정하여 새 테이블에 삽입한다. 데이터를 채울 수 없는 경우 새 테이블을 만들지 않으려고 한다는 점에서 두 작업은 서로 관련이 있고 상호 종속적이다. 단일 트랜잭션 범위 내에서 두 작업을 실행하면 두 작업 간의 연결이 적용된다. 두 번째 작업이 실패하면 첫 번째 작업이 새 테이블을 만들기 전의 지점으로 롤백된다.
비주얼 베이직 2008에서 트랜잭션을 처리하기 위해서는 SqlTransaction 개체에 SqlConnection 개체의 BeginTransaction() 메소드를 호출하여 할당한 후 각각의 SqlCommand 개체의 Transaction 속성에 SqlTransaction 개체를 할당하는 방식으로 처리합니다.
Dim Tran As SqlClient.SqlTransaction
Dim Command As SqlClient.SqlCommand
Dim reader AS SqlClient.SqlDataReader
Dim result As Integer
Connection.Open()
Tran = Connection.BeginTransaction()
Try
Command = new SqlClient.SqlCommand(CheckQuery.ToString, Connection)
Command.Transaction = Tran
reader = Command.ExecuteReader()
' 조회 결과가 있다면 Rea() 메소드는 True를 출력합니다. 없다면 False를 출력합니다.
Dim HasRecord As Boolean = reader.Read()
reader.Close()
' 하나의 Command 개체를 사용할 때는 해당 명령어의 결과셋을 담은 Reader 개체를 닫은 후에 사용할 수 있습니다.
' 조회 결과가 없다면 행을 삽입합니다.
If(HasRecord = False) Then
Command = New SqlClient.SqlCommand(InsertQuery.ToString, Connection)
Command.Transaction = Tran
result = Command.ExecuteNonQuery()
End If
Tran.Commit()
Catch ex As Exception
Tran.Rollback()
End Try
End Using
'VB.NET 2008 > VB - 데이터 액세스' 카테고리의 다른 글
MSSQL 2008에서 Image 데이터 읽고 쓰기 (0) | 2012.07.04 |
---|---|
데이터베이스 액세스 - SqlConnectionStringBuilder 클래스를 사용한 연결 문자열 작성 (0) | 2011.04.28 |
데이터베이스 액세스 - SQL Server의 Null 값 처리 (0) | 2011.04.28 |
데이터베이스 액세스 - ADO.NET에서 데이터 검색 및 수정 (0) | 2011.04.28 |
데이터베이스 액세스 - 데이터 응용 프로그램과 ADO.NET (0) | 2011.04.28 |