c# IDataReader SqlDataReader difference

本文关键字:difference SqlDataReader IDataReader | 更新日期: 2023-09-27 17:57:47

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

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
    }
}

c# IDataReader SqlDataReader difference

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

IDbConnectionIDbCommand等也是如此。当然,当创建连接时,您需要指定正在使用的引擎,但除此之外,您永远不必明确定义正在使用的数据库引擎。

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

IDbCommand command = myDbConnection.CreateCommand();

代替:

SqlCommand command = new SqlCommand(myDbConnection);

EDIT:您可能希望使用抽象类DbConnection all-ADO。NET提供程序继承自。它们提供了一些附加功能,例如获取模式信息,以及前面提到的DbDataReaderHasRows属性。看见http://social.msdn.microsoft.com/Forums/en-US/adodotnetdataproviders/thread/759fa77b-8269-4c4a-be90-3c2bdce61d92/为什么接口没有跟上抽象类的步伐。

IDataReader和IDataRecord接口允许继承类实现DataReader类,该类提供了读取一个或多个结果集的仅向前流的方法。有关更多详细信息,请参阅此