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

Crear tabla con información de 2 consultas SQL

Estas en el tema de Crear tabla con información de 2 consultas SQL en el foro de .NET en Foros del Web. Hola de nuevo foro!! Mi duda es la siguiente,tendo dos consultas SQL: 1ª)Me saca la descripcion de una pregunta 2ª)Me va a sacar las respuestas ...
  #1 (permalink)  
Antiguo 19/05/2005, 03:52
 
Fecha de Ingreso: febrero-2005
Mensajes: 31
Antigüedad: 19 años, 2 meses
Puntos: 0
Pregunta Crear tabla con información de 2 consultas SQL

Hola de nuevo foro!!

Mi duda es la siguiente,tendo dos consultas SQL:
1ª)Me saca la descripcion de una pregunta
2ª)Me va a sacar las respuestas asociadas a esa pregunta y a las cuales les voy a poner botones del tipo "radio" para que el alumno seleccione cual es la correcta.

Vale pues toda esa infomacion en conjunto tiene que aparecer en una tabla:
En la tabla aparecera la pregunta y sus respectivas respuestas.

Pero es que no lo puedo asociar todo en la misma tabla.

Aqui mando el codigo explicado:

public class WebForm3 : System.Web.UI.Page
{
//ESTE ID SIRVE PARA VENIR LA ASOCIACION DE EL CODIGO DE LA PREGUNTA DESDE OTRO FORM
int idObjeto;

private void Page_Load(object sender, System.EventArgs e)
{
// Introducir aquí el código de usuario para inicializar la página


this.idObjeto=int.Parse(Request.QueryString.GetVal ues("oid")[0]);
this.Response.Write("Hola Leticia con identificador"+this.idObjeto.ToString());

//CONSULTA NUMERO UNO
string sqlquery="SELECT desc_pregunta FROM Pregunta WHERE cod_pregunta='"+idObjeto.ToString()+"'";
string ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\\Inetpub\\wwwroot\\proyecto\\bd.mdb";
OleDbConnection con = new OleDbConnection(ConnectionString);
OleDbCommand cmd = new OleDbCommand(sqlquery,con);

con.Open();

OleDbDataReader dr= cmd.ExecuteReade(CommandBehavior.CloseConnection);


//DE AQUI SACO LA DESCRIPCION DE LA PREGUNTA Y LA PONGO EN TABLA 2 QUE ES DONDE VA A IR TODA LA INFOMACION

string tabla2="<table border=1 cellspacing=1><tr><th colspan=2>"+dr["desc_pregunta"]+"</th></tr>";

//CONSULTA NUMERO DOS
string sqlquery2="SELECT R.cod_respuesta,R.desc_respuesta FROM Respuesta R,Preg_tiene_Respu PTR WHERE PTR.cod_pregunta='"+idObjeto.ToString()+"' AND R.cod_respuesta=PTR.cod_respuesta";

//AQUI SE PONE OTRO NOMBRE DIFERENTE Y EN LA SQLQUERY2,VERDAD??
OleDbCommand cmd2 = new OleDbCommand(sqlquery2,con);


OleDbDataReader dr= cmd.ExecuteReade(CommandBehavior.CloseConnection);

//Concatenar los valores del DataReader para crear cada fila de la tabla.
while(dr.Read())
{
//string desc=dr["desc_pregunta"].ToString();

tabla2 += "<tr><td><input type=radio name= correcta1 value=cod_respuesta runat=server></td><td>"+dr["desc_respuesta"]+"</td></tr>";
tabla2 +="</td></tr>";

}
dr.Close();
tabla2 += "</table>";
//Escribir la cadena final.
Response.Write(tabla2);


//Cerrar la conexión y el DataReader.
//con.Close();

}
  #2 (permalink)  
Antiguo 19/05/2005, 04:12
Avatar de Jose_minglein2  
Fecha de Ingreso: noviembre-2004
Mensajes: 2.344
Antigüedad: 19 años, 5 meses
Puntos: 8
Y cual es exactamente tu problema???No te muestra la pregunta, no te muestra la respuesta???
  #3 (permalink)  
Antiguo 19/05/2005, 04:33
 
Fecha de Ingreso: febrero-2005
Mensajes: 31
Antigüedad: 19 años, 2 meses
Puntos: 0
Hola,que tal??

Lo que es que muestre la pregunta en la tabla final si que me sale,pero
a la hora de querer mostrar las respuestas asociadas a esa pregunta no me sale.

Yo creo que hasta aqui lo hace bien:
string tabla2="<table border=1 cellspacing=1><tr><th colspan=2>"+dr["desc_pregunta"]+"</th></tr>";


Pero lo que viene despues como que abro otro executereader no se si esta bien,o que le llamo con otro nombre a la sqlquery2 y al oledbcommand2 para la 2ªconsulta tampoco se si esta bien.

Y claro no se como hacer que toda esa relacion de preguntas y respuestas aparezcan en la misma tabla,porque lo que son las consultas estan bien porque las probe por separado y se que mostraban la informacion correspondiente.

Gracias por vuestra ayuda
  #4 (permalink)  
Antiguo 19/05/2005, 05:09
Avatar de Jose_minglein2  
Fecha de Ingreso: noviembre-2004
Mensajes: 2.344
Antigüedad: 19 años, 5 meses
Puntos: 8
En un principio si las consultas están bien, como dices, parece correcto, sólo 2 pegas,

una es que cierres dr despues de la primerca consulta, dr.Close();
y la otra que no lo vuelvas a declarar y que ejecutes la segunda consulta, es decir:

dr= cmd2.ExecuteReade(CommandBehavior.CloseConnection) ;

(tu tienes:
OleDbDataReader dr= cmd.ExecuteReade(CommandBehavior.CloseConnection);
)
  #5 (permalink)  
Antiguo 19/05/2005, 05:40
 
Fecha de Ingreso: febrero-2005
Mensajes: 31
Antigüedad: 19 años, 2 meses
Puntos: 0
Hola!!

Si pongo el dr.close() me sale la siguiente excepcion:
ExecuteReader requiere una conexión abierta y disponible. El estado actual de la conexión es Closed.

Mira como me esta quedando todo lo que me vas diciendo.Y he estado modificando alguna cosa.Sigue llegando hasta la pregunta a las respuestas no entra.

GRACIAS

public class WebForm3 : System.Web.UI.Page
{
int idObjeto;
string desc;

private void Page_Load(object sender, System.EventArgs e)
{
// Introducir aquí el código de usuario para inicializar la página

this.idObjeto=int.Parse(Request.QueryString.GetVal ues("oid")[0]);
this.Response.Write("Hola Leticia con identificador"+this.idObjeto.ToString());

//CONSULTA NUMERO UNO
string sqlquery="SELECT desc_pregunta FROM Pregunta WHERE cod_pregunta='"+idObjeto.ToString()+"'";
string ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;DataSource=C:\\I netpub\\wwwroot\\proyecto\\bd.mdb";
OleDbConnection con = new OleDbConnection(ConnectionString);
OleDbCommand cmd = new OleDbCommand(sqlquery,con);

//ABRO LA CONEXION
con.Open();

//DECLARO EL READER PARA LEER LOS DATOS
OleDbDataReader dr= cmd.ExecuteReade(CommandBehavior.CloseConnection);

if(dr.Read())
{
desc=dr["desc_pregunta"].ToString();
}
string tabla2="<table border=1 cellspacing=1><tr><thcolspan=2>"+desc+"</th></tr>";

dr.Close();


//CONSULTA NUMERO DOS
string sqlquery2="SELECT R.cod_respuesta,R.desc_respuesta FROM Respuesta R,Preg_tiene_Respu PTR WHERE PTR.cod_pregunta='"+idObjeto.ToString()+"' AND R.cod_respuesta=PTR.cod_respuesta";

//PARA LA NUEVA CONEXION
OleDbCommand cmd2 = new OleDbCommand(sqlquery2,con);

dr=cmd2.ExecuteReader(CommandBehavior.CloseConnect ion);

//Concatenar los valores del DataReader para crear cada fila de la tabla.

while(dr.Read())
{
tabla2 += "<tr><td><input type=radio name= correcta1 value=cod_respuesta runat=server><input type=hidden name=correcta2 value=cod_pregunta></td><td>"+dr["desc_respuesta"]+"</td></tr>";

tabla2 +="</td></tr>";

}

tabla2 += "</table>";
//Escribir la cadena final.
Response.Write(tabla2);


//Cerrar la conexión y el DataReader.
con.Close();
}
  #6 (permalink)  
Antiguo 19/05/2005, 05:57
Avatar de Jose_minglein2  
Fecha de Ingreso: noviembre-2004
Mensajes: 2.344
Antigüedad: 19 años, 5 meses
Puntos: 8
//PARA LA NUEVA CONEXION
OleDbCommand cmd2 = new OleDbCommand(sqlquery2,con);
con.Open()
dr=cmd2.ExecuteReader(CommandBehavior.CloseConnect ion);
  #7 (permalink)  
Antiguo 20/05/2005, 01:53
 
Fecha de Ingreso: febrero-2005
Mensajes: 31
Antigüedad: 19 años, 2 meses
Puntos: 0
Buenos dias!!

No me di cuenta de que no volvi a abrir la conexión.Muchas gracias era justo eso y ya me hace justo lo que quiero.

Sois los mejores.
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 07:27.