如何从数据集中删除

本文关键字:集中 删除 数据集 数据 | 更新日期: 2023-09-27 17:55:38

如何从数据集中删除行,然后从数据库本身中删除行?是否需要为此指定 SQLCommand 或数据库是否应自动更新?这是我的代码,我认为它会起作用,但没有进行删除。

private void button1_Click(object sender, EventArgs e)
{
DataSet ds = new DataSet();
SqlDataAdapter daf = new SqlDataAdapter();
ds.Tables["Film"].Constraints.Add("PK_Film", ds.Tables["Film"].Columns["id"], true);
int ind = listBoxchildren.SelectedIndex;
listBoxchildren.DataSource = null;
ds.Tables["Film"].Rows[ind].Delete();
        ds.Tables["Film"].AcceptChanges();
daf.Update(ds,"Film");
listBoxchildren.DataSource = ds;
listBoxchildren.DisplayMember = "Director.fk_FilmDir.title";}

如何从数据集中删除

通常,当您传递 SELECT 语句来填充数据集或数据表时,dataadaper 会初始化其 DeleteCommand、UpdateCommand 和 InsertCommand。在代码中,创建此daf变量而不提供任何 Select 语句,因此它无法为已删除的行创建 Delete 命令。

此外,您调用AcceptChanges,该具有从数据集的内存数据中删除已删除行的效果,从而消除了 Update 方法查找应从数据库中删除的行的任何可能性。

您需要添加两件事并删除一行

在生成 SqlDataAdapter 时向其添加 Select 语句

SqlDataAdapter daf = new SqlDataAdapter("select * from film", yourConnection);
SqlCommandBuilder builder = new SqlCommandBuilder(daf);
daf.DeleteCommand = builder.GetDeleteCommand();

然后删除此行

ds.Tables["Film"].AcceptChanges();

调用 Delete 时,该行仅标记为已删除,但仍在数据集表中。Update 命令需要已删除的行来获取在数据库表中执行删除操作所需的信息。

就是这样:DS.表["表名"]。行[位置]。删除 ();然后您的数据适配器更新:daf.update(ds.表["表名"])