DataAdapter.update更新无任何反应的原因

public bool UpdateTable(DataTable srcTable, string tableName)
        {
            bool isok = false;
            try
            {

                foreach (DataRow myRow in srcTable.Rows)
                {
                    foreach (DataColumn myColumn in srcTable.Columns)
                    {
                        Console.Write(myRow[myColumn] + "|" + myRow[myColumn].GetType() + "|");
                    }
                    Console.WriteLine();
                }

                command.CommandText = "SELECT * FROM " + tableName;
                SQLiteDataAdapter oda = new SQLiteDataAdapter(command);
                SQLiteCommandBuilder ocb = new SQLiteCommandBuilder(oda);
                oda.SelectCommand = command;
                oda.InsertCommand = ocb.GetInsertCommand();
                oda.DeleteCommand = ocb.GetDeleteCommand();
                oda.UpdateCommand = ocb.GetUpdateCommand();
                oda.Update(srcTable);
                isok = true;
            }
            catch (Exception ex)
            {}
            return isok;
        }

上面的这段代码用一个datagridview读取数据然后修改,然后更新,能够成功。

但是自定义一个datatable,然后想用它来将datatable中的数据写入一个表,就会出问题。

这两天同样在处理这个问题,搞了半天,最终发现了,第二种情况不能更新的原因:
oda.Update(srcTable);   问题就在这个方法中
ado.net中的DataAdapter 的Update(datatable)方法都是一种处理流程,获取datatable中的变化记录(增删改)然后分别对增、删、改的每一条记录进行插入、删除、修改。
当datatable不是从数据源表获取而来,而是自定义的(从其他数据源获取,或者干脆手动建的,从空的datagridview修改后得到的),就没有上面的相对的删除和修改的概念了(也许有吧,但是这个增加、删除、修改中有些是不被update接受的)。

update设计的时候就是从最优的角度出发的,只更新发生变化的部分。对自定义的datatable,update把它当作你要写入的数据源中读出的数据表来处理,使用的时候就会出 无更新,只更新插入的,更新失败等 问题。

时间: 2024-11-05 14:56:14

DataAdapter.update更新无任何反应的原因的相关文章

C# DataAdapter.Update() 无法更新数据表中删除的数据行

用DataAdapter.Update() 方法更新删除了部分DataRow 的 DataTable .但是数据库中的数据没有随着更新而变化. 原因:DataTable 删除 DataRow 时,使用的是DataTable.Rows.Remove(DataRow ) 或 DataTable.Rows.RemoveAt(DataRowIndex) 方法. 解决方法:使用 DataTable.Rows[rowIndex].Delete() ; 方法删除数据. 详解如下: DataAdapter.Up

apt-get update 更新 ubuntu时出现Hash sum mismatch的原因及解决方法

$ sudo apt-get update ...... Hit http://mirrors.163.com trusty/main Sources                                 Hit http://mirrors.163.com trusty/restricted Sources                           Get:17 http://mirrors.163.com trusty/universe Sources [6,399 kB

Win7 windows update更新失败 正在还原 无法开机 双系统下的解决方案

系统环境:win7 + Ubuntu 12.04 双系统 解决时间:2014年12月1日 前提: 反复强行关机后开机仍显示“windows update更新失败 正在还原” 开机高级选项菜单选择“安全模式”,安全模式也显示“windows update更新失败 正在还原” 开机高级选项菜单选择“最近一次的正确配置”,之后还是显示“windows update更新失败 正在还原” 手头无安装盘,又嫌U盘做启动盘太麻烦 1.开机,进入ubuntu系统(linux的文件系统是可以识别windows系统

Elasticsearch的Update更新

更新 Update更新操作允许ES获得某个指定的文档,可以通过脚本等操作对该文档进行更新.可以把它看成是先删除再索引的原子操作,只是省略了返回的过程,这样即节省了来回传输的网络流量,也避免了中间时间造成的文档修改冲突. 下面就是更新的例子: curl -XPUT localhost:9200/test/type1/1 -d '{ "counter" : 1, "tags" : ["red"] }' 脚本更新 Es支持通过脚本更改文档的信息: cu

有则更新无则插入(mySql,oracle)

有则更新无则插入(mySql,oracle) 2018-02-01 1 Orcale create table table1(id varchar2(100) primary key,name varchar2(1000),address varchar2(1000)); -- 执行两次,会报 [Err] ORA-00001: unique constraint (PBOC.SYS_C0014610) violated insert into table1(id,name,address)val

批量插入数据库数据,有则更新,无则追加

# 批量插入数据库数据,有则更新,无则追加import pymysqlimport numpy as npimport pandas as pdconn = pymysql.connect( host='127.0.0.1', port=3306, user='root', passwd='root', db='py3_userinfo', charset='utf8' )# 游标cur = conn.cursor()df = pd.DataFrame([['合肥', 12, 110],['北京

Cocoapods pod update更新第三方库后出现 file not found 问题解决方法!

Cocoapods,pod update更新第三方库后第三方库已经下载到项目中,但在引用头文件时出现 file not found  问题 ! 解决方法:Cocoapods使用链接:http://www.jianshu.com/p/ff9030141411

wxpython中控件对键盘输入无响应的可能原因

问题描述: 开发环境:Win7 32bit + Python2.7.6 + WxPython 3.0.1-b20140707 开发某初级CAD软件中,需要实现点击TreeCtrl控件的相应选择,实现GLCanvas窗口中三维空间点.线和面的添加和删除功能.对于点的添加有两种途径,再绑定TreeCtrl控件的事件后,先会弹出一个Dialog要求用户输入XYZ坐标,通过Apply按钮持续添加,或者OK按钮直接在GLCanvas窗口中鼠标拾取坐标添加,键盘e执行添加点,键盘q执行退出操作. 为此在GL

update更新两个字段

update更新两个字段时的sql语句: update tj_record set is_recycle_reprint_guide='1' , recycle__guide_date=now() where id = #{record_id} 科室如果我将字段的","写成了and也不报错.但是更新不了.如图: 切记,更新多个字段时是以逗号分隔. update更新两个字段