2010-11-19 17 views
6

¿Cuál es la forma más fácil de convertir un SqlDataReader en IDatareader.Cómo convertir/moldear SqlDataReader a IDatareader

O es más fácil/posible convertir una lista <> objeto a una IDataReader

+3

'SqlDataReader' ya implementa' IDataReader'. ¿Podría publicar algún código para mostrar el problema real que está teniendo? –

Respuesta

9

¿Cuál es la forma más fácil de convertir un SqlDataReader a IDataReader

Desde SqlDataReader implementa IDataReader, esto es solo un elenco implícito:

SqlDataReader typedReader = ... 
IDataReader untypedReader = typedReader; 
3

A SqlDataReaderes y IDataReader (implementa la interfaz), por lo que no tiene que convertirlo en absoluto. En cualquier lugar donde su código espere un IDataReader, puede usar la implementación Sql.

// Given a method with this signature 
public void ProcessData(IDataReader reader); 

// You can do this 
SqlDataReader sqlReader = command.ExecuteReader(); 
ProcessData(sqlReader); 

En cuanto a List<T> y IDataReader: aparte de ser enumerables éstos hacen cosas muy diferentes. La diferencia más notable es que los lectores de datos ofrecen acceso a datos en columnas (principalmente porque implementa la interfaz IDataRecord), lo cual no tiene sentido para la mayoría de las listas.

Usted podría implementar un adaptador que proporciona acceso a una List<T> a través de la interfaz del lector de datos, pero sería un mal ajuste y una buena cantidad de trabajo.

1

O puede simplemente lanzarlo, pero como se ha indicado, es en gran medida innecesario a menos que esté creando o usando una interfaz genérica ya que todas las propiedades y métodos de IDbDataReader están disponibles para SqlDataReader.

((IDbDataReader)typedReader).SomeMethod(); 
+2

que no es realmente boxeo (bueno, si 'SomeMethod' devuelve una estructura que implementa' IDbReader' podría, pero eso parece poco probable) –

+0

@Marc, disculpa el error tipográfico. Necesitaba más parens – Brad

+1

parens son mejores, pero eso todavía no es boxeo ... boxeo es cuando un tipo de valor es coercionado en un contenedor de tipo de referencia ('objeto' o una interfaz que no está restringida a través de genéricos) –

3

¿Cuál es la forma más fácil de convertir un SqlDataReader a IDataReader

No se puede. Un SqlDataReader CLASE no es una interfase de IDataReader.

para la fundición (asignar a la variable) utilizan

IDataReader untypedReader = typedReader; 

PERO: esto no es una conversión. Es un elenco. No es posible realizar una conversión a una interfaz por definición, ya que las interfaces no se pueden instanciar.

Cuestiones relacionadas