当前位置:首页 > 技术心得 > 正文内容

对于不返回任何键列信息的 selectcommand 不支持 updatecommand 的动态 sql 生成

xjtudll2年前 (2022-04-05)技术心得740

https://www.cnblogs.com/xuqiang/archive/2010/03/07/1953720.html

大家知道,DataSet保存的数据是位于服务器内存里面的原数据库的“副本”。所以用DataSet更新数据的过程就是先对“副本”进行更新,然后

在将“原本”更新,按照我的理解就是把“原本”覆盖掉。具体到过程,首先是要找到需要更新的行,然后赋新值,最后更新原数据库。

要找到需要修改的行,比较方便的做法就是根据记录中的某个值进行查找,这样比用“列号”“行号”什么的方便多了。要做到这一点,首先就是要

给数据库指定一个主键,然后即可按照主键进行查找。要注意的是这个主键必须要是在程序中指定的,并且这个主键不一定和你数据库原来有的主

键一样。

然后就是最后的更新,当然是用DataAdapter的Update()方法借助CommandBuilder来实现,要注意的是,如果你的数据库一开始没有定义

主键,那进行更新的时候会出错,返回的错误将是“对于不返回任何键列信息的 SelectCommand 不支持 UpdateCommand 的动态 SQL

生成。”这是因为我们用的Update()实际上是通过CommandBuilder动态生成sql语句,然后才进行的数据库操作。

但如果你在一开始创建DataAdapter时的那个sql语句没有包含有主键的列的话,那CommandBuilder将不会发生作用。这一点是必须要牢记的。

扫描二维码推送至手机访问。

版权声明:本文由鸟的天空发布,如需转载请注明出处。

本文链接:http://www.xjtudll.cn/Exp/640/

标签: SQL
分享给朋友:

“对于不返回任何键列信息的 selectcommand 不支持 updatecommand 的动态 sql 生成” 的相关文章

c# winform 查看网络图片

引用网址:https://blog.csdn.net/weixin_30462049/article/details/99170485 /// <summary>         /// ...

SQL中没有IIf,Nz函数,用什么替代

SQL Server中没有iif函数,可以使用case when then 例如: case when 性别 = '男' then '先生' else ‘女士' end SQL中也没Nz函数,可以用isnull代替 例如 isnull(字段,0)...

金蝶 如何实现BOS单据下推下游单据后,不能将上游BOS单据反审核

金蝶 如何实现BOS单据下推下游单据后,不能将上游BOS单据反审核

【操作步骤】 1、使用系统管理员或者管理员组用户登陆K/3主控台,依次点击左上角【系统】→【K/3BOS】,使用有权限的用户登陆系统,进入【系统视图】界面,找到对应BOS单据发布的模块,双击进入单据界面; 2、进入上游自定义BOS单据的BOS 设计界面,单击菜单栏【编辑】→【操作...

C# MDI子窗体启动后没有最大化

C# MDI子窗体启动后没有最大化

目的: 子窗口启动显示后最大化,也就是填充了整个父窗体 但是发现一个问题: 如果在 Visual Studio 2005里通过属性工具栏设定了子窗体的 WindowState 为 Maximized,然后在运行过程中会发现子窗体实例化时不会最大化,而是当改变了父窗体的大小之后才随即最大化。而通过在子...

二进制操作最右侧位

   1  将最右侧的1变成0(可利用判断是不是2的幂)  下面这个公式可以将一个数x的最右侧1变成0,如果没有1,则生成的所有位都是0。 x &(x-1) 例如:0101 1000 B -----> 0101 0000 B 这个公式还可以用来检...

找回丢失的“显示桌面”图标

Windows快速启动栏里面有个“显示桌面”的图标,点击图标就能快速切换到桌面,这个用起来很方便,当然用Windows+D快捷键也能实现该功能,不过对于我这种习惯用鼠标点击的人来说,还是“显示桌面”这个用起来爽。今天,一不小心,将“显示桌面...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。