SqlTransaction

(史帝芬, 2006/6/25, hi.steven@gmail.com)
在寫資料庫程式時,一個transaction執行很多個update、insert、delete是常有的事, 很奇怪的是,目前的ASP.NET或C#的書,卻多半沒有講解怎麼做, 這裡舉個簡單的例子供大家參考。假設目前有兩個table -- users和friends分別如下, 範例程式會同時insert一筆資料到兩個table,如果成功了就commit,失敗了就roll back。
table users
欄位型別
useridvarchar(10)
pwdvarchar(20)

table friends
欄位型別
useridvarchar(10)
friendidvarchar(10)
範例程式:
string connect_string = "server=win2003;uid=sa;pwd=PASSWORD;database=MyDB";
SqlConnection conn = new SqlConnection(connect_string);
conn.Open();
SqlTransaction transaction = conn.BeginTransaction();

try
{
	SqlCommand users = new SqlCommand("insert into Users(userid, pwd) 
            	values('" + userid + "', '" + pwd + "')", conn);
        users.Transaction = transaction;
        users.ExecuteNonQuery();

        SqlCommand friends = new SqlCommand("insert into friends(userid, friendid) 
           	values('" + userid + "', '" + friend1 + "')", conn);
        friends.Transaction = transaction;
        friends.ExecuteNonQuery();

        transaction.Commit();
}
catch
{
        transaction.Rollback();
}
finally
{
        conn.Close();
}