如何从数据集中删除

时间:2014-03-30 20:34:17

标签: c# sql

如何从数据集中删除行,然后从数据库本身删除?是否需要为此指定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";}

2 个答案:

答案 0 :(得分:1)

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

此外,调用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();

当您调用“删除”时,该行仅标记为已删除但仍在数据集表中。 Update命令需要删除的行,以获取在数据库表中执行删除所需的信息。

答案 1 :(得分:0)

就是这样: ds.Tables [" TABLE NAME"]。行[position] .Delete(); 然后你的dataadapter更新: daf.update(ds.Tables [" TABLE NAME"])