2011-05-26 15 views
8

¿Puede alguien decirme la diferencia entre estos dos códigos? ¿Por qué usar IDataReader?C# IDataReader SqlDataReader diferencia

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

Respuesta

16

SqlDataReader implementa la interfaz IDataReader. Lo mismo ocurre con todos los demás controladores ADO.NET (Oracle, MySql, etc.). Puede usar IDataReader, de modo que si planea cambiar el motor de la base de datos algún día, no tiene que volver a escribir todas sus referencias SqlDataReader.

Lo mismo ocurre con IDbConnection, IDbCommand, etc. Por supuesto, cuando crear la conexión, necesitará especificar qué motor que está utilizando, pero aparte de que nunca tendrá que definir explícitamente qué base de datos motor que estás usando

Tenga en cuenta que IDataReader no tiene la propiedad HasRows, y usted tiene que utilizar los métodos Create...() para crear Comandos y parámetros:

IDbCommand command = myDbConnection.CreateCommand(); 

En lugar de:

SqlCommand command = new SqlCommand(myDbConnection); 

EDIT: En lugar de utilizar En las interfaces, es posible que desee utilizar la clase abstracta DbConnection heredada de todos los proveedores de ADO.NET. Proporcionan algunas características adicionales, como la obtención de información de esquema, y ​​la propiedad HasRows antes mencionada para el DbDataReader. Consulte http://social.msdn.microsoft.com/Forums/en-US/adodotnetdataproviders/thread/759fa77b-8269-4c4a-be90-3c2bdce61d92/ para saber por qué la interfaz no se ha mantenido con la clase abstracta.

+0

Gran respuesta, que me golpearon a él :) – mdm

1

Las interfaces IDataReader y IDataRecord permiten una clase que hereda de implementar una clase DataReader, que proporciona un medio de lectura de uno o más de sólo avance corrientes de conjuntos de resultados For more details see this

Cuestiones relacionadas