我是ADO的新手,所以我想問一下我是否正確使用事務。 下面的代碼段使用ADO.net中的事務SQL
string SQL1 = "INSERT INTO tbl_cust(cust_id,cust_name) values ('000001','YoungMcD') ";
string SQL2 = "UPDATE tbl_cust SET custname='OldMcDonald' WHERE cust_id='000001'";
string SQL3 = "SELECT * FROM tbl_supplier WHERE supplier_code ='000001'";
// write connstring
string conn = System.Configuration.ConfigurationManager.ConnectionStrings["connstr"].ConnectionString;
// end of connection string
// setting connection
SqlConnection db = new SqlConnection(conn);
SqlTransaction transaction1;
db.Open();
transaction1 = db.BeginTransaction();
try
{
// insert to table
SqlCommand Com1 = new SqlCommand(SQL1, db, transaction1);
Com1.ExecuteNonQuery();
SqlCommand Com2 = new SqlCommand(SQL2, db, transaction1);
Com2.ExecuteNonQuery();
SqlCommand Com3 = new SqlCommand(SQL3, db, transaction1);
Com3.ExecuteNonQuery();
transaction1.Commit();
db.Close();
}
catch
{
transaction1.Rollback();
db.Close();
msg = "error";
goto endret;
}
對於事務,我應該使用
SqlCommand Com1 = new SqlCommand(SQL1, db, transaction1);
,而不是
SqlCommand Com1 = new SqlCommand(SQL1, db);
因爲我已經狀態之前try{}
聲明
編輯開始交易:
我明白了,第一種語法是適用的,但是如何有效地使用ADO?我發現這種方式太簡單了。
我發現自己繼續這樣做插入參數,例如:
string SQL1 = "INSERT INTO tbl_cust(cust_id,cust_name) values ('" + param1 +"','"+ param2 +"') ";
您需要先使用第一個來告訴sql命令屬於哪個事務,因爲您可以同時進行多個事務。 – garethb
請注意,雖然這將起作用,但實際上在應用程序和sql服務器之間進行了5次往返。使用存儲過程只需一次往返即可完成相同的操作。 –
我可以要求解釋你做什麼5次往返的意思嗎?因爲我沒有得到它,爲什麼這樣做比創建存儲過程更加低劣 – KokoriNut