关于ADO.NET的质疑?

iview 2002-08-24 11:09:30
在ADO.NET中,DataSet似乎是被介绍得最多的一个对象,微软为其添加了无数的功能,但用过之后却发现自己越用越迷惘了。DataSet只是数据库在内存中的影响,不支持服务器端的指针,没有自身的Update方法,更新或插入数据记录要靠DataAdapter对象的三个SqlCommand属性对象的CommandText定义的SQL语句,而且还配备了一大堆诸如DataRelation等对象,似乎功能非常复杂,请原谅我的无知,我想问一下:这些东西有什么用?用DataSet对数据进行修改后还有靠SQL语句来提交,为何不用DataReader加上直接写的SQL来得爽快并且还可以提高性能。以前用ADO时喜欢用RecordSet的Update方法,是因为某些情况写这样写程序很方便,现在这些方法都没有了,ADO.NET中DataSet或DataTable都没有Update的方法。总之,面对ADO.NET提供的一大堆对象,给人的感觉是象花拳绣腿,中看不中用。
...全文
60 25 打赏 收藏 转发到动态 举报
写回复
用AI写文章
25 条回复
切换为时间正序
请发表友善的回复…
发表回复
runrunrun 2002-10-08
  • 打赏
  • 举报
回复
我还是喜欢ADO,用起来比较简单。
不是说每个系统都有成百上千个用户,也不是每个人都需要ado.net这么复杂的东东。
kfy0002 2002-10-01
  • 打赏
  • 举报
回复
我个人认为: ADO.NET很优秀.
lqy169 2002-10-01
  • 打赏
  • 举报
回复
按以上w_rose(w_rose)的說法 不用ADO.NET就沒法做 B/S 了
apengyun 2002-09-02
  • 打赏
  • 举报
回复
无论是使用DataSet 还是自己编写命令,都可以迅速地短时间地锁住数据库,然后马上释放。网络传输速度慢和时通时断,很可能造成一个事务阻止了其它所有事务,占用过多服务器资源的问题都是存在的。
to 5drush(五农民出狗狗):
使用where语句来控制。如果不一致,通常有两种选择:放弃修改,或者强行提交修改。
5drush 2002-09-02
  • 打赏
  • 举报
回复
这两种办法都有可能造成数据流失,有没有一个两全其美的办法?
yangzhenhai 2002-08-30
  • 打赏
  • 举报
回复
w_rose(w_rose) 你有这样的一套新的对象吗?能不能发给我学习一下?
yzhai@163.net
5drush 2002-08-30
  • 打赏
  • 举报
回复
请教一个问题:
当修改资料提交时首先比较数据库与本地备份是否一致(是否没有被别人修改),一旦一致才提交。只有在提交修改时迅速地短时间地锁住数据库,然后马上释放。
如果不一致呢?也就是说数据库被别人修改了怎么办?
当数据库更新了之后,如何通知客户端自动去更新本地备份呢?如果不更新,我怎么知道这些数据是否已经过时了?
5drush 2002-08-30
  • 打赏
  • 举报
回复
同意 w_rose(w_rose)!!!
killerwc 2002-08-29
  • 打赏
  • 举报
回复
大家有没有看过微软的源代码
dataset只是用来绑定datagrid,别无他用
至于数据库更新等操作
全部用command执行存储过程,这样效率很高
我想真正做开发的,没有谁再dataset里面做类似视图的操作
也没有谁直接用dataset更新数据源
所以我认为,你们争论的问题没有意义,呵呵

如果非要争论,我倒是觉得 w_rose(w_rose) 的观点值得肯定
我想微软推出dataset这个非连接的东西就是为了让每个用户
占用数据库的时间缩短到最短,
再也不会再也面上弹出“数据库忙,请稍后再试.....”
Tongls 2002-08-29
  • 打赏
  • 举报
回复
请问一下w_Rose :
你说:"ADO.net不在锁住任何数据库资源,因此它必须在客户机备份整个数据,当修改资料提交时首先比较数据库与本地备份是否一致(是否没有被别人修改),一旦一致才提交。只有在提交修改时迅速地短时间地锁住数据库,然后马上释放。但是,前提条件是必须有本地数据库作为后台数据库的备份。"

如果本地备份与数据库不一致怎么办呢? 如何更新数据库呢?
w_rose 2002-08-29
  • 打赏
  • 举报
回复
是网络传输速度慢和时通时断(因此需要不断地重新拨号)的问题造成很可能一个事务阻止了其它所有事务,占用过多服务器资源。


其实,用ADO.NET写一套新的对象,重新实现ADO的简洁的接口(并且不会大大增加B/S网络上的流量),真是程序员的一大兴事!
w_rose 2002-08-29
  • 打赏
  • 举报
回复
当多用户由相安无事变成互相抢夺数据的修改权时,后提交的事务可能先完成,造成其它先开始但是有数据冲突的事务只能失败。

用以太网和令牌环网做一个对比,就知道不同事务数量之下性能的特点了(不是线性的关系)。在数量不是很多时,基于乐观加锁方法的事务更适合分布式数据库,这时候最大的性能杀手不是竞争冲突带来的程序失败,而是网络传输速度慢和时通时断(因此需要不断地重新拨号)的问题造成很可能一个事务组阻止了其它事务。

过去的DAO、RDO、ODBC等等都是采用悲观加锁方式进行事务处理的。虽然数据库服务器支持真正的分布式事务,但是程序员的客户端工具很少支持。
yangzhenhai 2002-08-29
  • 打赏
  • 举报
回复
本人初学微软的东西,现在在看ADO,我感觉ADO.net定义这么多类,意义还是比较明确的。
DataRelation不是很重要吗?可以查找主从表关系的数据。如果没有它,要么写过滤语句,要么到数据库查,(可能有其他方法,恕我初学),不是很麻烦吗?
做两层的时候,不是数据也要到内存了才操作吗?既然把DataSet看作是数据集合,而不仅仅是数据库数据的集合,那么在它之上定义update方法,不是有点结构不清晰吗?(自己做自己的事,面向对象不是这样说的吗?)现在DataSet通过状态变化可以替人生成SQL语句,其实把PB的数据窗口的功能做了大半了,很好!
我还是相信微软有高人坐阵的。

另外大家不要吵了,就事论事好吗?
apengyun 2002-08-29
  • 打赏
  • 举报
回复
DataSet 的设计目的很明确:为了实现独立于任何数据源的数据访问。因此,它可以用于多种不同的数据源,用于 XML 数据,或用于管理应用程序本地的数据。
选择 DataReader 或 DataSet
当确定应用程序应使用 DataReader(请参阅使用 DataReader 检索数据)还是应使用 DataSet(请参阅创建和使用 DataSet)时,应考虑应用程序所需的功能类型。DataSet 用于执行以下功能:

在层间或从 XML Web services 对数据进行远程处理。
与数据进行动态交互,例如绑定到 Windows 窗体控件或组合并关联来自多个源的数据。
在应用程序本地缓存数据。
提供关系数据的分层 XML 视图并使用 XSL 转换或 XML 路径语言 (XPath) 查询等工具来处理数据。有关更多信息,请参阅 XML 和 DataSet。
对数据执行大量的处理,而不需要与数据源保持打开的连接,从而将该连接释放给其他客户端使用。
如果不需要 DataSet 所提供的功能,则可以使用 DataReader 以只进只读方式返回数据,从而提高应用程序的性能。虽然 DataAdapter 使用 DataReader 来填充 DataSet 的内容(请参阅从 DataAdapter 填充 DataSet),但可以使用 DataReader 来提高性能,因为您将节省 DataSet 所使用的内存,并省去创建 DataSet 并填充其内容所需进行的处理。
摘自微软的QuickStart.
微软提供DataSet的目的就是提供一个一致性编程的目标。DataSet是使用DataReader来填充的。
对于表的锁定,使用command一样可以避免死锁。
w_rose(w_rose) 你的理论站的住脚吗?
比如一个零售点开始卖一个东西,于是它锁住了这个东西的库存数据,但是它迟迟不提交,于是全世界这个东西的代理销售点都不能卖这个东西了。
有这么蠢的数据库吗?


w_rose 2002-08-28
  • 打赏
  • 举报
回复
你都是这么对待你不懂的基础知识吗?

真是下流。
w_rose 2002-08-28
  • 打赏
  • 举报
回复
卑鄙无耻
a2z 2002-08-28
  • 打赏
  • 举报
回复
你完全可以不用dataset
如果dataset能给你带来好处你就用,否则就不要用
就是这样
apengyun 2002-08-28
  • 打赏
  • 举报
回复
我一百个怀疑你:w_rose(w_rose);你说的是真的马?
我现在很怀疑CSDN中某些高谈阔论者的水平。
dotAge 2002-08-26
  • 打赏
  • 举报
回复
做ASP.NET(web form)时我基本上只用dataSet的fill方法生成dataTable用于绑定web服务器控件的dataSource.

但做C/S的项目(windows form)时,就可能要用dataSet的update方法了
w_rose 2002-08-25
  • 打赏
  • 举报
回复
他们所期望的世界是这个样子的:全世界的计算机都可以用宽代网连起来。

这时候,假设有一个终端开始修改数据库中的一记录,但是他迟迟不Update,那么全世界的同组功能的计算机都要瘫痪了。比如一个零售点开始卖一个东西,于是它锁住了这个东西的库存数据,但是它迟迟不提交,于是全世界这个东西的代理销售点都不能卖这个东西了。如果同时它还锁住了关于这类东西的库存总计账目,那么全世界的这类东西的零售点就统统死机了。这就是你开发个人小系统和开发大型系统的区别。

ADO.net不在锁住任何数据库资源,因此它必须在客户机备份整个数据,当修改资料提交时首先比较数据库与本地备份是否一致(是否没有被别人修改),一旦一致才提交。只有在提交修改时迅速地短时间地锁住数据库,然后马上释放。但是,前提条件是必须有本地数据库作为后台数据库的备份。

既然有本地数据库,当然就衍生出一些数据库系统常见的小功能,比如在本地就可以连接几个数据库产生视图,以方便编程,等等。
加载更多回复(5)

1,979

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 其他语言讨论
社区管理员
  • 其他语言社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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