如果是直接執行SQL語句時,事務很好處理,對於大多數的Erp應用,不能能用SQL來處理數據,所以更新DataSet更為常用,更新單個的DataSet也非常簡單,不需要事務的處理,給多個DataSet增加事務多數應用於分散式的程式代碼中,下麵為在Webservice中更新Winform傳遞過來的經過壓
如果是直接執行SQL語句時,事務很好處理,對於大多數的Erp應用,不能能用SQL來處理數據,所以更新DataSet更為常用,更新單個的DataSet也非常簡單,不需要事務的處理,給多個DataSet增加事務多數應用於分散式的程式代碼中,下麵為在Webservice中更新Winform傳遞過來的經過壓縮的數據集的事務處理代碼,多個DataSet 情況。
/// <summary> /// 更新經過壓縮的DataSet /// </summary> /// <param >環境變數</param> /// <param >二進位的DataSet</param> /// <returns>出現異常,返回一個錯誤信息</returns> public object UpdataSet(object[] env, byte[] byt) { object info = null; SqlConnection sqlconn = null; //定義事務 SqlTransaction transaction = null; DataSet ds = null; try { ds = md.BytesToDs(byt); string Url = "資料庫連接語名"; sqlconn = new SqlConnection(Url); sqlconn.Open(); transaction = sqlconn.BeginTransaction(IsolationLevel.ReadCommitted, "transname");//實例化事務 SqlDataAdapter adapter; SqlCommandBuilder objCommandBuilder; for (int i = 0; i < ds.Tables.Count; i++) { adapter = new SqlDataAdapter("select * from " + ds.Tables[i].TableName + " where 2>3", sqlconn);//傳統用法 objCommandBuilder = new SqlCommandBuilder(adapter); //開始掛起 //掛起操作 adapter.DeleteCommand = new SqlCommand("...刪除語句..", sqlconn, transaction); //adapter的增刪查改可以與事務一起用,註意這裡沒有實例SqlCommand對象所以new SqlCommand adapter.InsertCommand = new SqlCommand("............", sqlconn, transaction); adapter.UpdateCommand = new SqlCommand(".............", sqlconn, transaction); adapter.SelectCommand = new SqlCommand("select * from " + ds.Tables[i].TableName + " where 2>3", sqlconn, transaction); //以上是adapter的新用法,new SqlCommand後面寫sql語句,SqlConnection,還可以寫事務...就不用實例SqlCommand對象 //沒有實例SqlCommand對象所以獲取 adapter.DeleteCommand = objCommandBuilder.GetDeleteCommand(); adapter.InsertCommand = objCommandBuilder.GetInsertCommand(); adapter.UpdateCommand = objCommandBuilder.GetUpdateCommand(); objCommandBuilder.DataAdapter.Update(ds, ds.Tables[i].TableName.ToString());// } transaction.Commit();//無誤後提交事務 sqlconn.Close(); } catch (Exception err) { Console.Out.WriteLine("存檔時發生錯誤:" + err.Message); info = "存檔時發生錯誤:" + err.Message; //事務回滾 transaction.Rollback(); } finally { if (sqlconn != null) { sqlconn.Close(); } } return info; }