是否有可能获得IDataReader的实例?

时间:2012-03-01 11:48:06

标签: c# ado.net

我知道IDataReader是一个接口,因此我无法创建接口实例。

但是,可以获取IdataReader

的实例

这怎么可能?

2 个答案:

答案 0 :(得分:4)

您无法创建接口的实例。但是您可以创建实现接口的类的实例。如果IDataReader SqlDataReader是一种实现方式。

您通过executing a SqlCommand获得了一个实例:

SqlDataReader reader = command.ExecuteReader();

例如(来自MSDN):

string queryString =
    "SELECT OrderID, CustomerID FROM dbo.Orders;";

using (SqlConnection connection =
           new SqlConnection(connectionString))
{
    SqlCommand command =
        new SqlCommand(queryString, connection);
    connection.Open();

    // here is your SqlDataReader that implements IDataReader
    SqlDataReader reader = command.ExecuteReader();

    // Call Read before accessing data.
    while (reader.Read())
    {
        Console.WriteLine(String.Format("{0}, {1}",
            reader[0], reader[1]));
    }

    // Call Close when done reading.
    reader.Close();
}

修改

我假设您不明白为什么可能有一个具有接口类型的实例。这并不矛盾,因为接口实际上是一种类型。

因此,如果我要创建一个实现MyDataReader的类IDataReader,那么我的类的实例将是MyDataReader类型以及IDataReader

如果有人创建MyDataReader的实例,他知道它也实现了IDataReader的所有方法。这对Polymorphism非常重要。

答案 1 :(得分:0)

我不知道你想要的意思。

you mean a concrete instance of a DataReader-derived class,
 such as SqlDataReader

IDataReader在查询上下文之外没有任何意义,

所以通过ExecuteReader函数通过查询实例化它是很自然的。 您可能想问自己一个问题:为什么我要实例化IDataReader?如果可以 - 我将如何初始化它?