.NET下使用DataAdapter保存数据时,如何生成command语句及使用事务
在.NET下,運用DATASET對數據進行批量更新時,需要與 DataAdapter配合使用。DataAdapter數據適配器的作用是生成數據更新時所需的insert,delete,update等語句,這些語句一般在開發階段,在IDE環境下生成,但是如果需要在程序中動態配置數據來源,那么DataAdapter的insert,delete,update語句就需要動態生成了。這就是SqlCommandBuilder 對像了
在.NET下,運用DATASET對數據進行批量更新時,需要與?DataAdapter配合使用。DataAdapter數據適配器的作用是生成數據更新時所需的insert,delete,update等語句,這些語句一般在開發階段,在IDE環境下生成,但是如果需要在程序中動態配置數據來源,那么DataAdapter的insert,delete,update語句就需要動態生成了。這就是SqlCommandBuilder 對像了(以SqlDataAdapter對像為例,如果是別的DataAdapter對像,則可改為DBCommandBuilder )。例如有以下更新方法
??????? /// <summary>
??????? /// 根據傳入的SQL語句,為DataAdapter動態生成Command語句,并將數據保存到數據庫
??????? /// </summary>
??????? /// <param name="ds">需操作的DataSet</param>
??????? /// <param name="connectstr">數據庫連接字符串</param>
??????? /// <param name="tablename">DataSet中的指定需更新的表</param>
??????? /// <param name="sqlstr">數據來源SQL語句,需要有主鍵才能更新</param>
??????? public void DataSetUpdate(DataSet ds,string connectstr,string tablename,string sqlstr)
??????? {
?????????? try
??????????? {
??????????????? SqlDataAdapter adapter = new SqlDataAdapter(sqlstr, connectstr);???
????????????????//使用SqlCommandBuilder??對像填充SqlDataAdapter?的InsertCommand、DeleteCommand、UpdateCommand對像
??????????????? SqlCommandBuilder cmdBuilder = new SqlCommandBuilder(adapter);
??????????????? int val = adapter.Update(ds, tablename);
??????????????? ds.AcceptChanges();
??????????? }
??????????? catch
??????????? {
??????????????? throw;
??????????? }
??????? }
以上完成對單個數據表的保存,如果需要將多個數據表保存到數據庫,就需要運用事務,將以上方法重載一次
??????? public void DataSetUpdate(DataSet ds, SqlConnection sqlconnect, string tablename, string sqlstr,SqlTransaction sqltrans)
??????? {
??????????? try
??????????? {
??????????????? SqlDataAdapter adapter = new SqlDataAdapter(sqlstr, sqlconnect);
??????????????? SqlCommandBuilder cmdBuilder = new SqlCommandBuilder(adapter);
?????????????? //創建SqlDataAdapter 對像的Command對像,并將連接對像及事務對像綁定到Command對像上
??????????????? adapter.DeleteCommand = new SqlCommand("", sqlconnect, sqltrans);
??????????????? adapter.InsertCommand = new SqlCommand("", sqlconnect, sqltrans);
??????????????? adapter.UpdateCommand = new SqlCommand("", sqlconnect, sqltrans);
??????????????? adapter.SelectCommand = new SqlCommand(sqlstr, sqlconnect, sqltrans);
?????????????? //使用GetDeleteCommand將相對應的SQLCOMMAND對像傳入
??????????????? adapter.DeleteCommand = cmdBuilder.GetDeleteCommand();
??????????????? adapter.InsertCommand = cmdBuilder.GetInsertCommand();
??????????????? adapter.UpdateCommand = cmdBuilder.GetUpdateCommand();
??????????????? //cmdBuilder.RefreshSchema();
??????????????? int val = adapter.Update(ds, tablename);
??????????????? ds.Tables[tablename].AcceptChanges();
??????????? }
??????????? catch
??????????? {
??????????????? throw;
??????????? }
??????? }
通過以上方法,將SqlDataAdapter 對像的更新綁定到了事務,那么在外層調用如下
??????????? System.Data.SqlClient.SqlConnection sqlcon = new System.Data.SqlClient.SqlConnection(connectionstring);
??????????? System.Data.SqlClient.SqlTransaction sqltran;
??????????? sqlcon.Open();
??????????? //將事務綁定到連接對像
??????????? sqltran = sqlcon.BeginTransaction();
??????????? try
??????????? {
??????????????? db.DataSetUpdate(ds, sqlcon, "main", "select lx as id,mc,xgrq from ddjgfl ",sqltran);
??????????????? db.DataSetUpdate(ds, sqlcon, "ciled", "select ddbh,ksbh,ksmc,lsbm,mzbz,zybz,yjbz,czksbz,ykbz from ksdj", sqltran);
??????????????? sqltran.Commit();
??????????? }
??????????? catch(System.Data.SqlClient.SqlException sqlex)
??????????? {
??????????????? sqltran.Rollback();
??????????????? MessageBox.Show(sqlex.Message);
??????????? }
??????????? catch (Exception ex)
??????????? {
??????????????? sqltran.Rollback();
??????????????? MessageBox.Show(ex.Message);
??????????? }
??????????? finally
??????????? {
??????????? }
?
posted on 2007-01-12 17:44 LeeLin 閱讀(...) 評論(...) 編輯 收藏轉載于:https://www.cnblogs.com/lilin617/archive/2007/01/12/619120.html
總結
以上是生活随笔為你收集整理的.NET下使用DataAdapter保存数据时,如何生成command语句及使用事务的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2019年中国研究生数学建模大赛的经验分
- 下一篇: 如何测试自己适合什么大学专业