繁体   English   中英

数据表中的已删除行未更新到SQL Server

[英]Deleted Row in Datatable is not updated to SQL Server

我是C#的新手,通常使用VB.net和SQL命令进行编码,我的数据表中存在一个小问题:当我添加新行或编辑行并保存更改时,一切正常,但是当我删除了一行,它没有被记录在服务器上,并且该行说我的代码用于保存更改,如下所示:

using (SqlConnection con = new SqlConnection(ConString))
{
    CmdString = "SELECT * FROM IncomingPapers";

    SqlCommand cmd = new SqlCommand(CmdString, con);
    SqlDataAdapter sda = new SqlDataAdapter(cmd);

    SqlCommandBuilder builder = new SqlCommandBuilder(sda);
    sda.UpdateCommand = builder.GetUpdateCommand();
    sda.DeleteCommand = builder.GetDeleteCommand();
    sda.InsertCommand = builder.GetInsertCommand();

    sda.Update(dt);
}

从数据表中删除一行的代码是:

dt.Rows.RemoveAt(PapersLV.SelectedIndex);
dt.AcceptChanges();

该行已从数据表中删除,但在保存更改时不会保存到服务器,并且所有删除​​的行都将恢复为正常

DataTable.AcceptChanges不会更新数据库表。 它将DataTable中每一行的DataRowState更改为Unchanged,并从内存中丢弃您对DataTable所做的每次更改

如果要使用SqlDataAdapter更新行,则不应使用RemoveAt和AcceptChanges,而应调用Row上的Delete和Adapter Update方法。

dt.Rows[PapersLV.SelectedIndex].Delete();
sda.Update(dt);

当然,这意味着您需要在Delete操作时对可用的SqlDataAdapter进行引用。

您当前的代码使用RemoveAt,但这会从DataTable中删除该行(内存对象中的对象),并且不会为Adapter留下任何信息以在数据库中查找记录。 相反,Delete方法不会删除行,而是将DataRowState更改为Deleted。 现在,适配器使用已删除行中的主键值在数据库中查找要删除的记录。

您必须致电da.Update(dt); dt.AcceptChanges();之前dt.AcceptChanges();

暂无
暂无

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

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