Foros del Web » Programación para mayores de 30 ;) » .NET »

Mostrar la información que tiene un Datareader

Estas en el tema de Mostrar la información que tiene un Datareader en el foro de .NET en Foros del Web. Hola que tal, recién he comenzado a trabajar con el datareader y la verdad me vuelto un lío. Hasta ahora solo he trabajado con Datasets, ...
  #1 (permalink)  
Antiguo 28/03/2005, 13:32
 
Fecha de Ingreso: marzo-2005
Mensajes: 309
Antigüedad: 19 años, 2 meses
Puntos: 1
Mostrar la información que tiene un Datareader

Hola que tal, recién he comenzado a trabajar con el datareader y la verdad me vuelto
un lío. Hasta ahora solo he trabajado con Datasets, y a raíz de que leí que el reader
puede ser menos pesado que el dataset(no se si es verdad, ¿me lo pueden aclarar?) pues
comencé a trabajar con el. Ahora bien, me gustaría mostrar en un datagrid la información
que tiene el reader, pero no me la muestra, el enlace con el datagrid lo he hecho como si
fuese un dataset:

datagrid.datasource= mydatareader
datagrid.databind

No se si el problema es que no se puede mostrar en un Datagrid lo que tiene un reader.
Entonces como puedo hacer para mostrar esta información?
Si tuviesen algun link en donde pudiera encontrar informacion sobre el reader se los
agradecería.
  #2 (permalink)  
Antiguo 28/03/2005, 14:32
 
Fecha de Ingreso: septiembre-2004
Mensajes: 407
Antigüedad: 19 años, 8 meses
Puntos: 1
si estas utilizando columnas enlazadas en el datagrid fijate que el nombre de las columnas coincidan con las que te devuelve el datareader
  #3 (permalink)  
Antiguo 28/03/2005, 14:49
 
Fecha de Ingreso: marzo-2005
Mensajes: 309
Antigüedad: 19 años, 2 meses
Puntos: 1
no aún no estoy trabajando con columnas enlazadas, lo que pasa es que recien empiezo con el datareader entonces simplemente coloque el autogeneratecolumns del datagrid en true, y le asigne a su datasource el reader, pero como no mostraba nada, pues pensé que no podia hacer esto con el reader, de verdad no se que sucede.
  #4 (permalink)  
Antiguo 28/03/2005, 15:06
 
Fecha de Ingreso: marzo-2005
Mensajes: 20
Antigüedad: 19 años, 1 mes
Puntos: 0
Un datareader no sirve como un origen de datos para el datagrid, tienes que usar un datatable, un dataset o un dataview
  #5 (permalink)  
Antiguo 28/03/2005, 15:11
 
Fecha de Ingreso: septiembre-2004
Mensajes: 407
Antigüedad: 19 años, 8 meses
Puntos: 1
si sirve como origen de datos, yo lo hice fijate si el datareader te trae datos
hace lo siguiente para probar, el dr(0) seria el valor dela primer columna, hacelo simplemente para verficar que te trae datos
while dr.read

label1.text=dr(0)
end while
  #6 (permalink)  
Antiguo 28/03/2005, 15:13
 
Fecha de Ingreso: marzo-2005
Mensajes: 309
Antigüedad: 19 años, 2 meses
Puntos: 1
Ok lo haré gracias...
  #7 (permalink)  
Antiguo 28/03/2005, 16:00
 
Fecha de Ingreso: marzo-2005
Mensajes: 20
Antigüedad: 19 años, 1 mes
Puntos: 0
Yo me mantengo en lo que dije: Un datareader no sirve como un origen de datos para el datagrid, es decir, esta linea esta mal:

datagrid.datasource= mydatareader
  #8 (permalink)  
Antiguo 28/03/2005, 16:19
Avatar de splinter  
Fecha de Ingreso: junio-2004
Ubicación: Misantla,Ver.Mexico
Mensajes: 181
Antigüedad: 19 años, 10 meses
Puntos: 0
Hola

el datareader funciona perfectamente con el datagrid, seguramente el datareader no contiene datos y por eso razon el grid no carga valores, deberias de probar tu consulta asi como te lo sugiere [popopo]

Saludos
  #9 (permalink)  
Antiguo 28/03/2005, 17:18
Avatar de RootK
Moderador
 
Fecha de Ingreso: febrero-2002
Ubicación: México D.F
Mensajes: 8.004
Antigüedad: 22 años, 2 meses
Puntos: 50
Cita:
Yo me mantengo en lo que dije: Un datareader no sirve como un origen de datos para el datagrid, es decir, esta linea esta mal:
DarkRigel, de hecho si es posible pasarle un datareader a un grid como origen de datos , y estoy de acuerdo como dicen splinter.. posiblemente tu reader no tenga datos... y si quieres puedes probar en colocar tu grid en autogeneratecolumns=true para ver que es lo que carga...

Salu2
__________________
Nadie roba nada ya que en la vida todo se paga . . .

Exentrit - Soluciones SharePoint & Net
  #10 (permalink)  
Antiguo 29/03/2005, 07:44
 
Fecha de Ingreso: marzo-2005
Mensajes: 309
Antigüedad: 19 años, 2 meses
Puntos: 1
Hola otra vez, he probado a ver si mi Reader tiene datos asi como me lo dijo popopo y
efectivamente los tiene, es decir que se está cargando. Ahora bien, les cuento lo siguiente:

mi aplicación la tengo estructurada en tres capas: la de presentación, la de reglas y negocio
y la de acceso a datos, en la capa de acceso a datos tengo una función que devulve un OledbDatareader.
En esta función cargo un reader con una sentencia SQL más o menos así:

Dim MyReader As OledbDataReader
MyReader = MyCommand.ExecuteReader

Bueno y comprobé si tiene datos así:

If MyReader.HasRows Then
Dim Valor As String
While MyReader.Read
Valor = MyReader(0).Tostring
End While
End If

Todo bien, luego esta función retorna el Reader cargado. En la capa de reglas tengo otra función que retorna un
OledbDataReader, pero ahora esta se carga con la función de la clase de acceso a datos. Pero que sorpresa me llevo
cuando me doy cuenta que aqui el Reader no tiene nada. Es por eso que cuando paso este reader a la capa de presentación
en el Web Form el Reader no tiene nada y por eso el DataGrid no se carga.

Es decir, el reader se está cargando bien en la clase de acceso a datos, pero cuando retorno ese reader cargado
a la función de la clase de reglas ya no tiene nada. ¿Será que una función no puede retornar un reader?
Bueno para mi es bastante raro, porque ya he usado esta misma lógica pero con un DataSet y funciona perfecto. Espero
que por favor me puedan ayudar.
  #11 (permalink)  
Antiguo 29/03/2005, 09:11
 
Fecha de Ingreso: septiembre-2004
Mensajes: 407
Antigüedad: 19 años, 8 meses
Puntos: 1
primero supongamos que en la capa de datos tenes la funcion

class xx

funcion devolver_datareader() as datareader

.
.
.
dr=cm.executereader

devolver_datareader=dr
end function
endclass

en la otra capa

function otra_funcion() as datareader
dim dr as new xx
dr=xx.devolver_datareader

otra_funcion=dr
end function

probala y contame
  #12 (permalink)  
Antiguo 29/03/2005, 09:15
Avatar de RootK
Moderador
 
Fecha de Ingreso: febrero-2002
Ubicación: México D.F
Mensajes: 8.004
Antigüedad: 22 años, 2 meses
Puntos: 50
Cita:
Es decir, el reader se está cargando bien en la clase de acceso a datos, pero cuando retorno ese reader cargado
Por lo que estyo viendo en tu reader no te regresa nada porque ya lo recorriste en ésta parte:

Cita:
While MyReader.Read
Valor = MyReader(0).Tostring
End While
Lo que te recomiendo es que en tu capa de datos dejes un método de tipo shared (no hay necesidad de crear el objeto) que regrese el datareader..

algo así:

Cita:
Public Class DataAccess

Public Shared Function GetDataReader() As OleDbDataReader
Dim oConn As OleDbConnection
'...
'...
Dim oCmd As New OleDbCommand("blabla", oConn)

Dim dr As OleDbDataReader = oCmd.ExecuteReader(CommandBehavior.CloseConnection)

Return dr

End Function

End Class
Y despues ya en tu grid lo podrias llamar así:

Cita:
DataGrid1.DataSource = DataAccess.GetDataReader()
DataGrid1.DataBind()
Checalo y nos cuentas como te fue..
  #13 (permalink)  
Antiguo 29/03/2005, 12:23
 
Fecha de Ingreso: marzo-2005
Mensajes: 309
Antigüedad: 19 años, 2 meses
Puntos: 1
Hola RootK, efectivamente es lo que decías, el reader no retornaba nada porque ya lo
había recorrido. Bueno lo estaba recorriendo era para ver si se llenaba, pero no sabía
que después de hacer eso ya el no tenía registros ¿Me podrías decir por favor porque sucede eso?

Y por último tres preguntillas más y por favor disculpen por las molestias. RootK dices que puedo
crear un método de tipo shared que regreser el reader. Primera pregunta: ¿Por qué shared?
Segunda pregunta ¿Que es eso de shared, pues de verdad no se que caracterísica tiene?

Y por último, cuando dices que no hay necesidad de crear el objeto ¿a que te refieres?

Bien por lo demás, muchas gracias a todos por responder y a RootK pues me ha dado la solución
a mi problema. Gracias...
  #14 (permalink)  
Antiguo 29/03/2005, 12:29
 
Fecha de Ingreso: septiembre-2004
Mensajes: 407
Antigüedad: 19 años, 8 meses
Puntos: 1
hacelo de la forma que te dije yo, lo probe y anda un espectaculo , el datareader es un objeto que es solo lectura y siempre avance hacia adelante por lo tanto solo se utiliza para mostrar datos, ej llenar dropdownlist, si queres editarlos necesitas si osi una dataset
  #15 (permalink)  
Antiguo 29/03/2005, 12:37
Avatar de mozka  
Fecha de Ingreso: junio-2004
Ubicación: México
Mensajes: 37
Antigüedad: 19 años, 11 meses
Puntos: 0
el DataReader es de solo lectura y solo para adelante, una ves que lo recorres no puedes volver atras, esa es una de las razones de por que es mas liviano que el DataSet.

y el por que no se necesita crear el objeto, se refiere a que no es necesario crear un DataReader en el lado final ya que la funcion te regresa un objeto de ese tipo el cual puedes asignar sin ningun problema
__________________
hola :adios:
  #16 (permalink)  
Antiguo 29/03/2005, 13:30
Avatar de RootK
Moderador
 
Fecha de Ingreso: febrero-2002
Ubicación: México D.F
Mensajes: 8.004
Antigüedad: 22 años, 2 meses
Puntos: 50
Cita:
Primera pregunta: ¿Por qué shared?
Segunda pregunta ¿Que es eso de shared, pues de verdad no se que caracterísica tiene?
Ok... te digo que lo puedes hacer de tipo shared (static para c#) porque estas creando un método dentro de una clase que no implementa ni eventos, properties, interfaces..etc... por lo cual en el concepto de POO (programacion orientada a objetos) al crearlo hay que instancialo con la palabra NEW pero aqui no es necesario crear un objeto porque no va a tener comportamiento..

MM...un ejemplo podría ser: antes en vb 6 podías tener variables de tipo globales cosa en que en vb.net no se puede.... por eso se ocupan de tipo shared o staticas...

De todas formas te recomiendo que leas los conceptos de POO para que te des una mejor idea... ya que muchas veces la gente empieza a programar sin saber que es una clase, miebro compartido, clases abstractas, herencia, interfaces..etc..etc...

Espero que haber sido mas claro..

salu2
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 13:05.