数据集不会更新数据库
我'尝试后行已被从数据集中删除,这样来更新数据库:数据集不会更新数据库
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中删除。错误在哪里?
好吧,首先 - 它不是数据集做更新。永远不能。它是适配器。 DataSet不会与数据库进行通信。
但是:你不删除行,你 - 杀死他们(rows.remove)。
http://msdn.microsoft.com/en-us/library/feh3ed13(v=vs.80).aspx
你不应该使用REMOVE但删除了,这使该行与状态来删除它。你这样做,你删除它,所以适配器永远不会看到它。使用“。删除”,adpater将该行视为已删除,因此它可以对其执行操作。
我的猜测 - 改变'ds.Tables [“NameDB”] .Rows.Remove(drr);'到'ds.Tables [“NameDB”] .Rows.Delete(drr);'。 –
现在,如果适配器配置正确,它将发出删除命令。 – TomTom
没有这样的方法。通过indexOf完成。获得行id的id = ds.NameDB.Rows.IndexOf(drr);然后删除它ds.NameDB.Rows [id] .Delete(); – SystemFailure
看起来你缺少在sqldataadapter上插入/更新/删除命令?
http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqldataadapter.updatecommand.aspx
我今天在工作时遇到了类似的问题,所以我想回答我的理解,这样对未来他人和我自己都有一些帮助。
从我今天所理解的内容来看,.Remove将从网格中获取可视化的行,但不会将它们标记为要执行AcceptChanges以将更改保存到数据库时要删除的行。正如TomTom提到的那样,您应该使用.Delete来替代,这会将这些行标记为需要在持续时删除的行。如果您调试程序并在可视化工具(?)中查看数据集,则可以看到差异。如果我是正确的,.Delete会将行标记为感叹号,并且。删除,我想只是删除。
什么是TheNewDataSet? –
它是通过数据集向导从vs 2012 – SystemFailure
AH中的现有数据库创建的数据集,您必须是最后一个使用数据集而不是正确编程的数据集。无论如何,你可以调用错误的方法。看到我的答案。 – TomTom