ADO.NET 2.0 DataAdapter.Update对应的Command的问题。

hippo_du 2008-09-14 07:17:59
都知道DataAdapter.Update()是调用相应的Command来进行Insert, Modify, Delete操作。

问题来了。

比如我有一个DataGridView, 已经用Fill() Populate了。 显示了每行8个column,n行。

现在如果我改动了其中一行中的5个column。在Update()之前,DataAdapter中对应的这个Update的SQL应该怎么样自适应的建立 ??

要强调的是自适应的建立。比如改了5行,就要Set 5个值,如果改了8行,就Set 8个。好像ADO.NET有个叫SQLCommandBuilder可以自动根据DataGridView中的改动情况自动生成对应的Insert, Modify, Delete的SQL。但是最恨微软的这种做法。 有没有其他方法实现自适应建立对应的SQL??

我的想法是不是要对每行的cell都进行state检查?但是有这个功能吗?

大侠帮忙啊!!!



...全文
85 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
hippo_du 2008-09-18
  • 打赏
  • 举报
回复
顶啊!!
hippo_du 2008-09-16
  • 打赏
  • 举报
回复
现在的问题不是找不到更新的cell,每行的rowState都能区别被改动的行。。现在就是如何在runtime创建更新所需要的SQL语句。也就是在DGV里改一行的一个colume,SQL Update就只set一个值,如果改三column就set三个值。SQLCommandBuilder就干这个事。

可是手工方法实现的话,好像只能跟String玩命了,runtime找到更改的列,然后Update之前,自己用String拼SQL Command。。。

David我觉得你的方法不好,原因如下:

你找cell的思路是对的,可是照你说的ExcuteNoneQuery要放在循环里面吧。那要和数据库连多少次?不符合Dataset offline的特性。而且用ExcuteNoneQuery也是要事先设好SQLCommand才行,也没有runtime做SQL的功能。


你觉得呢?
david1981 2008-09-15
  • 打赏
  • 举报
回复
你可以考虑一下利用datagirdview的cellvaluechanged事件来记录当前哪个行进行了数据修改操作,然后将这个行的行号记录到arraylist对象中,然后利用循环遍历每个行,判断循环到的这个行是否被记录到arraylist对象中,如果是,则直接使用UPDATE语句在OleCommand对象的ExecuteNoneQuery方法来直接更新当前行,当然,这个前提是保证主键项被屏蔽修改。
hippo_du 2008-09-14
  • 打赏
  • 举报
回复
谢谢回复阿。

DataGridView就是界面好,看着就让人忍不住更改。但是任意更新起来的确不是很容易实现。

我现在的思路就像您说的,把Datagridview的edit功能disable掉,然后对用户用一些比较傻瓜和限制的界面,比如多搞几个文本框,就当作Update的参数输入。然后自己建立对应Update的SQL。然后再update吧。

我对ADO.NET还不算特内行,也不知道业界对于用户界面和数据库更新比较流行的处理方式是什么呢?

另外,听一些人说Typed Dataset比untyped Dataset好(因为对类对象locate更容易,还可以用那些自动生成函数??)。 但是我用过了之后,觉得Typed Dataset都是跟那些该死的向导联系在一起阿。有什么好的啊??和那些bound Control一样恶心(个人意见。。。)我一开始就觉得untyped dateset比较之间,可以控制的东西多好多,也对ADO.NET的理解有好处。各位都用那种呢?


问题有点多,请大侠们耐点心。谢谢了!
jcobra 2008-09-14
  • 打赏
  • 举报
回复
最简单与最低效的方法就是用CommandBuilder
另外就只能是手写SQL的update语句了

16,717

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧