C#操作SQL時使用事務介紹


事務是作為單個邏輯工作單元執行的一系列操作。一個邏輯工作單元必須有四個屬性,稱為 ACID(原子性、一致性、隔離性和持久性)屬性,只有這樣才能成為一個事務。事務管理特性,強制保持事務的原子性和一致性。事務啟動之后,就必須成功完成,否則SQL Server將撤消該事務啟動之后對數據所作的所有修改。

    出於事務的特性(ACID),筆者將應用事務的一致性來排除程序在運行過程中可能發生的一系列“危險”因素,確保數據的安全,例如,一個用戶在取錢時,卡以放入取款機進行操作,等待取款,這時突然停電,通過事務可以幫助用戶挽回損失,將信息恢復到操作之前的狀態。即主要用於針對多個表操作時(插入、刪除、修改)為了保證數據的一致性,使用事物。
   主要程序程序代碼如下。
首先實例化一個連接對象connection,其次通過連接對象connection又分別實例化一個SqlTransaction對象sqlTran、一個SqlCommand對象command,然后再將command對象的Transaction屬性與sqlTran對象關聯起來,通過事物實現程序的一致性。

 

public bool Tran(string strID,string strName,string strSex,string strDelID,bool IfDO) 
        { 
               using (SqlConnection connection = ConDB()); //創建連接對象 
               { 
                SqlTransaction sqlTran = connection.BeginTransaction();//開始事務 
               SqlCommandcommand = connection.CreateCommand();//創建SqlCommand對象 
                command.Transaction = sqlTran;//將SqlCommand與SqlTransaction關聯起來 
                try 
                { 
                    command.CommandText = "insert into t_people values('" + strID + "','" + strName +  
                    "','" + strSex + "')"; 
                    command.ExecuteNonQuery(); 
                    command.CommandText = "delete from t_people where tb_PID='" + strDelID + "'"; 
                    command.ExecuteNonQuery(); 
                    if (IfDO)//拋出異常,另其發生回滾 
                    { 
                        throw new Exception(); 
                    } 
                    sqlTran.Commit(); 
                    connection.Close(); 
                    return true; 
                } 
                catch (Exception ex) 
                { 
                    Console.WriteLine(ex.Message); 
                    sqlTran.Rollback(); 
                    return false; 
                } 
             } 
        }
 

    為Tran方法獲取參數,如果Tran方法成功則信息成功添加否則添加失敗。為了使讀者可以更好的了解事務的工作原理,程序中人為的標識事物的操作方式(提交、回滾)。

 

 

 

private void button1_Click(object sender, EventArgs e) 
        { 
            ClsDB.ClsDBControl DBDT = new OptDB.ClsDB.ClsDBControl(); 
            string strid, strname, strsex, strDelid; 
            strid = this.textBox1.Text.Trim().ToString(); 
            strname = this.textBox2.Text.Trim().ToString(); 
            strsex = this.textBox3.Text.Trim().ToString(); 
            strDelid = this.textBox4.Text.Trim().ToString(); 
            bool Bt; 
            if (this.radioButton1.Checked) 
            { 
                Bt = false; 
            } 
            else 
            { 
                Bt = true; 
            } 
            if (DBDT.Tran(strid, strname, strsex, strDelid, Bt)) 
            { 
                MessageBox.Show("事務供交成功"); 
            } 
            else 
            { 
                MessageBox.Show("事務回滾成功"); 
            } 
        }


免責聲明!

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



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