SqlDataAdapter 批量更新數據庫表


在數據庫中批量插入數據許多人都已經了解了,就是使用.net 中的SqlBulkCopy對象(MSDN詳解)。我們在做評教系統的時候使用過這個對象,它能將數據表批量導入到數據庫中,效率比單條插入數據效率高很多,具體的我就不多說了,看MSDN就可以了。 

但是最近我在做一個項目的時候,遇到了一個問題,就是批量修改數據表,SqlBulkCopy對象是不能實現這個需求的。於是,我就求助了度娘,搜到了這篇文章SqlDataAdapter Update

 具體的實現方式就是使用了.net中的SqlDataAdapter(MSDN解釋)對象,想必許多人對這個對象已經很熟悉了,我以前只是把它當作簡單的操作數據庫的對象來使用,現在才發現它還可以把數據批量更新到數據庫中。

 

總的來說,批量更新數據需要的對象主要有三個有:

SqlDataAdapter核心對象

 SqlCommand 總共需要四個,分別對應數據表的select、add、update、delete操作。具體解釋一下。對一張數據表,可能執行四種操作,就是增加、刪除、修改、查詢,當SqlDataAdapter最后提交操作時,會根據數據表中的每一條記錄的標志(增加、刪除、修改、查詢)來使用對應的SqlCommand對它(一條記錄)進行操作,所以需要四個。

 DataSet或DataTable等存儲待更新到數據庫中的數據。

 這樣,我們為了實現數據表的批量更新,可以先把數據表查詢到DataSet或DataTable中,然后對其進行各種修改,最后寫回到數據庫中。

 需要注意的是,數據庫中的待更新的表及DataSet或DataTable中的表必須要有主鍵。

 1 <span style="font-size:18px;">System.Data.SqlClient.SqlDataAdapter sda = new System.Data.SqlClient.SqlDataAdapter();//定義一個SqlDataAdapter 的實例
 2 
 3      SqlCommand scmd = new SqlCommand();//定義一個SqlCommand的實例,以便綁定
 4      scmd.CommandType = CommandType.Text;
 5      scmd.Connection = new SqlConnection(ConnectionString);
 6 
 7      scmd.Parameters.Add("@acc_title_id", SqlDbType.Int, 4, "acc_title_id");//重要的地方,將dt的列寫到參數中去
 8      scmd.Parameters.Add("@acc_std_title_id", SqlDbType.Int, 4, "acc_std_title_id");
 9      scmd.Parameters.Add("@back_id", SqlDbType.Int, 4, "back_id");
10 
11    scmd.CommandText = string.Format("update t_std_acc_title_ent_acc_title set acc_title_id=@acc_title_id where acc_std_title_id = @acc_std_title_id and acc_id = {0} and acc_title_id=@back_id", eleid);//更新操作對應的sql語句
12      sda.UpdateCommand = scmd;//設置SqlDataAdapter執行Update操作時使用的對象
13 //還需要設置另外那三個SqlCommand對象,方法類似,這里就不贅述了。
14  
15     sda.Update(dt);//將dataTable中的數據更新到數據庫,dt中的數據可以來自數據庫,或者其他地方。
16 </span>

 程序員的基礎教程:菜鳥程序員


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM