read executereader example ejemplos data .net ado.net datatable idatareader

.net - executereader - sqldatareader c# ejemplos



¿Cómo convierto una DataTable a IDatareader? (4)

No existe una clase que haga esto por usted. Pero no debería ser difícil para usted escribir una clase serializable que implemente IDataReader y sea un envoltorio alrededor de su DataTable existente.

EDIT: es posible que le resulte más fácil heredar de DbDataReader (creo que, consulte la clase base de SqlDataReader en el explorador de objetos). Proporciona parte de la implementación de interfaz para usted. Pero sí, sigue siendo un código bastante aburrido.

Todos sabemos que los DataReaders son más rápidos que DataTables ya que se utiliza un DataReader en la construcción de un DataTable.

Por lo tanto, dado que ya tengo un DataTable ... ¿Por qué querría convertirlo a un DataReader?

Bueno, estoy creando una interfaz interna llamada IDataProvider. Esta interfaz está diseñada para ser implementada localmente y como un servicio web. La interfaz tendrá un método "Getdata" que toma algunos criterios de información y devuelve algunos datos.

Como un DataReader es el mecanismo de recuperación de datos más rápido, querré utilizarlo como el tipo de resultado del método "GetData". Sin embargo, también sabemos que el DataReader no se puede serializar y, por lo tanto, no se puede transferir a través de la web a través de un servicio web ...

En el caso de la web, quisiera que la clase proxy local solicite los datos como DataTable y luego los transforme localmente en un DataReader.

De esta forma, la aplicación Local no necesita saber (o preocuparse) si está accediendo a los datos de forma local o remota.

Sin embargo, para hacer esto, necesito saber ... ¿Cómo envuelvo un DataReader en una DataTable preexistente?

Actualización: Mi lógica comercial no se llevará a cabo en el servicio web ya que el proveedor de datos que utiliza el servicio web es conmutable por uno que no lo hace. El businessLogic por lo tanto se llevará a cabo en la aplicación del cliente.

FWIW Estoy usando .Net 3.5 SP1


No puedes. DataReader y DataTable son dos cosas diferentes.

Dado que un DataReader le permite leer datos como una secuencia, realmente no veo por qué desea hacer este lado del cliente.

Un DataReader se usa generalmente para leer datos de la base de datos y agregar lógica para completar una lista de objetos o una DataTable. Por lo tanto, es mejor hacer la mayoría de la lógica empresarial que tiene que ver con la construcción de la DataTable en el servicio web, pasarla al cliente como un servicio web y trabajar con las otras funciones de ADO.Net para obtener más lógica comercial.

Tal vez puedas ser más específico sobre por qué realmente quieres un DataReader?


Un DataReader es la manera más rápida de leer un almacén de datos, pero solo si se cumplen ciertas condiciones:

  1. Los datos se deben leer de manera solo por adelantado.
  2. Los datos deben ser de solo lectura.

Incluso si el escenario cumple estas condiciones, el DataReader representa un Datastore conectado, lo que significa que deberá mantener su conexión abierta durante todo el tiempo que el DataReader se pase por la red y hasta que el método llamado en el otro extremo devuelva tipo de respuesta.

Por lo tanto, es mi opinión que un DataReader activo nunca se debe pasar a través de varias capas y aplicaciones. Prefiero extraer los datos en otro almacén de datos o colección primero y deshacerme del DataReader inmediatamente.


Simplemente llame a CreateDataReader en su DataTable