与实现 IDatareader 的读取器相比,使用 SQLDataReader 有何优势?
如果我使用 SQL Server >= 2005,那么与仅实现 IDatareader 的读取器相比,使用 SQLDataReader 有何优势?
SQLDatareader 是否只是有更多功能可供选择,或者使用 SQLDatareader 是否可以提高性能?
任何讨论此问题的文章将不胜感激。
谢谢!
克里斯
What are the advantages of using a SQLDataReader as opposed to a reader that just implements IDatareader if I'm using SQL Server >= 2005?
Does the SQLDatareader simply have more functionality to choose from, or are there performance improvements using the SQLDatareader?
Any articles that discuss this would be appreciated.
Thanks!
Chris
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
首先让我纠正您的误解:如果您使用的是 SQL Server,则并非每个 IDataReader 都能够从 MS SQL Server 读取数据。
在 .NET 环境(我假设您的问题适用)中,有两个具体的类实现可以访问SQL Server的IDataReader。一种是 SQLDataReader,另一种是 OleDbDataReader。 OleDbDataReader 实际上依赖于 OleDb 协议,它基本上是一个 RDBMS 通信协议。
在代码中使用 IDataReader 将(或多或少)确保您可以替换其背后的具体数据读取器(例如,使您能够切换数据库供应商。我不知道有谁成功做到了这一点)。
对于访问 SQL Server,根据此 源,因为它使用本机 sql server 协议(命名管道/tcp/ip)。它还支持特殊的 SQL Server 功能,例如 MARS。
First of all let me correct your misunderstanding: If you're using SQL Server NOT every IDataReader will be able to read data from your MS SQL Server
In the .NET environment (which I assume your question applies to) there are two concrete classes implementing IDataReader that can Access SQL Server. One is SQLDataReader and another one is OleDbDataReader. OleDbDataReader actually relies on the OleDb protocol, which is basically an RDBMS communication protocol.
Using IDataReader in your code will (more or less) make sure you can replace the concrete datareader behind it (e.g. giving you the ability to switch database vendors. Not that I know anyone who successfully did that).
For acessing SQL Server, the specialized SQLDataReader is faster by 115% according this source, because it uses the native sql server protocols (named pipes/tcp/ip). It also supports special SQL Server features such as MARS.
.HasRows 属性是我能想到的唯一一个。
但这并不是真的必要。
.HasRows property is the only one I can think of.
It's not really necessary though.