C# 에서 Transaction 처리 할때요...

mahapunch의 이미지

처리해야 하는 DB작업이 4가지 있고 이 4가지를 각각 다른 함수로 만들었어요.
그런데 이 4가지 작업을 하나의 트랜잭션으로 묶어야 하죠.
그래서 전 아래와 같이 코딩을 했습니다.

//////////////////////////////////////////////////////////////////////////
class Test : Form
{
Conncection conn = new Connection(ConnectionString);
Transaction tran = null;

Test_load()
{
conn.open();
this.tran = conn.BeginTransaction();
try
{
FuncA();
FuncB();
FuncC();
FuncD();
}
catch(Exception ex)
{
this.tran.Rollback();
}
finally
{
this.conn.close()
}
}

void FuncA()
{
string sql = "select....."; // Insert, Update 쿼리문
Command cmd = new Command(sql, this.conn)
cmd.transaction = this.tran;
try
{
if (this.conn.State == ConnectionState.Closed) this.conn.Open();
cmd.execute(); // executeNonQuery, executeDataReader 구문
}
catch(Exception ex)
{
throw ex;
}
finally
{
}
}
void FuncB(){} // FuncA 와 같은 형태
void FuncC(){} // FuncA 와 같은 형태
void FuncD(){} // FuncA 와 같은 형태
}
//////////////////////////////////////////////////////////////////////////

이렇게 하면 프로그램이 돌아가긴 하는데.. 왠지 뭔가 석연치가 않습니다.

FuncA 함수가 개별적으로 쓰일경우,
1. Finlly 에서 this.conn.close() 를 호출하기가 모호해지죠. this.conn.close() 를 호출하면
transaction이 깨질 수 있으니까요. this.conn.close() 를 호출 안하자니 뭔가 찜찜하고..
2. cmd.transaction = this.tran; 구문도 필요없는 문장이 되는데.. 이것도 찜찜해요..

결국 FuncA,B,C,D 함수는 뭔가 트랜잭션으로 묶여지기 위한 형태로 보인다고 해야될까?
개별적으로 사용해도 되는지 거시기하고..

뭔가 깔끔하게 코딩하는 방법 없을까요? 다른분들은 어떻게들 하시는지 궁금해서요..
어떤분은 Connection pool 을 쓰라고 하는데 어떻게 하라는건지 잘 모르겠어요..
C# 에서 Connection pool 을 사용하는 기법은 어디서 볼수 있나요?

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.