程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> 使用事務(WinForm+SQL Server)

使用事務(WinForm+SQL Server)

編輯:C#入門知識

事務是作為單個邏輯工作單元執行的一系列操作。一個邏輯工作單元必須有四個屬性,稱為 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
            {
   &nb

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved