我是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();
该行已从数据表中删除,但在保存更改时未保存到服务器,并且所有已删除的行均恢复正常
答案 0 :(得分:2)
DataTable.AcceptChanges不会更新数据库表。它将DataTable中每一行的DataRowState更改为Unchanged,并从内存中丢弃您对DataTable所做的每次更改
如果要使用SqlDataAdapter更新行,则不应使用RemoveAt和AcceptChanges,而应调用“删除行”和适配器更新方法
dt.Rows[PapersLV.SelectedIndex].Delete();
sda.Update(dt);
这当然意味着您需要在Delete操作时引用可用的SqlDataAdapter
您当前的代码使用RemoveAt,但这会从DataTable中删除该行(内存对象中),并且不会为Adapter留下任何信息以在数据库中查找记录。相反,Delete方法不会删除行,而是将DataRowState更改为Deleted。现在,适配器使用已删除行中的主键值在数据库中查找要删除的记录。
答案 1 :(得分:0)
您必须在da.Update(dt);
之前致电dt.AcceptChanges();