Ayuda con DataSet

28/02/2007 - 19:24 por Lu´pita | Informe spam
Hola!

En una aplicación web estoy utilizando un Dataset, según yo tipado, lleno el
DataSet en el Page_Load pero al tratar de utilizar los datos en otro evento
me marca error y no puedo trabajar con los datos ya cargados anteriormente
al Dataset.

Alguien podría ayudarme indicandome que debod e hacer para poder llenar los
datos una sola vez en un dataset y poder trbajar con ellos en cualquier
evento.

Este es el código:
private void Page_Load(object sender, System.EventArgs e)
{
if (!Page.IsPostBack)
{
sqlDataAdapter1.Fill(preg,"preguntas");
}
}

private void sig_Click(object sender, System.EventArgs e)
{
Response.Write (preg.preguntas.Rows[0][0].ToString());
}

Gracias y Saludos...

Preguntas similare

Leer las respuestas

#1 Alberto Poblacion
28/02/2007 - 20:38 | Informe spam
"Lu´pita" wrote in message
news:
En una aplicación web estoy utilizando un Dataset, según yo tipado, lleno
el
DataSet en el Page_Load pero al tratar de utilizar los datos en otro
evento
me marca error y no puedo trabajar con los datos ya cargados
anteriormente
al Dataset.

Alguien podría ayudarme indicandome que debod e hacer para poder llenar
los
datos una sola vez en un dataset y poder trbajar con ellos en cualquier
evento.

Este es el código:
private void Page_Load(object sender, System.EventArgs e)
{
if (!Page.IsPostBack)
{
sqlDataAdapter1.Fill(preg,"preguntas");
}
}

private void sig_Click(object sender, System.EventArgs e)
{
Response.Write (preg.preguntas.Rows[0][0].ToString());
}



Tu problema está en que para que esto te funcione tienes que quitar la
linea que dice " if (!Page.IsPostBack)". Esta linea hace que solo cargues el
dataset la primera vez que se carga la página. Una vez que se ha cargado,
termina el Page_load, la página se envía al cliente, y se destruye a clase,
perdiéndose los datos que habías cargado en el dataset.
A continuación el usuario hace click, y se vuelve a crear la clase en el
servidor, se vuelve a ejecutar el Page_load, NO se carga el dataset porque
lo impide el "if", y seguidamente se ejecuta el sig_click qeu da un error
porque el dataset es null.
El remedio más simple es quitar el "if" del Page_Load para que el dataset
se cargue siempre, pero si la carga es demasiado costosa también puedes
recurrir a preservarlo entre invocaciones de la clase por medio del
ViewState o del Session.
Respuesta Responder a este mensaje
#2 Lu´pita
28/02/2007 - 21:08 | Informe spam
Esa es una buena idea, pero desgraciadamente debe existir por que sino se
incializan todas las otras variables que existen.

Sigo aceptando sugerencias.

Gracias y Saludos...

"Alberto Poblacion" wrote:

"Lu´pita" wrote in message
news:
> En una aplicación web estoy utilizando un Dataset, según yo tipado, lleno
> el
> DataSet en el Page_Load pero al tratar de utilizar los datos en otro
> evento
> me marca error y no puedo trabajar con los datos ya cargados
> anteriormente
> al Dataset.
>
> Alguien podría ayudarme indicandome que debod e hacer para poder llenar
> los
> datos una sola vez en un dataset y poder trbajar con ellos en cualquier
> evento.
>
> Este es el código:
> private void Page_Load(object sender, System.EventArgs e)
> {
> if (!Page.IsPostBack)
> {
> sqlDataAdapter1.Fill(preg,"preguntas");
> }
> }
>
> private void sig_Click(object sender, System.EventArgs e)
> {
> Response.Write (preg.preguntas.Rows[0][0].ToString());
> }

Tu problema está en que para que esto te funcione tienes que quitar la
linea que dice " if (!Page.IsPostBack)". Esta linea hace que solo cargues el
dataset la primera vez que se carga la página. Una vez que se ha cargado,
termina el Page_load, la página se envía al cliente, y se destruye a clase,
perdiéndose los datos que habías cargado en el dataset.
A continuación el usuario hace click, y se vuelve a crear la clase en el
servidor, se vuelve a ejecutar el Page_load, NO se carga el dataset porque
lo impide el "if", y seguidamente se ejecuta el sig_click qeu da un error
porque el dataset es null.
El remedio más simple es quitar el "if" del Page_Load para que el dataset
se cargue siempre, pero si la carga es demasiado costosa también puedes
recurrir a preservarlo entre invocaciones de la clase por medio del
ViewState o del Session.


Respuesta Responder a este mensaje
#3 Alberto Poblacion
28/02/2007 - 21:26 | Informe spam
"Lu´pita" wrote in message
news:
Esa es una buena idea, pero desgraciadamente debe existir por que sino se
incializan todas las otras variables que existen.



No entiendo nada. ¿Cuál es el problema con las dos sugerencias que te he
hecho? Básicamente tienes dos alternativas: O construyes el DataSet cada vez
que cargues la página, o lo preservas entre invocaciones utiizando alguna de
las técnicas de conservación del estado (por ejemplo, ViewState o Session).
Las dos son perfectamente viables y ninguna de las dos tiene nada que ver
con ninguna inicialización de variables.
Lo que sí puede haber es una interpretación errónea de mi indicación de
"Quitar el if". Cuando dije lo de "quitarlo", lo decía porque en tu código
de ejemplo no había dentro nada más que la carga del dataset. Por supuesto,
si dentro tienes otras cosas, en lugar de "quitar el if", lo que tienes que
hacer es "sacar de dentro del if" la carga del dataset (y dejar el resto de
las cosas que haya).
Respuesta Responder a este mensaje
#4 Lu´pita
28/02/2007 - 22:19 | Informe spam
Mira te explico concretamente lo que necesito:

Generar un dataset que guarde "x" información pero solo una vez, ya que así
no tendra que conectarse a la base de datos cada que yo necesite la
información, la cual estara siendo consultada casi cada 3 minutos y por
muchas personas.

Entonces pregunto si hay alguna solución para descargar solo una vez la
información y poder trabajar con ella en cualquier evento.

"Alberto Poblacion" wrote:

"Lu´pita" wrote in message
news:
> Esa es una buena idea, pero desgraciadamente debe existir por que sino se
> incializan todas las otras variables que existen.

No entiendo nada. ¿Cuál es el problema con las dos sugerencias que te he
hecho? Básicamente tienes dos alternativas: O construyes el DataSet cada vez
que cargues la página, o lo preservas entre invocaciones utiizando alguna de
las técnicas de conservación del estado (por ejemplo, ViewState o Session).
Las dos son perfectamente viables y ninguna de las dos tiene nada que ver
con ninguna inicialización de variables.
Lo que sí puede haber es una interpretación errónea de mi indicación de
"Quitar el if". Cuando dije lo de "quitarlo", lo decía porque en tu código
de ejemplo no había dentro nada más que la carga del dataset. Por supuesto,
si dentro tienes otras cosas, en lugar de "quitar el if", lo que tienes que
hacer es "sacar de dentro del if" la carga del dataset (y dejar el resto de
las cosas que haya).


Respuesta Responder a este mensaje
#5 Alberto Poblacion
01/03/2007 - 08:35 | Informe spam
"Lu´pita" wrote in message
news:
Generar un dataset que guarde "x" información pero solo una vez, ya que
así
no tendra que conectarse a la base de datos cada que yo necesite la
información, la cual estara siendo consultada casi cada 3 minutos y por
muchas personas.

Entonces pregunto si hay alguna solución para descargar solo una vez la
información y poder trabajar con ella en cualquier evento.



Sí, entoces necesitas una de las otras dos alternativas que te
mencionaba: El ViewState o el Session. Lo que no sirve es dejarlo dentro de
una variable de clase. Esto funcionaría en Windows, pero en web no funciona
porque la clase se destruye (y se pierden todas las variables) cada vez que
se devuelve la página al navegador (cosa que ocurre a cada Click).

Por ejemplo, usando el Session para "arrastrar" el DataSet de una
invocación a la siguiente:

private void Page_Load(object sender, System.EventArgs e)
{
if (!Page.IsPostBack)
{
//La primera vez, construir el dataset y salvarlo
sqlDataAdapter1.Fill(preg,"preguntas");
Session["datos"] = preg;
}
else
{
//Las siguientes veces, recuperar el dataset que se almacenó la
primera vez
preg = Session["datos"] as DataSet;
}
}

private void sig_Click(object sender, System.EventArgs e)
{
//Si solo leemos el dataset no hay que hacer nada porque ya lo ha
recuperado antes el Page_Load
Response.Write (preg.preguntas.Rows[0][0].ToString());
}

private void ModificarAlgo_Click(object sender, System.EventArgs e)
{
//Si modificamos el dataset...
preg.Rows.Add();
//...volver a guardar el dataset para la próxima vez
Session["datos"] = preg;
}

Lógicamente para que funcione tienes que tener habilitado el
SessionState. Si lo prefieres puedes usar ViewState en lugar de Session, lo
cual no requiere habilitar nada, pero en cambio hace que los datos viajen en
cada petición desde/hacia el navegador.
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida