using (SqlConnection connection = new SqlConnection(connStr)) { SqlCommand sqlcmd = new SqlCommand(); sqlcmd.Connection = connection; connection.Open(); SqlTransaction tran = connection.BeginTransaction(); sqlcmd.Transaction = tran; //connection.BeginTransaction(); //sqlcmd.Connection.BeginTransaction(); try { sqlcmd.CommandText = " INSERT INTO tLabPrint (單據編號,單據時間) values('1','2017-02-25') "; sqlcmd.ExecuteNonQuery(); tran.Commit(); //sqlcmd.Transaction.Commit(); } catch (Exception ex) { tran.Rollback(); throw new Exception("error:事務執行失敗 " + ex.Message); } }
SqlCommand對象-Transaction事務的使用
事務作為一個單元被提交和回滾,可以與SQL語句進行組合使用,例如:對於銀行事務,可以要從一個帳號取錢,存到另一個帳號中,然后在一個單元中提交這些改變,如果發生問題,則同時回滾這些改變。通過設置SqlCommand對象的事務屬性Transaction與SqlTransaction對象綁定來實現事務處理。
使用步驟如下:
1、生成SqlTransaction對象,並用SqlConnection對象的BeginTransaction方法開始事務。
2、生成保存SQL語句的SqlCommand對象。
3、 將SqlCommand對象的Transaction屬性設置為第1步生成的SqlTransaction對象。
4、將SqlCommand對象的CommandText屬性設置為第一個INSERT語句。
5、用SqlCommand對象的ExecuteNonQuery()方法執行第一個INSERT語句。此方法不返回結果集。
6、將SqlCommand對象的CommandText屬性設置為第二個INSERT語句。
7、用SqlCommand對象的ExecuteNonQuery()方法執行第二個INSERT語句。此方法不返回結果集。
8、用SqlTransaction對象的Commit()方法提交事務,使INSERT語句增加的兩行在數據庫中保存。
說明:如果要撤消構成事務的SQL語句,則可以用Rollback()方法而不是Commit()方法。默認情況下,事務撤消一定要用Commit()或Rollback()方法明確事務要提交還是回滾。
下面代碼使用ExecuteNonQuery執行INSERT語句並用SqlTransaction對象進行數據提交
con.Open();//在調用方法前打開數據庫連接
SqlCommand comm=new con.CreateCommand();//創建和聲明Command對象
SqlTransaction tran=con.BeginTransaction();//在生成SqlTransaction對象前必須打開數據庫連接
comm.Transaction=tran;//設置屬性為SqlTransaction對象
comm.CommandText= “insert into dept(dept) values(‘信息組’)”;//設置
SqlCommand對象要執行的SQL語句
comm.ExecuteNonQuery();//執行SQL語句
comm.CommandText= “insert into dept(dept) values(‘生產物流組’)”; //設置SqlCommand對象要執行的SQL語句
comm.ExecuteNonQuery();//執行SQL語句
tran.Commit();提交INSERT語句對數據庫中表的改變。如果要撤消改變,使用Rollback()
con.Close();//關閉數據庫連接