using System;
using System.Collections.Generic;
using System.Text;
using System.Data.SqlClient;
using System.Transactions;
namespace Ex04
{
class Program
{
static void Main(string[] args)
{
//1.Local Transaction
//------------------------------------------------------------------------
//SqlConnection conn = new SqlConnection();
//conn.ConnectionString = "SERVER=.;" +
// "DATABASE=exampledb;" +
// "UID=sa;PWD=knit";
//SqlCommand cmd = new SqlCommand();
//cmd.Connection = conn;
////동일 데이터베이스의 두 개 이상의 명령에 대한 트랜잭션
////Transaction 객체를 사용해서 트랜잭션 관리
//SqlTransaction tran = null; // 롤백을 하기 위해 추가
//try
//{
// conn.Open();
// tran = conn.BeginTransaction(); // 롤백을 하기 위해 추가
// cmd.Transaction = tran; // 롤백을 하기 위해 추가
// cmd.CommandText = "UPDATE bankaccount " +
// "SET balance = balance - 500 " +
// "WHERE ac_owner = '장동건'";
// cmd.ExecuteNonQuery();
// cmd.CommandText = "UPDATE bankaccount " +
// "SET balance222 = balance + 500 " +
// "WHERE ac_owner = '김윤석'";
// cmd.ExecuteNonQuery();
// tran.Commit(); // 롤백을 하기 위해 추가
// Console.WriteLine("계좌이체 성공");
//}
//catch(Exception)
//{
// tran.Rollback(); // 롤백을 하기 위해 추가
// Console.WriteLine("계좌이체 실패");
//}
//finally { conn.Close(); }
//-----------------------------------------------------------------------------
//2. Distributed Transaction
SqlConnection conn = new SqlConnection();
conn.ConnectionString =
"SERVER=.;" +
"DATABASE=exampledb;" +
"UID=sa;PWD=knit;";
SqlConnection conn2 = new SqlConnection();
conn2.ConnectionString =
"SERVER=172.16.7.1;" +
"DATABASE=exampledb;" +
"UID=sa;PWD=knit;";
SqlCommand cmd = new SqlCommand();
cmd.Connection = conn;
SqlCommand cmd2 = new SqlCommand();
cmd2.Connection = conn2;
//참조 추가 System.Transactions 추가
//start distributed transaction
TransactionScope scope = new TransactionScope(); ;
try
{
conn.Open();
conn2.Open();
cmd.CommandText =
"UPDATE bankaccount " +
"SET balance = balance + 500 " +
"WHERE ac_owner = '장동건'";
cmd.ExecuteNonQuery();
cmd2.CommandText =
"UPDATE bankaccount " +
"SET balance = balance + 9500 " +
"WHERE ac_owner = '김윤석'";
cmd2.ExecuteNonQuery();
scope.Complete(); //성공 표시 (commit X)
Console.WriteLine("계좌이체 성공");
}
catch (Exception ex)
{
Console.WriteLine("계좌이체 실패");
Console.WriteLine(ex.Message);
}
finally { conn.Close(); conn2.Close(); }
//Complete()이 호출 되었으면 Commit 아니면 Rollback
scope.Dispose();
}
}
}
////////////////////////////////////////////////////////////////////
// 과제
// 연락처관리 프로그램 & 윈폼 기반 DB 사용
// 등록 & 수정 & 삭제 & 목록 보기 & 검색( 와일드 카드 검색 (이름%)으로 )
////////////////////////////////////////////////////////////////////
'프로그램 > C# - Study' 카테고리의 다른 글
C# - EX06 - DataGridView (테이터 집합) 간단하게 DB 자료 가져오기 (0) | 2010.10.18 |
---|---|
C# - EX05 SHOWDATA, UPDATA 추가 (0) | 2010.10.18 |
C# - EX05 DataGridView 활용 (2) | 2010.10.18 |
C# - Ex03 - MSSQL 과 C# 연동 - 불러오기 와 삭제 (윈폼 버젼) (1) | 2010.10.14 |
C# - EX02 - MSSQL 과 C# 연동 효율적인 방법 ( 콘솔버젼 ) (0) | 2010.10.14 |