[英]dataset wont update database
我正在尝试从数据集中删除行后更新数据库,如下所示:
SqlCommand mySelectCommand = new SqlCommand("select * from NameDB", c);
SqlDataAdapter mySqlDataAdapter = new SqlDataAdapter(mySelectCommand);
TheNewDataSet ds = new TheNewDataSet();
mySqlDataAdapter.Fill(ds, "NameDB");
DataRow[] FilteredRow = ds.Tables["NameDB"].Select("PName like '" + listBox2.SelectedValue.ToString() + "'");
foreach (DataRow drr in FilteredRow)
{
ds.Tables["NameDB"].Rows.Remove(drr);
}
mySqlDataAdapter.Update(ds, "NameDB");
c.Close();
数据库没有任何反应,行未删除。 根据调试器,行已正确过滤并从DataSet中正常删除。 错误在哪里?
好像您在sqldataadapter上缺少插入/更新/删除命令?
http://msdn.microsoft.com/zh-CN/library/system.data.sqlclient.sqldataadapter.updatecommand.aspx
好的,首先-不是数据集在进行更新。 永远不能。 它是适配器。 数据集不与数据库对话。
但是:您不删除行,而是-杀死它们(rows.remove)。
http://msdn.microsoft.com/zh-CN/library/feh3ed13(v=vs.80).aspx
您不应该使用REMOVE而是DELETE,它可以使行保持删除状态。 通过这种方式,您将其删除,因此适配器永远不会看到它。 使用“ .Delete”,调整器会将行视为已删除,因此可以对其执行操作。
我今天在工作中遇到了类似的问题,所以我想回答我的理解,以便将来对其他人和我自己都有帮助。
根据我今天的了解,.Remove将以可视方式从网格中获取行,但是当您执行AcceptChanges将更改保存到数据库时,不会将它们标记为要删除的行。 正如TomTom所提到的,您应该改用.Delete,它将在持久化时将那些行标记为需要删除的行。 如果调试程序并在visualizer(?)中查看数据集,则可能会看到差异。 如果我是正确的话,.Delete将在行中标上感叹号,.Remove,我认为只是将其删除。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.