【发布时间】:2025-12-27 18:55:11
【问题描述】:
如果我使用 SQL Server >= 2005,使用 SQLDataReader 与仅实现 IDatareader 的阅读器相比有哪些优势?
SQLDatareader 是否只是有更多功能可供选择,还是使用 SQLDatareader 可以提高性能?
任何讨论此问题的文章将不胜感激。
谢谢!
克里斯
【问题讨论】:
如果我使用 SQL Server >= 2005,使用 SQLDataReader 与仅实现 IDatareader 的阅读器相比有哪些优势?
SQLDatareader 是否只是有更多功能可供选择,还是使用 SQLDatareader 可以提高性能?
任何讨论此问题的文章将不胜感激。
谢谢!
克里斯
【问题讨论】:
首先让我纠正您的误解:如果您使用的是 SQL Server,并非每个 IDataReader 都能够从您的 MS SQL Server 读取数据
在 .NET 环境中(我假设您的问题适用),有两个实现 IDataReader 的具体类可以访问 SQL Server。一个是 SQLDataReader,另一个是 OleDbDataReader。 OleDbDataReader 实际上依赖于OleDb protocol,它基本上是一个RDBMS 通信协议。
在您的代码中使用 IDataReader 将(或多或少)确保您可以替换它背后的具体数据读取器(例如,让您能够切换数据库供应商。我不认识任何成功做到这一点的人)。
对于访问 SQL Server,专用 SQLDataReader 根据 source,速度提高了 115%,因为它使用本机 sql 服务器协议(命名为管道/tcp/ip)。它还支持特殊的 SQL Server 功能,例如 MARS。
【讨论】:
.HasRows 属性是我能想到的唯一一个。 但这并不是真的必要。
【讨论】: