如何利用SqlDataAdapter進行數據更新

之前只會簡單的SqlDataAdapter進行數據更新,此次因爲項目的緣由,讓我再次接觸到SqlDataAdapter,SqlDataAdapter能夠更新任何一個數據表(DataTable dt),要進行這樣的更新,咱們首先要進行一些設置,如SqlDataAdapter的SqlCommand,包括UpdateCommand,DeleteCommand和InsertCommand,其實它們都是SqlCommand的一個實例,只是咱們在執行更新的時候,會選擇執行哪個Command。用一個例子來講明一下,首先,定義一個SqlDataAdapter 的實例sda,而後咱們定義一個SqlCommand 的實例scmd,以便綁定到sda的Command上去,定義完之後,對scmd進行一些初始化,這是最主要的地方,首先參數要寫正確了 scmd.Parameters.Add("@參數名:@parname",參數類型,參數長度,"對應的DataTable的Column"),這保證了DataTable中的數據能夠寫入數據庫中去,而後咱們定義CommandText,在這裏面,咱們能夠引用咱們已經定義好的參數@parname,例如咱們能夠寫CommandText = "update table1 set column1 = @parname"若是咱們定義的是進行更新操做的,那麼咱們就能夠寫scmd.CommandText = "update...";固然你也能夠寫刪除或者插入語句,甚至你能夠調用一個存儲過程,只不過在更新的時候即便調用了這個更新命令,也只執行你的語句,這些都作好了之後,就把scmd綁定到sda上去,插入和刪除命令也和更新命令同樣進行設置後再綁定,而後當咱們調用sda.Update(dt),這個時候,sda會根據你的dt裏面的行的狀態來調用相應的命令,它會對你表dt中行狀態標記爲Added的行執行插入操做,對標記爲Modified執行更新操做,對標記爲Deleted執行刪除操做。在此過程當中,要注意,它不是批量更新,而是逐行進行更新,也就是會對dt從第0行開始一直到最後一行,查找已經改變的行,而後執行相應的命令,固然有時候咱們可能但願先執行完刪除操做,再執行更新操做,最後執行插入操做,這時候咱們要本身控制語句的順序,也就是Update(dt.Select(...))

     System.Data.SqlClient.SqlDataAdapter sda = new System.Data.SqlClient.SqlDataAdapter();//定義一個SqlDataAdapter 的實例 數據庫

     SqlCommand scmd = new SqlCommand();//定義一個SqlCommand的實例,以便綁定
     scmd.CommandType = CommandType.Text;
     scmd.Connection = new SqlConnection(ConnectionString); spa

     scmd.Parameters.Add("@acc_title_id", SqlDbType.Int, 4, "acc_title_id");//重要的地方,將dt的列寫到參數中去
     scmd.Parameters.Add("@acc_std_title_id", SqlDbType.Int, 4, "acc_std_title_id");
     scmd.Parameters.Add("@back_id", SqlDbType.Int, 4, "back_id"); orm

   scmd.CommandText = string.Format("update t_std_acc_title_ent_acc_title set where acc_std_title_id = @acc_std_title_id and acc_id = {0} and ", eleid);
     sda.UpdateCommand = scmd;//更新語句 內存

     scmd = new SqlCommand();
     scmd.CommandType = CommandType.Text;
     scmd.Connection = new SqlConnection(ConnectionString); cmd

     scmd.Parameters.Add("@acc_title_id", SqlDbType.Int, 4, "acc_title_id");
     scmd.Parameters.Add("@acc_std_title_id", SqlDbType.Int, 4, "acc_std_title_id"); string

     scmd.CommandText = string.Format("insert into t_std_acc_title_ent_acc_title values(@acc_std_title_id,{0},@acc_title_id)",eleid); it

     sda.InsertCommand = scmd;//插入語句 io

     sda.Update(dt.Select(null, null, DataViewRowState.ModifiedCurrent));//先執行更新 table

     sda.Update(dt.Select(null, null, DataViewRowState.Added));//再執行插入 class

以上咱們就進行了一個數據庫的更新,它能夠更新你任何一個表(內存中的DataTable),哪怕你這個表是在程序中建立的,數據不是從數據庫中提取的也能夠,之前沒想好好研究,如今理解了寫出來,也供有須要的朋友參考,若是有不正確的地方,也請多指教,謝謝^_*

相關文章
相關標籤/搜索