首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >c# IDataReader SqlDataReader差异

c# IDataReader SqlDataReader差异
EN

Stack Overflow用户
提问于 2011-05-26 18:41:38
回答 2查看 7.1K关注 0票数 10

有人能告诉我这两段代码之间的区别吗?为什么使用IDataReader?

代码语言:javascript
复制
using (IDataReader reader = cmd.ExecuteReader())
{
    while (reader.Read())
    {
        // get data from the reader
    }
}

using (SqlDataReader reader = cmd.ExecuteReader())
{
    while (reader.Read())
    {
        // get data from the reader
    }
}
EN

回答 2

Stack Overflow用户

发布于 2011-05-26 18:44:20

SqlDataReader实现了接口IDataReader。所有其他ADO.NET驱动程序(Oracle、MySql等)也是如此。您可以使用IDataReader,这样,如果您计划在某一天更改数据库引擎,则不必重写所有SqlDataReader引用。

当然,在创建连接时,您需要指定您正在使用的引擎,但除此之外,您将永远不需要显式地定义您正在使用的数据库引擎。

注意,IDataReader没有HasRows属性,您必须使用Create...()方法来创建命令和参数:

代码语言:javascript
复制
IDbCommand command = myDbConnection.CreateCommand();

而不是:

代码语言:javascript
复制
SqlCommand command = new SqlCommand(myDbConnection);

编辑:不使用您可能想要使用的接口,而是使用所有ADO.NET提供程序继承的抽象类DbConnection。它们提供了一些额外的特性,比如获取模式信息,以及前面提到的DbDataReaderHasRows属性。查看http://social.msdn.microsoft.com/Forums/en-US/adodotnetdataproviders/thread/759fa77b-8269-4c4a-be90-3c2bdce61d92/了解接口没有跟上抽象类的步伐的原因。

票数 18
EN

Stack Overflow用户

发布于 2011-05-26 18:49:00

IDataReader和IDataRecord接口允许继承类实现DataReader类,该类提供了一种读取结果集For more details see this的一个或多个只进流的方法

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6137245

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档