2013-03-07 26 views
5

如果我用DataAdapter.Fill(DataTable);填充DataTable,然後用如下簡單的方法更改DataTable中的某一行:DataTable.Rows[0]["Name"] = "New Name";如何輕鬆地將這些更改保存回數據庫?我以爲我可以打電話DataAdapter.Update(DataTable);,但我讀到只適用於TableAdapter(?)。更新數據庫,對DataTable進行更改...... confusion

+0

這是ADO.net?感謝的人, – Rafa 2013-03-07 13:58:21

回答

22

這是在任何情況下,實際有用的答案其他人需要知道如何做到這一點:

string selectStatement = "SELECT * FROM Contact"; 
System.Data.DataTable dt = new System.Data.DataTable(); 
SqlConnection conn = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["MyConnectionString"].ConnectionString); 
conn.Open(); 
SqlDataAdapter sqlDa = new SqlDataAdapter(); 
sqlDa.SelectCommand = new SqlCommand(selectStatement, conn); 
SqlCommandBuilder cb = new SqlCommandBuilder(sqlDa); 
sqlDa.Fill(dt); 
dt.Rows[0]["Name"] = "Some new data here"; 
sqlDa.UpdateCommand = cb.GetUpdateCommand(); 
sqlDa.Update(dt); 
+0

,會試試這個。 – zulucoda 2013-11-12 12:39:40

+0

cb.GetUpdateCommand(); ?它返回什麼? – 2017-08-06 18:35:20

0

採取注SqlBulkCopyOptions.KeepIdentity的,你可能會或可能不希望使用此爲您的情況。

using (var bulkCopy = new SqlBulkCopy(_connection.ConnectionString, SqlBulkCopyOptions.KeepIdentity)) 
{ 
     // my DataTable column names match my SQL Column names, so I simply made this loop. However if your column names don't match, just pass in which datatable name matches the SQL column name in Column Mappings 
     foreach (DataColumn col in table.Columns) 
     { 
      bulkCopy.ColumnMappings.Add(col.ColumnName, col.ColumnName); 
     } 
     bulkCopy.BulkCopyTimeout = 600; 
     bulkCopy.DestinationTableName = destinationTableName; 
     bulkCopy.WriteToServer(table); 
}