CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  .NET技术 >  C#

高难!DataSet更新视图问题:有没有办法不用指定 Insert、Update、Delete命令?

楼主sarcophile(食肉动物)2005-06-30 22:33:26 在 .NET技术 / C# 提问

DataSet更新视图时出现异常,说“对于多个基表不支持动态   SQL   生成。”就是说StringBuilder没能正常生成SQL语句了?  
   
  但是在企业管理器中可以直接修改同一视图中某一单元格的名字,不用给出什么InsertCommand、UpdateCommand、DeleteCommand之类的。这是怎么实现的呢?  
   
   
  问题点数:100、回复次数:11Top

1 楼chenlixin007(Aeolus)回复于 2005-06-30 22:45:13 得分 20

说实在的,DataSet非常不灵活,我一般直接操作数据库Top

2 楼saucer(思归)回复于 2005-06-30 22:51:13 得分 0

企业管理器不是用ADO.NET机制的,在ADO.NET里,你需要自己写这些命令,或者,确认你的表有个主键,并且这个主键也在SELECT语句里,然后用个CommandBuilder  
   
  SqlCommandBuilder   cb   =   new   SqlCommandBuilder(YourDataAdapter);  
   
  YourDataAdapter.Update(...);  
   
  Top

3 楼Airblack(C#疯子)回复于 2005-06-30 23:00:45 得分 0

saucer,好久不见了,你小子还好吧?是不是觉得编程很没意思呢?很无聊的日子每天都在继续。似乎到处都是高深的学问,殊不知这些都是些工具,真正精髓的只有你写的算法。bs那些天天谈什么web   service,xml的垃圾。学会c语言开发都够了。Top

4 楼sarcophile(食肉动物)回复于 2005-06-30 23:08:36 得分 0

思归大侠到场,蓬荜生辉。不过问题是:   我用的是视图,能否建立主键?如果不能,有没有别的办法?一定要指定InsertCommand、UpdateCommand、DeleteCommand之类的吗?Top

5 楼sarcophile(食肉动物)回复于 2005-06-30 23:15:42 得分 0

忘了说,原先   表   中是有主键的,但做成视图后因为交叉组合,主键那一列的值已经不唯一了,这样Fill时就用   MissingSchema   =   Add,   而不是用   AddWithKey,否则fill会失败。  
   
  那么能不能在视图中新建一列作为主键呢?Top

6 楼saucer(思归)回复于 2005-06-30 23:36:23 得分 40

I   don't   think   ado.net   supports   updatable   view,   time   to   write   your   own   insert/update/delete,   with   stored   procedures,   probably,   see  
   
  also   see  
  http://www.theserverside.net/articles/showarticle.tss?id=OptimizingADONETTop

7 楼guishuanglin(蓝色枫林)回复于 2005-06-30 23:49:19 得分 10

楼主你算走运,我刚搞定这方面东东,可能是你没有解ADO.ent吧  
  DataView对象,生成SQL语句是是DataAdapterp这个对象,不是DataSet,  
  生成SQL条件:1必须提供Select语句  
                          2,要生成其它SQl语句,select语句必须是同一个表,而且必须是要有主键在内  
  DataView创键条件:  
                          1,.net里的DataView不如数据库的视图,不可以是我个查询语,也就是说只能是从单个  
  查询语句中得到的数据,  
                          2,在数据库里可以主键外键表等多个表生成一个视图,而DataView只能是一个表,  
  这个表可以是DataSet中的任何表,或者手工建的表也行,但就是不能把多个表合成你想要的“视图”  
  记住:只能是一个表做DataView的数据源.  
  =====  
  你要明白DataView是用来查询,DataTbale的,是用来排序,是用来过滤,是用来查找(可以是任意唯的列,但要先指定,如果是查找表,那只能是主键),是用来把表里的数据的一小部分显示出来等等用的。不完全等同于数据库里的视图!!Top

8 楼guishuanglin(蓝色枫林)回复于 2005-06-30 23:58:54 得分 0

把数据库的视图当做DataView数据源是可以的,国为视图对于DataView来说只是一个表,  
  你想把数据库的相关表都读到DataSet中,然后做成你要的”视图“,把ID换成名称那种,呵呵,  
  这个是不行的,只能是在数据库里,  
  不过,如果你把数据都取出来,通过手工可以建成你想要我视图,但这样太不好搞。  
  一个小经验:  
  如果想取得外键表中的名称,只要你把主,外键表数据都取出来的,放在DataSet里,  
  可以把外键表建个DataView,然后做一个,通过外键ID找显示名称的过程,  
  用ID到外键表对应的DatqaView查找,就可以取到对应的名称,然后显示,  
  Top

9 楼guishuanglin(蓝色枫林)回复于 2005-07-01 00:02:42 得分 0

提示:  
  因为外键不是主健,所有必须要在视图中查找,  
  先设定DataView.sort   =   "排序列",  
  排序列要是唯一的,如果找到多行,等于没找到,不返回任何行索引。Top

10 楼zeusvenus()回复于 2005-07-01 00:25:45 得分 30

ADO.NET1.1一下版本不能直接做到你需要的东西;  
  还是得去数据库写脚本。Top

11 楼sarcophile(食肉动物)回复于 2005-07-01 08:19:17 得分 0

guishuanglin(小桂子):   非常感谢你的耐心解答,不过很可惜,你没看明白我的问题。你解答的内容我基本都知道的。我问的是数据库中的视图,不是System.Data.DataView。  
   
    chenlixin007(Aeolus):这东西虽然麻烦事一大堆,但还是比直接操作数据库方便些。我用的是自己做的ORM,设计ORM时大部分考虑的是直接操作数据库,但实际使用时恰恰相反,大部分用的是DataSetTop

相关问题

  • 请教一个高难度的统计视图!!
  • 高难!高难!!!
  • 将视图填充到DataSet的问题,能否在视图定义中去掉主键约束?
  • 视图
  • 视图
  • 视图
  • 高难
  • 用SqlDataAdapter的Fill方法可否将视图绑定到DataSet上去。
  • 请教:怎样把数据库中创建的视图读到datareader或dataset中?
  • 如果已经用设计视图创建好dataset后如何利用dataset来向数据库添加记录??

关键词

  • .net
  • ado.net
  • 视图
  • 数据库
  • 语句
  • 数据
  • ado
  • sql
  • 键
  • 表

得分解答快速导航

  • 帖主:sarcophile
  • chenlixin007
  • saucer
  • guishuanglin
  • zeusvenus

相关链接

  • CSDN .NET频道
  • .NET类图书
  • C#类图书
  • .NET类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo