SqlCommand對象-Transaction事務的使用


            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();//關閉數據庫連接


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM