[英]No row was deleted/updated, error with SQL Server in C# (Winforms)
[英]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.