DataReader

02/10/2004 - 01:37 por Ramon Zarza | Informe spam
Colegas

Como obtengo el valor de un objeto cargado con el DataReader??

Esto es lo que hago. Leo la columna (0) peor no la (1)

hay alguan forma de hacerlo??

************************
miConexion.Open();
miReader= miComando.ExecuteReader();

// Recorro la tabla y alimento mi lista de opciones

while (miReader.Read())
{
ListItem nuevoItem = new ListItem();

nuevoItem.Text = (string)miReader.GetValue(0); // columna
<CategoriaDocumento>
nuevoItem.Value = (string)miReader.GetValue(0); // columna
<idCategoriaDocumento>
// -- Este ultimo es un id por lo que debe ser INT me da error al
colocar (1)
// hay alguna forma de referencia el nombre de los campos obtenidos??

TipoRegistro.Items.Add(nuevoItem);

}
miReader.Close();
miConexion.Close();
**********************************

Gracias a todos

Preguntas similare

Leer las respuestas

#1 Santi
02/10/2004 - 10:22 | Informe spam
Hola Ramón, probablemente te de el error por hacer:

(string)miReader.GetValue(1); si el valor que contiene es un int lo que
tienes que hacer es:

miReader.GetValue(1).ToString();
o
((int)miReader.GetValue(1)).ToString();


Para referenciar por nombre:

reader["id"]
#2 A.Poblacion
02/10/2004 - 10:24 | Informe spam
Mostrar la cita
valor = (tipo) miReader["NombreDeColumna"];

Mostrar la cita
Si es INT tendrás que poner algo parecido a esto:

nuevoItem.Value = ((int)miReader.GetValue(1)).ToString();

O bien, directamente esto:

nuevoItem.Value = miReader.GetValue(1).ToString();


"Ramon Zarza" wrote in message
news:%
Mostrar la cita
#3 Octavio Hernandez
02/10/2004 - 18:11 | Informe spam
Ramón,

La clase DataReader tiene métodos GetString(), GetInt32(), GetDateTime(),
etc. para utilizarlos en dependencia del tipo del dato que vayas a
recuperar. Son métodos sobrecargados, y puedes pasarle tanto el número como
el nombre de la columna.

En general, yo creo que es preferible utilizar estos métodos en lugar de
GetValue() o la notación equivalente miReader["NombreColumna"]), que
devuelven un object y al final terminas teniendo que hacer castings.

En esta página te advierten de eso y te dan un "mapping" de los tipos debase
de datos a los tipos .NET:

http://msdn.microsoft.com/library/d...atypes.asp

Yo utilizo GetValue() únicamente si voy a escribir alguna utilidad para
abrir alguna tabla cuya estructura desconozco a priori. Pero eso puede que
sea problema de gustos...

Salu2,

Octavio

"Ramon Zarza" escribió en el mensaje
news:%
Mostrar la cita
#4 Misael Monterroca
03/10/2004 - 02:35 | Informe spam
Solo una pequeña aclaración

El metodo GetXXX no puedes pasarle directamente el nombre de la culumna, si
quieres hacer esto hay que obtener el numero de la culumna con
GetOrdinal("NombreCol") y este asignarlo al GetXXX

GetInt32(GetOrdinal(NombreCol"))


Saludos!
http://www.neo-mx.com/blog


"Octavio Hernandez" escribió en el mensaje
news:
Mostrar la cita
#5 Octavio Hernandez
03/10/2004 - 12:47 | Informe spam
Misael,

Muchas gracias, tienes razón. Es en los ResultSets de Java donde se puede
hacer ambas cosas indistintamente. A veces le apunto a .NET cosas que he
visto en Java (y viceversa).

La pregunta que me surge ahora es ¿por qué los de MS no han hecho lo mismo,
y te obligan a utilizar el GetOrdinal() explícitamente?

Salu2,

Octavio

"Misael Monterroca" escribió en el mensaje
news:
Mostrar la cita
si
Mostrar la cita
GetDateTime(),
Mostrar la cita
http://msdn.microsoft.com/library/d...atypes.asp
Mostrar la cita
que
Mostrar la cita
al
Mostrar la cita
obtenidos??
Mostrar la cita
Ads by Google
Search Busqueda sugerida