¿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
¿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
¿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;
A SqlDataReader
es 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.
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();
que no es realmente boxeo (bueno, si 'SomeMethod' devuelve una estructura que implementa' IDbReader' podría, pero eso parece poco probable) –
@Marc, disculpa el error tipográfico. Necesitaba más parens – Brad
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) –
¿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.
'SqlDataReader' ya implementa' IDataReader'. ¿Podría publicar algún código para mostrar el problema real que está teniendo? –