2012-01-13 100 views
1

我如何能做到用數據表中多個更新?C#的DataTable更新多行

,我發現這個Update 1 row

我的代碼:

public void ExportCSV(string SQLSyntax, string LeFile, bool Is_Ordre, int TypeDonne) 
     { 
      try 
      { 
       using (var connectionWrapper = new Connexion()) 
       { 
        var connectedConnection = connectionWrapper.GetConnected(); 


        SqlDataAdapter da = new SqlDataAdapter(SQLSyntax, connectionWrapper.conn); 
        DataSet ds = new DataSet(); 
        da.Fill(ds, "Emp"); 
        DataTable dt = ds.Tables["Emp"]; 
        CreateCSVFile(dt, LeFile, Is_Ordre, TypeDonne); 

        //Update all lines, it not save in Database 
        foreach (DataRow row in dt.Rows) 
        { 
         row["IS_IMPORT"] = true; 
        } 
       } 
      } 
      catch (Exception excThrown) 
      { 
       throw new Exception(excThrown.Message); 
      } 



     } 

的問題是:

foreach (DataRow row in dt.Rows) 
         { 
          row["IS_IMPORT"] = true; 
         } 

它不保存到數據庫中。

感謝你在前進, 甜菊

+0

請注意:此方法耗費大量內存。如果您的表格有超過1000行(任意數量),則會對內存造成較大影響。你爲什麼不搬到一個SqlDataReader,可以通過讀取行​​線,然後使用一個文件流 – 2012-01-13 14:24:54

回答

3

要更新內存的值。 DataTable類不是的一個sql視圖,而是一個內存表示。 Sql數據適配器只複製數據。

你必須寫回更改DB。試試這個:

public void ExportCSV(string SQLSyntax, string LeFile, bool Is_Ordre, int TypeDonne) 
    { 
     try 
     { 
      using (var connectionWrapper = new Connexion()) 
      { 
       var connectedConnection = connectionWrapper.GetConnected(); 


       SqlDataAdapter da = new SqlDataAdapter(SQLSyntax, connectionWrapper.conn); 

       da.UpdateCommand = connectedConnection.CreateCommand(); 
       da.UpdateCommand.XXXX = YYYY; // construct the SQL Command      

       DataSet ds = new DataSet(); 
       da.Fill(ds, "Emp"); 
       DataTable dt = ds.Tables["Emp"]; 
       CreateCSVFile(dt, LeFile, Is_Ordre, TypeDonne); 

       //Update all lines, it not save in Database 
       foreach (DataRow row in dt.Rows) 
       { 
        row["IS_IMPORT"] = true; 
       } 

       da.Update(dt); 
      } 
     } 
     catch (Exception excThrown) 
     { 
      throw new Exception(excThrown.Message); 
     } 
    } 

這應該有效。

+0

感謝您的答覆追加一個字符串行到CSV文件。它運作良好。只是好奇,爲什麼我需要兩個:'da.UpdateCommand.CommandText = 「UPDATE勳章SET IS_IMPORT = '真'」;'和'的foreach(DataRow的行dt.Rows) { 行[ 「IS_IMPORT」] = TRUE; }' – user609511 2012-01-13 14:10:19

+1

你的sql查詢更新**表中的所有**數據。你必須建立一個比SqlDataAdapter Update方法可以使用的sql查詢。當你寫了'row [「IS_import」] = true;'它將行標記爲已更新。調用SqlDataAdapter.Update將獲取表的所有更新行,然後發出相應的更新命令。建議:你似乎發現這些課程,給視覺工作室設計師一個機會來爲你建立一切。 – 2012-01-13 14:19:33

+0

謝謝你的解釋... – user609511 2012-01-13 14:26:50

4

您需要首先設置UpdateCommand屬性上的DataAdapter到將要執行更新數據庫中的一行UPDATE語句。

然後,在數據表更新值之後,你需要將它傳遞給DataAdapter.Update()。 然後,它將爲DataTable中的每個更新行執行UpdateCommand。

參考文獻:

MSDN - SqlDataAdapter.Update
MSDN - SqlDataAdapter.UpdateCommand

0

您必須致電da.Update()