C# Datatable中已删除的行未更新到SQL Server
我对C#有点陌生,我通常使用VB.net和SQL命令进行编码我的datatable中有一个小问题:当我添加新行或编辑行并保存更改时,一切正常,但当我删除行时,它不会记录在服务器上,该行显示我保存更改的代码,如下所示:C# Datatable中已删除的行未更新到SQL Server,c#,sql-server,C#,Sql Server,我对C#有点陌生,我通常使用VB.net和SQL命令进行编码我的datatable中有一个小问题:当我添加新行或编辑行并保存更改时,一切正常,但当我删除行时,它不会记录在服务器上,该行显示我保存更改的代码,如下所示: using (SqlConnection con = new SqlConnection(ConString)) { CmdString = "SELECT * FROM IncomingPapers"; SqlCommand cmd = new SqlComma
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();
该行将从数据表中删除,但在保存更改时,这些更改不会保存到服务器,并且所有已删除的行将恢复到正常状态。AcceptChanges不会更新数据库表。它将DataTable中每一行的DataRowState更改为Unchanged,并从内存中丢弃对DataTable所做的每一次更改 如果要使用SqlDataAdapter更新行,则不应使用RemoveAt和AcceptChanges,而应调用行上的Delete和适配器更新方法
dt.Rows[PapersLV.SelectedIndex].Delete();
sda.Update(dt);
当然,这意味着您需要在执行删除操作时提供对SqlDataAdapter的引用
当前代码使用RemoveAt,但这会从DataTable(内存中的对象)中删除该行,并且不会为适配器在数据库中查找记录留下任何信息。相反,Delete方法不会删除该行,而是将DataRowState更改为Deleted。现在,适配器使用已删除行中的主键值在数据库中查找要删除的记录。DataTable.AcceptChanges不会更新数据库表。它将DataTable中每一行的DataRowState更改为Unchanged,并从内存中丢弃对DataTable所做的每一次更改 如果要使用SqlDataAdapter更新行,则不应使用RemoveAt和AcceptChanges,而应调用行上的Delete和适配器更新方法
dt.Rows[PapersLV.SelectedIndex].Delete();
sda.Update(dt);
当然,这意味着您需要在执行删除操作时提供对SqlDataAdapter的引用
当前代码使用RemoveAt,但这会从DataTable(内存中的对象)中删除该行,并且不会为适配器在数据库中查找记录留下任何信息。相反,Delete方法不会删除该行,而是将DataRowState更改为Deleted。现在,适配器使用已删除行中的主键值在数据库中查找要删除的记录。您必须调用
da.Update(dt)
beforedt.AcceptChanges()代码>您必须调用da.Update(dt)
beforedt.AcceptChanges()代码>AcceptChanges使您的内存修改无法被更新检测删除行与删除行不同(与VB中相同)@Steve yea我最近做了这件事,但没有它。同样的,删除的行不会被更新查看这个例子的代码@WelcomeOverflow我以前使用SQL命令删除/更新和插入新行,因为我切换到C#我知道你可以使用生成器为你生成SQL命令,而不是自己编写,我应该自己写吗?AcceptChanges使您的内存修改无法被更新检测到移动行与删除行不同(与VB中相同)@Steve yea我最近做了,但没有它。同样的,删除的行不会被更新查看这个例子的代码@WelcomeOverflow我以前使用SQL命令删除/更新和插入新行,因为我切换到C#我知道你可以使用生成器为你生成SQL命令,而不是自己编写,我应该自己写吗?DataTable类中没有更新方法DataTable类中没有更新方法很好的解释这对我有用。现在一切都很好很好的解释这对我来说很有效。现在一切都很好