SqlTransaction trans = null;
try
{
upcomm = new SqlCommand(UpdateRefer, conn);
upcomm.Parameters.AddWithValue("@refer", refer);
upcomm.Parameters.AddWithValue("@step", step);
incomm = new SqlCommand(InsertRefer, conn);
incomm.Parameters.AddWithValue("@writer",txtWriter.Text.Trim());
incomm.Parameters.AddWithValue("@title", txtTitle.Text.Trim());
incomm.Parameters.AddWithValue("@contents",txtContents.Text.Trim());
trans = conn.BeginTransaction();
upcomm.Transaction = trans;
incomm.Transaction = trans;
upcomm.ExecuteNonQuery();
incomm.ExecuteNonQuery(); //쿼리를 실행하고
trans.Commit();
}
catch (Exception ee)
{
trans.Rollback();
}
방법은 여러가지가 있다.
예외처리가 아니면 롤백할 이유야 없겠다. BeginTransaction 을 이용한다.
아래는 후니사이트에 가니깐 관련 코멘트가 잇어서 가져왔다.
System.Data.SqlClient.SqlConnection <--- connection객체에 트랜잭션 관련 메서드가 있는데요????
DataAdapter를 만들때.... 커넥션 객체를 하나 생성해줘야 하잖아요.
BeginTransaction 메서드는 거기 있는건데요...........
SqlConnection con = new SqlConnection();
SqlCommand cmd = con.CreateCommand();
cmd.CommandText = "SELECT 어쩌고 저쩌고";
con.BeginTransaction();
//.........
SqlDataAdapter sq = new SqlDataAdapter(cmd, con);
con.Close();
con.Dispose();
근데 이제는 분산 트랙잭션으로 묶는것도 가능하지 싶네요.
con.EnlistDistributedTransaction();
con.EnlistTransaction();