problema con datareader...

09/08/2006 - 16:19 por Nau | Informe spam
buenos dias, soy un programador principiante de c#, estoy haciendo los
tutoriales y tengo un problema con el tutorial "Actualizar datos mediante una
consulta de actualizacion de base de datos en los formularios Web forms", al
momento de leer los datos desde el datareader me da un error y me dice que
hay un erro de lectura porque no hay datos, y dentro de la base de datos hay
elementos a ser vistos, como puedo solucionar eso?

Preguntas similare

Leer las respuestas

#1 Octavio Hernandez
09/08/2006 - 17:59 | Informe spam
Hola,

Problablemente te está pasando lo que al 100% de los principiantes, pensar
que una aplicación Web
es como una aplicación Windows y que lees los datos al DataSet en un evento
y luego puedes actualizarlo en
otro, sin tener en cuenta el ciclo de vida de las páginas ASP.NET - para
responder a cada petición se
crea desde cero un *NUEVO* objeto de la clase de tu página. Para mantener
los objetos que quieres que
"sobrevivan" entre llamadas debes utilizar Session o Application (más
probablemente el 1º).

En cualquier caso, si nos mostraras el código eso podría ayudar a decirte
con más exactitud...

Salu2 - Octavio


"Nau" escribió en el mensaje
news:
buenos dias, soy un programador principiante de c#, estoy haciendo los
tutoriales y tengo un problema con el tutorial "Actualizar datos mediante
una
consulta de actualizacion de base de datos en los formularios Web forms",
al
momento de leer los datos desde el datareader me da un error y me dice que
hay un erro de lectura porque no hay datos, y dentro de la base de datos
hay
elementos a ser vistos, como puedo solucionar eso?
Respuesta Responder a este mensaje
#2 Nau
09/08/2006 - 20:58 | Informe spam
gracias por la respuesta, te anexo el codigo peor de verda esa igual al del
tutorial. En realidad no se si la base de datos necesite algun tipo de
permiso aunq estuve revisando y poseo los permisos necesarios para manipular
la base de datos. Aqui adjunto el código y la sentencia SQL con la que
trabaja el sqlcommand. Gracias


string var;
System.Data.SqlClient.SqlDataAdapter aux;
sqlConnection1.Open();
sqlCommand1.Parameters["@nombre"].Value = nombre;
aux = sqlCommand.ExecuteReader(CommandBehavior.SingleRow);
var = aux[1].ToString();
sqlConnection1.Close();
return var;


la sentencia SQL es:

SELECT LastName, Title
FROM Employees
WHERE (FirstName = @nombre)
Respuesta Responder a este mensaje
#3 Octavio Hernandez
09/08/2006 - 22:19 | Informe spam
Nau,

Lo que falta ahí es una llamada a aux.Read(). Las filas que produce el
Reader se leen una a una usando Read() - que devuelve false cuando se llega
al final.
Te digo como tendrías que cambiar el código (creo :-)

string var;
System.Data.SqlClient.SqlDataAdapter aux;
sqlConnection1.Open();
try
{
sqlCommand1.Parameters["@nombre"].Value = nombre;
aux = sqlCommand.ExecuteReader(CommandBehavior.SingleRow);
try
{
if (aux.Read()) // IF porque es un solo empleado; si fueran varios -
WHILE
{
var = aux[1].ToString();
return var;
}
else
{
// caso que no te han devuelto nada
throw new ApplicationException("Empleado no existe");
}
}
finally
{
aux.Dispose(); // ESENCIAL !!!
}
}
finally
{
sqlConnection1.Close();
}

Me tomo el atrevimiento de "extenderme" un poco para hacerte énfasis en la
necesidad de garantizar
el comportamiento correcto de la aplicación EN CUALQUIER SITUACION. Esto es
esencial en
las aplicaciones Web y se logra con los try/finally o (aún mejor) con la
instrucción using de C# 2.0.

Te recomiendo consultar los materiales al respecto en la Web del Guille, son
excelentes.

Otro consejo: no le llames 'var' a ninguna variable; ese identificador será
especial en C# 3.0 (por allá por 2008 :-).
Se supone que eso no traería problemas; pero es mejor precaver...

Salu2 - Octavio



"Nau" escribió en el mensaje
news:
gracias por la respuesta, te anexo el codigo peor de verda esa igual al
del
tutorial. En realidad no se si la base de datos necesite algun tipo de
permiso aunq estuve revisando y poseo los permisos necesarios para
manipular
la base de datos. Aqui adjunto el código y la sentencia SQL con la que
trabaja el sqlcommand. Gracias


string var;
System.Data.SqlClient.SqlDataAdapter aux;
sqlConnection1.Open();
sqlCommand1.Parameters["@nombre"].Value = nombre;
aux = sqlCommand.ExecuteReader(CommandBehavior.SingleRow);
var = aux[1].ToString();
sqlConnection1.Close();
return var;


la sentencia SQL es:

SELECT LastName, Title
FROM Employees
WHERE (FirstName = @nombre)


Respuesta Responder a este mensaje
#4 Nau
09/08/2006 - 22:21 | Informe spam
el problema me lo da especificamente en la linea var = aux[1].ToString(); lo
que dice es que hay un error de lectura porque no hay datos que mostrar, pero
llene un datagrid para verificar si habian datos o no y si me llena el
datagrid...
Respuesta Responder a este mensaje
#5 Nau
09/08/2006 - 22:36 | Informe spam
ok,.. muchas gracias..:P Y gracias por explicarme todo eso...
el aux.dispose no me lo aceptq... no se si tengo que usar algun tipo de
sentencia antes o que... de todas formas me sirve el aux.close no e si es o
mismo... de resto trabaja super bien.,.. gracias otra vez
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida