在C#中開啓事務

 1.爲何要開啓事務:sql

舉一個簡單的例子:在銀行業務中,有一條記帳原則,即又借有貸。爲了保證這種原則,每發生一筆銀行業務,就必須保證會計帳目上借方科目和貸方科目至少個少一筆,而且這兩筆要麼同時成功,要麼同時失敗。  數據庫

   事務是一個單個的工做單元。若是某一個事務成功,則在該事務中進行的全部數據更改均會提交,成爲數據庫中的永久部分。若是事務遇到錯誤,這時必須進行回滾操做,則全部數據更改均被清除。ui

2.在C#中開啓事務spa

咱們都知道在數據庫中如何開啓事務,那麼若是想經過在C#中開啓事務必須藉助Transaction類。code

3.在C#中開啓事務的步驟對象

01.調用SqlConnection對象的BeginTransaction()方法,建立一個SqlTransaction對象,標誌事務開始。blog

02.將建立的SqlTransaction對象分配給要執行的SqlCommand的Transaction屬性。事務

03.調用相應的方法執行SqlCommand命令。字符串

04.調用SqlTransaction的Commit()方法完成事務。或調用Rollback()方法終止事務。   cmd

4.在進行事務操做中的注意點

01.在調用BeginTransaction()方法開始事務以前,要打開數據庫鏈接,不然出現異常。

02.若是在事務的Commit()方法或RollBack()方法執行前數據庫鏈接斷開或關閉,則事務將回滾。

5.添加年級信息時候的事務處理例子

 //準備鏈接字符串
            string str = "data source=.;initial catalog=Myschool;uid=sa;pwd=123";
            //建立數據庫鏈接對象
            SqlConnection con = new SqlConnection(str);
            //sql語句:添加一條記錄到年級表
            string sql = "insert into grade values(@gradename)";
            //建立SqlParameter對象,設置參數
            SqlParameter sp = new SqlParameter("@gradename", txtgradename.Text);
            //建立命令對象
             SqlCommand cmd = new SqlCommand(sql, con);
             //經過Parameter集合的add()方法天填充參數集合
             cmd.Parameters.Add(sp);
            //打開鏈接
             con.Open();
            //默認讓SqlTransaction對象爲空
             SqlTransaction trans = null;
            //開啓事務:標誌事務的開始
             trans = con.BeginTransaction();
            try
            {
                //將建立的SqlTransaction對象分配給要執行的sqlCommand的Transaction屬性
                cmd.Transaction = trans;
                //執行sql若是添加成功放回1
                int count=cmd.ExecuteNonQuery();
                if (count > 0)
                {
                    MessageBox.Show("成功");
                    //事務提交
                    trans.Commit();
                }
                else 
                {
                    MessageBox.Show("失敗");
                    //事務回滾
                    trans.Rollback();
                }
            }
            catch (Exception)
            {
                //若是某個環節出現問題,則將整個事務回滾
                trans.Rollback();
            }
相關文章
相關標籤/搜索