繁体   English   中英

数据集不会更新数据库

[英]dataset wont update database

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

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

好像您在sqldataadapter上缺少插入/更新/删除命令?

http://msdn.microsoft.com/zh-CN/library/system.data.sqlclient.sqldataadapter.updatecommand.aspx

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

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

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

您不应该使用REMOVE而是DELETE,它可以使行保持删除状态。 通过这种方式,您将其删除,因此适配器永远不会看到它。 使用“ .Delete”,调整器会将行视为已删除,因此可以对其执行操作。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM