日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

.NET下使用DataAdapter保存数据时,如何生成command语句及使用事务

發布時間:2023/12/20 asp.net 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 .NET下使用DataAdapter保存数据时,如何生成command语句及使用事务 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
.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语句及使用事务的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。