数据集不会更新数据库

问题描述:

我'尝试后行已被从数据集中删除,这样来更新数据库:数据集不会更新数据库

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中删除。错误在哪里?

+0

什么是TheNewDataSet? –

+0

它是通过数据集向导从vs 2012 – SystemFailure

+0

AH中的现有数据库创建的数据集,您必须是最后一个使用数据集而不是正确编程的数据集。无论如何,你可以调用错误的方法。看到我的答案。 – TomTom

好吧,首先 - 它不是数据集做更新。永远不能。它是适配器。 DataSet不会与数据库进行通信。

但是:你不删除行,你 - 杀死他们(rows.remove)。

http://msdn.microsoft.com/en-us/library/feh3ed13(v=vs.80).aspx

你不应该使用REMOVE但删除了,这使该行与状态来删除它。你这样做,你删除它,所以适配器永远不会看到它。使用“。删除”,adpater将该行视为已删除,因此它可以对其执行操作。

+0

我的猜测 - 改变'ds.Tables [“NameDB”] .Rows.Remove(drr);'到'ds.Tables [“NameDB”] .Rows.Delete(drr);'。 –

+0

现在,如果适配器配置正确,它将发出删除命令。 – TomTom

+0

没有这样的方法。通过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

+0

其实他错过了行。 – TomTom

+0

AH,谁做了+1 - 在投票前学习。 “.Remove”从表中删除该行,所以适配器从不会看到它。正确的解决方案是调用“删除”而不是“删除”。看起来这个人在回答 - 一个人在投票 - 从来没有使用他们评论的内容。对不起,-1。 – TomTom

+0

太好了。群体智能 - 事实上错误的答案被标记为答案。 – TomTom

我今天在工作时遇到了类似的问题,所以我想回答我的理解,这样对未来他人和我自己都有一些帮助。

从我今天所理解的内容来看,.Remove将从网格中获取可视化的行,但不会将它们标记为要执行AcceptChanges以将更改保存到数据库时要删除的行。正如TomTom提到的那样,您应该使用.Delete来替代,这会将这些行标记为需要在持续时删除的行。如果您调试程序并在可视化工具(?)中查看数据集,则可以看到差异。如果我是正确的,.Delete会将行标记为感叹号,并且。删除,我想只是删除。