当前位置: 代码迷 >> ASP.NET >> 怎样让SqlDataAdapter.Update 支持事务,该怎么解决
  详细解决方案

怎样让SqlDataAdapter.Update 支持事务,该怎么解决

热度:4774   发布时间:2013-02-25 00:00:00.0
怎样让SqlDataAdapter.Update 支持事务
利用SqlDataAdapter.Update方法将DATASET中的数据更新到数据库,功能已经实现了。但是缺少事务,不能保证数据的完整性。以下是源代码,请问怎么添加事务功能。
C# code
DataTable t = (DataTable)Session["product"]; using (SqlConnection con = Ares.WebSite.App_Code.DB.CreateConn())            {                con.Open();                SqlDataAdapter sda = new SqlDataAdapter("select top 1 * from ProductTab", con);                  DataSet ds = new DataSet();                    sda.Fill(ds, "prouct");                    SqlCommandBuilder builder = new SqlCommandBuilder(sda);                    for (int i = 0; i < t.Rows.Count; i++)                    {                        DataRow r = t.NewRow();                        ds.Tables["car"].Rows.Add(null, null, t.Rows[i]["GUID"], Guid.NewGuid(), t.Rows[i]["SalesPrice"], t.Rows[i]["Amount"], true, "jsjd");                    }                    sda.Update(ds, "product");                                        


------解决方案--------------------------------------------------------
C# code
public void UpdateDataSet(DataSet ds, string tableName, SqlCommand insertCommand, SqlCommand updateCommand, SqlCommand deleteCommand) {            using (SqlConnection conn = this.CretaeSqlConnection()) {                conn.Open();                using (SqlTransaction transaction = conn.BeginTransaction()) {                    if(insertCommand == null && updateCommand == null && deleteCommand ==null){                        throw new Exception("insertCommand updateCommand deleteCommand 不能全部為空");                    }                    using (SqlDataAdapter dapter = new SqlDataAdapter()) {                        if (insertCommand != null) {                            insertCommand.Connection = conn;                            insertCommand.Transaction = transaction;                            dapter.InsertCommand = insertCommand;                        }                        if (updateCommand != null) {                            updateCommand.Connection = conn;                            updateCommand.Transaction = transaction;                            dapter.UpdateCommand = updateCommand;                        }                        if (deleteCommand != null) {                            deleteCommand.Connection = conn;                            deleteCommand.Transaction = transaction;                            dapter.DeleteCommand = deleteCommand;                        }                        try {                                                     dapter.Update(ds, tableName);                            transaction.Commit();                        }                        catch (SqlException ex) {                            transaction.Rollback();                            throw ex;                        }                    }                }            }        }
------解决方案--------------------------------------------------------
C# code
//执行事务处理public void DoTran(){  //建立连接并打开 SqlConnection myConn=GetConn(); myConn.Open(); SqlCommand myComm=new SqlCommand(); //SqlTransaction myTran=new SqlTransaction(); //注意,SqlTransaction类无公开的构造函数 SqlTransaction myTran; //创建一个事务 myTran=myConn.BeginTransaction(); try {  //从此开始,基于该连接的数据操作都被认为是事务的一部分  //下面绑定连接和事务对象  myComm.Connection=myConn;  myComm.Transaction=myTran; //定位到pubs数据库  myComm.CommandText="USE pubs";  myComm.ExecuteNonQuery();//操作1  myComm.CommandText=""; //操作2  myComm.ExecuteNonQuery();   //提交事务  myTran.Commit(); } catch(Exception err) {  myTran.rollback();  throw new ApplicationException("事务操作出错,系统信息:"+err.Message);  } finally {  myConn.Close();  }}
------解决方案--------------------------------------------------------
  相关解决方案