在數據庫中批量插入數據許多人都已經了解了,就是使用.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>
程序員的基礎教程:菜鳥程序員