C# DataAdapter.Update() 无法更新数据表中删除的数据行
用DataAdapter.Update() 方法更新删除了部分DataRow 的 DataTable 。但是数据库中的数据没有随着更新而变化。
原因:DataTable 删除 DataRow 时,使用的是DataTable.Rows.Remove(DataRow ) 或 DataTable.Rows.RemoveAt(DataRowIndex) 方法。
解决方法:使用 DataTable.Rows[rowIndex].Delete() ; 方法删除数据。
详解如下:
DataAdapter.Update() 方法主要用来:对数据库数据进行批量更新(插入、更新、删除)。
以更新数据表 DataTable 为例:
当对数据库查出的数据表 dataTable 进行相关的插入、更新、删除操作后,使用DataAdapter.Update() 更新数据之前,不能调用 DataTable.AcceptChanges()方法。因为:AcceptChanges()方法会提交自上次调用 AcceptChanges 以来对该表进行的所有更改。DataRowState 也发生更改:所有 Added 和 Modified 行都变为 Unchanged,Deleted 行则被移除。这样的话,DataAdapter.Update() 检测不到数据的变化,就不能更新数据。
DataTable.Rows.Remove(DataRow ) 和 DataTable.Rows.RemoveAt(DataRowIndex) 方法删除 DataRow 时,等同于先调用DataTable.Rows[rowIndex].Delete() , 再调用 DataTable.AcceptChanges()。
------------------------------------------------------------------------------------------------------------------------------------------------------------
sqldataadapter Update 删除datatable中的行并更新数据库
============================================================
而不是使用datatable.Rows.RemoveAt(行下标);
============================================================
如果使用的是RemoveAt方法,在调用sqldataadapter.Update(datatable);时不会从数据库中删除记录。
原因:RemoveAt是直接在DATATABLE中将ROW删除,如果用DELETE的话则只是标记ROW为删除,在调用UPDATE的时候才会真正的从DATATABLE中删除,也就是你的SQL删除语句还需要你的DATATABLE提供数据,而你用RemoveAt已经将DATATABLE中的数据彻底删除了,就没有办法为SQL删除语句提供了所以就出现这个状况,建议使用DELETE的方法
C# DataAdapter.Update() 无法更新数据表中删除的数据行的更多相关文章
- mssql sqlserver 使用sql脚本检测数据表中一列数据是否连续的方法分享
原文地址:http://www.maomao365.com/?p=7335 摘要: 数据表中,有一列是自动流水号,由于各种操作异常原因(或者插入失败),此列数据会变的不连续,下文将讲述使用sql ...
- MySQL 使用while语句向数据表中批量插入数据
1.创建一张数据表 mysql> create table test_while ( -> id int primary key) charset = utf8; Query OK, ro ...
- SQL Server从读写频繁的大表中删除大批量数据
如果我们直接用delete from语句来删除读写频繁的大表中的数据,很有可能会因为where的条件是全表扫描从而导致整个表被锁住了.如果该表是读写频繁的生产库那简直就是一场灾难,所有的线上读写请求都 ...
- iOS-查询数据库-->指定数据表中的当前数据行的总数量
很多时候,我们在查询一个表的时候,不想得到里面的记录内容,只是想简单的得到符合查询条件的记录条数. FMDB中有一个很简单的方法就可以实现,见下面的代码实例: #import "FMdata ...
- MSSQL如何在没有主键的表中删除重复数据
为了对重复数据进行实验,下面建一个设计不太好(没有主键)表并插入了一些重复数据: create database testdb use testdb ; go create table DupsNoP ...
- 清空mysql数据表中的所有数据
- 清空全部数据,不写日志,不可恢复,速度极快 truncate table_name; -- 清空全部数据,写日志,数据可恢复,速度慢 delete from 表名 详情请查看区别
- Mysql 如何删除数据表中的重复数据!
1.使用distinct查询所有不重复的记录 2.创建数据表相同结构的临时表,将第一步的数据复制进去 create temporary table if not exists student_temp ...
- MySQL查询数据表中数据记录(包括多表查询)
MySQL查询数据表中数据记录(包括多表查询) 在MySQL中创建数据库的目的是为了使用其中的数据. 使用select查询语句可以从数据库中把数据查询出来. select语句的语法格式如下: sele ...
- mysql中删除重复数据
//首先我们需要知道我们重复的都有哪些数据, //第一步:进行对数据表进行分组,group by. //第二步:进行后通过having进行限制筛选,条数大于等于2的 //第三步:进行多表删除. //案 ...
随机推荐
- HttpClient(4.5.x)正确的使用姿势
前言: httpclient(4.5.x)默认是启动连接池的, 其降低时耗(避免连接初3次握手, 以及关闭4次握手的消耗), 显著提升高并发处理能力(大量减少time_wait), 确实扮演了重要的角 ...
- numpy中的复合数组
1.复合数组的创建 # 复合数组,最重要的是定义dtype a = np.array([('ABC', [1, 2, 3])], dtype="U3, 3i4") print(a) ...
- import sys
目录 sys模块的常见函数列表 1.sys.argv 2.sys.platform 3.sys.path 4.sys.exit(n) sys模块提供了一系列有关Python运行环境的变量和函数. 回到 ...
- CSU 1588 合并果子
Description 现在有n堆果子,第i堆有ai个果子.现在要把这些果子合并成一堆,每次合并的代价是两堆果子的总果子数.求合并所有果子的最小代价. Input 第一行包含一个整数T(T<=5 ...
- django额外参数的传递和url命名
django额外参数的传递 path方法:path(route, view, kwargs=None, name=None) path方法可以传递入一个额外参数的字典参数(kwarg),字典里的值就会 ...
- 学习笔记TF013:卷积、跨度、边界填充、卷积核
卷积运算,两个输入张量(输入数据和卷积核)进行卷积,输出代表来自每个输入的信息张量.tf.nn.conv2d完成卷积运算.卷积核(kernel),权值.滤波器.卷积矩阵或模版,filter.权值训练习 ...
- JavaScript 缓存基本原理
// 这是个闭包函数,接收一个函数,可以把接收的函数转换成具有缓存能力的函数 var memoize = function(f) { // 使用一个 cache 对象来进行缓存 var cache = ...
- Math.floor(-8.5)=多少?
Math.floor() 表示向下取整,返回double类型 (floor---地板) Math.ceil() 表示向上取整,返回double类型 (ceil---天花板) Ma ...
- Python知识点整理,基础2 - 列表操作
- 【BZOJ1202】【HNOI2005】狡猾的商人
查分约束好,好写好调好AC! 原题: 刁姹接到一个任务,为税务部门调查一位商人的账本,看看账本是不是伪造的.账本上记录了n个月以来的收入情况,其中第i 个月的收入额为Ai(i=1,2,3...n-1, ...