把更改写回数据库DataAdapter.Update /**//*把更改写回数据库DataAdapter.Update*/ /**//*Important: 这种在DataTable中进行的插入、更新和删除并不会自动写回数据库 */ SqlDataAdapter adapter = new SqlDataAdapter(strSql, strConn); SqlCommandBuilder builder = new SqlCommandBuilder(adapter); DataSet ds = new DataSet(); adapter.Fill(ds, "Titles"); //插入记录 DataTable table = ds.Tables["Titles"]; DataRow row = table.NewRow(); row["Title_id"] = "JP1001"; row["title"] = "programming Microsoft .NET"; row["price"] = 59.99m; row["ytd_sales"] = 100000; row["type"] = "business"; row["pubdate"] = new DateTime(2002, 5, 1); table.Rows.Add(row); //更新数据库 adapter.Update(table); /**//*DataAdapter的Update方法检查传递给表的每一条记录,把自从上次更新 * (或自从上次调用table的AcceptChanges方法后)被插入、更新或删除的行 * 写回数据库。如果DataSet中包含了多个被修改的DataTable,就把整个DataSet * 传给Update方法: adapter.Update(ds),所有改变会被一次性写回。 */ /**//* * 哦,还有许多演示DataAdapter.Update的用法的示例,演示了通过调用名为GetChanges * 的方法创建一个只含有被插入、更新或删除行的新的临时DataSet或者DataTable * ,然后把delta传递给DataAdapter.Update,如下: * //更新数据库 * DataTable delta = table.GetChanges(); * adapter.Update(delta); * 这种方法的确好用,但不是必需的。Update会忽略包含已修改和未修改的行的DataTable中 * 未被修改的行。 * 当要控制写回数据库中的更改的内容的顺序时,GetChanges方法发挥作用, * 如果想在Insert前面执行Delete,以避免主键重复错误,应该这样做: */ //DataRowState ---->enum System.Data.DataRowState //DataRowState.Deleted---->the row was deleted // using the row.Delete() DataTable deletes = table.GetChanges(DataRowState.Deleted); adapter.Update(deletes); DataTable inserts = table.GetChanges(DataRowState.Added); adapter.Update(inserts); /**//*GetChanges的另一个用处是, * 当更新不是在本地执行时,把机器间的数据传输量减到最小, * 只传递被改变的DataSet或DataTable比传递整个DataSet或DataTable更高效 */ 转载于:https://www.cnblogs.com/simhare/archive/2007/07/21/826466.html