从 DataSet 中删除一行不会影响数据库
Deleting a row from DataSet doesn't affect the database
我是 ADO.NET
的新手,我试图了解断开连接的模型,我编写了一个代码来使用 SqlDataAdapter
和 SqlCommandBuilder
进行插入更新和删除,它使用插入和更新但不使用删除,这是为什么?如何解决?。
这是我在事件处理程序中的代码,我有一个 table "client" 有 3 列 id、name、city,我的数据集称为 ds。
SqlDataAdapter ad = new SqlDataAdapter("select * from client", cnx);
foreach (DataRow client in ds.Tables["client"].Rows)
{
if (client.Field<int>(0) == 100)
{
ds.Tables["client"].Rows.Remove(client);
break;
}
}
new SqlCommandBuilder(ad);
ad.Update(ds, "client");
如果删除该行,Update 方法将无法发现删除了哪一行。您需要使用删除方法
foreach (DataRow client in ds.Tables["client"].Rows)
{
if (client.Field<int>(0) == 100)
{
client.Delete();
break;
}
}
当你调用Delete方法时,删除行的RowState 属性变为DataRowState.Deleted但它仍然存在于数据集。因此,当您调用更新时,该方法现在能够搜索 RowState 与 DataRowState.Unchanged 不同的所有行,并且对数据库执行适当的操作 table
我是 ADO.NET
的新手,我试图了解断开连接的模型,我编写了一个代码来使用 SqlDataAdapter
和 SqlCommandBuilder
进行插入更新和删除,它使用插入和更新但不使用删除,这是为什么?如何解决?。
这是我在事件处理程序中的代码,我有一个 table "client" 有 3 列 id、name、city,我的数据集称为 ds。
SqlDataAdapter ad = new SqlDataAdapter("select * from client", cnx);
foreach (DataRow client in ds.Tables["client"].Rows)
{
if (client.Field<int>(0) == 100)
{
ds.Tables["client"].Rows.Remove(client);
break;
}
}
new SqlCommandBuilder(ad);
ad.Update(ds, "client");
如果删除该行,Update 方法将无法发现删除了哪一行。您需要使用删除方法
foreach (DataRow client in ds.Tables["client"].Rows)
{
if (client.Field<int>(0) == 100)
{
client.Delete();
break;
}
}
当你调用Delete方法时,删除行的RowState 属性变为DataRowState.Deleted但它仍然存在于数据集。因此,当您调用更新时,该方法现在能够搜索 RowState 与 DataRowState.Unchanged 不同的所有行,并且对数据库执行适当的操作 table