使用对DataTable所做的更改来更新数据库…混淆

如果我使用DataAdapter.Fill(DataTable);填充DataAdapter.Fill(DataTable); 然后使用以下简单的方法更改DataTable中的行: DataTable.Rows[0]["Name"] = "New Name"; 如何轻松地将这些更改保存回数据库? 我以为我可以调用DataAdapter.Update(DataTable); 但我读到只适用于TableAdapter(?)。

这是一个实际有用的答案,以防其他人需要知道如何做到这一点:

 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); 

记下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); }