c# - 从 DataSet 中删除一行不会影响数据库
问题描述
我是新手,ADO.NET
我正在尝试理解断开连接的模型,我编写了一个代码来使用SqlDataAdapter
and进行插入更新和删除SqlCommandBuilder
,它适用于插入和更新,但不适用于删除,为什么会这样?,以及如何修复它?.
这是我在事件处理程序中的代码,我有一个表“客户端”,它有 3 列 id、name、city 和我的 DataSet Called 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 方法将无法发现已删除的行。您需要使用 Delete 方法
foreach (DataRow client in ds.Tables["client"].Rows)
{
if (client.Field<int>(0) == 100)
{
client.Delete();
break;
}
}
当您调用 Delete 方法时,已删除行的RowState属性更改为DataRowState.Deleted,但它仍存在于 DataSet 中。因此,当您调用 Update 时,该方法现在能够搜索具有不同于DataRowState.Unchanged的 RowState的所有行,并对数据库表执行适当的操作
推荐阅读
- xamarin.forms - Xamarin.Forms 中的 Html 到 PDF 转换
- android - Android Studio 正在 Android 设备上添加缓存版本
- python - 如何在 python 中的类中正确操作值?
- koa - 为什么在使用 koa-mount 时 koa-pug 会抛出“ctx.render is not a function”
- kotlin - 在 Kotlin 中使用异步操作创建 API 的惯用方式是什么?
- php - 剂量 curl_exec 是否将通常的 http 请求作为浏览器?
- javascript - Vuex 垃圾邮件错误,在 Commit 上没有明显的原因
- database - npx sequelize generate:migration --name=[name] 一直以未知参数失败:默认
- python - 如何在 python tkinter 类项目中的网格管理框架中配置行/列大小
- node.js - 命中 GET 路由时出错,但数据显示