0

I'am trying to update database after row has been deleted from dataset like this:

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

And nothing happened to database, rows not deleted. According to debugger rows filtered correctly and deleted from DataSet normally. Where is mistake?

4

3 回答 3

0

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

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

于 2013-12-11T01:39:19.297 回答
0

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

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

于 2013-01-04T20:39:39.477 回答
0

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

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

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

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

于 2013-01-04T20:42:36.890 回答