数据集不会更新数据库

本文关键字:数据库 更新 数据集 | 更新日期: 2023-09-27 17:50:39

我正在尝试更新数据库后,行已从数据集删除,如下:

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();

数据库没有任何变化,行没有被删除。根据调试器正确筛选并从数据集正常删除的行。错误在哪里?

数据集不会更新数据库

好的,首先-它不是数据集在更新。从来没有。它是适配器。数据集不与数据库通信。

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

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

您不应该使用REMOVE,而应该使用DELETE,它将保留具有状态的行以删除它。你这样做的方式是移除它,所以适配器永远不会看到它。"。

看起来您缺少sqldataadapter上的插入/更新/删除命令?

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

我今天在工作中遇到了一个类似的问题,所以我想回答一下我所理解的,以便将来对别人和我自己有所帮助。

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