数据集不会更新数据库

时间:2013-01-04 20:29:00

标签: c# dataset

我试图在从数据集中删除行之后更新数据库,如下所示:

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

3 个答案:

答案 0 :(得分:0)

看起来你在sqldataadapter上缺少insert / update / delete命令?

http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqldataadapter.updatecommand.aspx

答案 1 :(得分:0)

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

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

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

您不应该使用REMOVE而是DELETE,它会使行保持状态以删除它。你这样做,你删除它,所以适配器永远不会看到它。使用“.Delete”,adpater会将该行视为已删除,因此可以对其进行操作。

答案 2 :(得分:0)

我今天在工作中遇到了类似的问题,所以我想回答我所理解的问题,这样对于其他人和我自己来说这可能会有所帮助。

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