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

se puede hacer esto???

Estas en el tema de se puede hacer esto??? en el foro de .NET en Foros del Web. SqlDataReader reader4 = myCommand.ExecuteReader(); SqlDataReader reader5 = myCommand2.ExecuteReader(); while (reader4.Read() && (reader5.Read())) { reader4["nombre"] reader5["nombre"] ..... }...
  #1 (permalink)  
Antiguo 28/04/2005, 09:59
Avatar de Nombela  
Fecha de Ingreso: abril-2005
Mensajes: 611
Antigüedad: 19 años, 1 mes
Puntos: 1
se puede hacer esto???

SqlDataReader reader4 = myCommand.ExecuteReader();
SqlDataReader reader5 = myCommand2.ExecuteReader();
while (reader4.Read() && (reader5.Read()))
{
reader4["nombre"]
reader5["nombre"]
.....
}
  #2 (permalink)  
Antiguo 28/04/2005, 10: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
De que se puede hacer lo que pretendes.. si se puede hacer aunque no esta bien visto..

sería así:

Cita:
SqlDataReader reader4 = myCommand.ExecuteReader();
SqlDataReader reader5 = myCommand2.ExecuteReader();
while ( reader4.Read() )
{
reader5.Read()

reader4["nombre"]
reader5["nombre"]
.....
}
Checa bien para que lo vas a ocupar

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

Exentrit - Soluciones SharePoint & Net
  #3 (permalink)  
Antiguo 28/04/2005, 10:21
Avatar de Nombela  
Fecha de Ingreso: abril-2005
Mensajes: 611
Antigüedad: 19 años, 1 mes
Puntos: 1
pues va a ser ke no

De la forma que me has puesto me dice ke no hay datos ke leer.
Es ke no se como hacer para comparar 2 valores de 2 sqls distintas.
Este es mi codigo:

private void CargarServicios()
{
myConnection = new SqlConnection(connectionString);
SqlConnection myConnection2 = new SqlConnection(connectionString);
myCommand = new SqlCommand ("SELECT Servicios.ServNombre, Usuarios.UsId, TipoServicio.TipoNombre, Usuarios.UsIdCli FROM Servicios INNER JOIN "+
"UsuariosServicios ON Servicios.ServId = UsuariosServicios.UsServIdServ INNER JOIN Usuarios ON UsuariosServicios.UsServIdUs = Usuarios.UsId INNER JOIN "+
"TipoServicio ON Servicios.ServIdTipo = TipoServicio.TipoId INNER JOIN Clientes ON Usuarios.UsIdCli = Clientes.UsIdCli "+
"WHERE (Usuarios.UsIdCli = '"+ Request.QueryString["Id"] +"') ORDER BY Servicios.ServNombre",myConnection);

SqlCommand myCommand2 = new SqlCommand("SELECT Servicios.ServNombre, Usuarios.UsId, TipoServicio.TipoNombre, Usuarios.UsIdCli FROM Servicios INNER JOIN "+
"UsuariosServicios ON Servicios.ServId = UsuariosServicios.UsServIdServ INNER JOIN Usuarios ON UsuariosServicios.UsServIdUs = Usuarios.UsId INNER JOIN "+
"TipoServicio ON Servicios.ServIdTipo = TipoServicio.TipoId INNER JOIN Clientes ON Usuarios.UsIdCli = Clientes.UsIdCli "+
"WHERE (Usuarios.UsIdCli = "+ Request.QueryString["Id"] +") AND (Usuarios.UsId = "+ ComboLogin.SelectedItem.Value +") ORDER BY Servicios.ServNombre",myConnection2);
myCommand.Connection.Open();
myCommand2.Connection.Open();
SqlDataReader reader4 = myCommand.ExecuteReader();
SqlDataReader reader5 = myCommand2.ExecuteReader();
string servi=string.Empty;
bool inter=true;
Servicios.Text="";
while (reader4.Read())
{
reader5.Read();
if (!servi.Equals(reader4["TipoNombre"].ToString()))
{
if (inter)
{
Servicios.Text+="<fieldset><legend>"+ reader4["TipoNombre"].ToString() +"</legend>";
inter=false;
}
else
{
Servicios.Text+="</fieldset>";
Servicios.Text+="<fieldset><legend>"+ reader4["TipoNombre"].ToString() +"</legend>";
}
}
servi=reader4["TipoNombre"].ToString();
/*Response.Write("READER4: "+reader4["TipoNombre"].ToString());
Response.Write("READER5: "+reader5["TipoNombre"].ToString());
Response.Write("<br>");*/
if (reader4["TipoNombre"].Equals(reader5["TipoNombre"]))
Servicios.Text+="<input class='checkbox' id='" + reader4["ServNombre"].ToString() + "' title='" + reader4["ServNombre"].ToString() + "' type='checkbox' CHECKED value='" + reader4["ServNombre"].ToString() + "' name='" + reader4["ServNombre"].ToString() + "'>";
else
Servicios.Text+="<input class='checkbox' id='" + reader4["ServNombre"].ToString() + "' title='" + reader4["ServNombre"].ToString() + "' type='checkbox' value='" + reader4["ServNombre"].ToString() + "' name='" + reader4["ServNombre"].ToString() + "'>";
Servicios.Text+=reader4["ServNombre"].ToString();
Servicios.Text+="<br>";
}
Servicios.Text+="</fieldset>";
reader4.Close();
reader5.Close();
myCommand.Connection.Close();
myCommand2.Connection.Close();
}
  #4 (permalink)  
Antiguo 28/04/2005, 10:55
Avatar de Jose_minglein2  
Fecha de Ingreso: noviembre-2004
Mensajes: 2.344
Antigüedad: 19 años, 5 meses
Puntos: 8
pero porque no utilizas solo una consulta, hombre????? Menudo pedazo de bucle vas a hacer!!!! yo haría (reduzco tu sql, eh??)


"SELECT ServNombre,ServId if(servid in(select UsServIdServ from UsuariosServicios where UsServerUsId=" + Request.QueryString["Id"] +"),1,0) as TIENEELSERVICIO from Servicios ORDER BY ServNombre",myConnection2);

reader = ....
if reader["TIENEELSERVICIO "]

// Ya lo tiene

else
//no lo tiene

Si quieres complicarlo más lo ajustamos, pero no seas salvaje y hagas esa barbaridad de 2 bucles concatenados, que no te hace falta.


Ah bueno, se me acaba de ocurrir, que esta consulta variará (o no funcionara) dependiendo del gestor de base de datos que utilices
  #5 (permalink)  
Antiguo 29/04/2005, 00:47
Avatar de Nombela  
Fecha de Ingreso: abril-2005
Mensajes: 611
Antigüedad: 19 años, 1 mes
Puntos: 1
No me va

La sql no es correcta xq decias ke podia haber error????
  #6 (permalink)  
Antiguo 29/04/2005, 01:31
Avatar de Jose_minglein2  
Fecha de Ingreso: noviembre-2004
Mensajes: 2.344
Antigüedad: 19 años, 5 meses
Puntos: 8
Perdón me faltaba una coma entre ServerId y el if


"SELECT ServNombre,ServId, if(servid in(select UsServIdServ from UsuariosServicios where UsServerUsId=" + Request.QueryString["Id"] +"),1,0) as TIENEELSERVICIO from Servicios ORDER BY ServNombre",myConnection2);

Te decía que puede dar errores, porque aunque SQL debería ser estandar, no lo es para todos los gestores, es decir, la sintaxis dependerá de tu Gestor de BD, así como a que soporte el IF,

Yo uso MYSQL y con esa sentencia, me traería todos los servicios y me indicaría en el TIENEELSERVICIO si el usuario pasado por el Request.QuerySting, tiene ese servicio. Esa consulta el gestor la resuelve en 0.01 sec (vamos rapidisimo).

Si usas Access, no se si te la pillará, sería leerte la documentación, si usas otros gestor y te dice sintaxis incorrecta, tendrás que leerte la documentación y buscar los if.
  #7 (permalink)  
Antiguo 29/04/2005, 01:52
Avatar de Nombela  
Fecha de Ingreso: abril-2005
Mensajes: 611
Antigüedad: 19 años, 1 mes
Puntos: 1
Gracias

Al final consegui la consulta a base de pelearme con la sql. El problema que tengo ahora es que la consulta me devuelve esto:

ServNombr TipoNombre UsId
Lan/Wan Alcobendas Lan/Wan 3
Lan/Wan Valdemoro Lan/Wan 39
Lan/Wan Valdemoro Lan/Wan 3
Lan/Wan Pozuelo Lan/Wan 3
Seguridad Valdemoro Seguridad 39
Seguridad Pozuelo Seguridad 3
Wifi Pozuelo Wifi 3

Y me gustaria que los Lan/Wan Valdemoro como son iguales, que solo me saliera uno. Yo tenia entendido que con la sentencia distinct valia pero la probe y no rula.

Gracias por la ayuda compadre
  #8 (permalink)  
Antiguo 29/04/2005, 02:06
Avatar de Jose_minglein2  
Fecha de Ingreso: noviembre-2004
Mensajes: 2.344
Antigüedad: 19 años, 5 meses
Puntos: 8
El distinct solo puedes agregar un campo, para lo que tu quieres debes hacer un group by. Si pones como ha quedado tu SQL te digo exactamente como ponerlo.

PD: SQL es muy potente y normalmente no se utiliza todo su potencial. Te recomiendo (bueno a todos) que si hago se puede hacer via SQL, hacerlo y no andarse luego con tratamiento de codigo. Tu aplicación será más limpia, aunque sólo es una opinión.
  #9 (permalink)  
Antiguo 29/04/2005, 02:21
Avatar de Nombela  
Fecha de Ingreso: abril-2005
Mensajes: 611
Antigüedad: 19 años, 1 mes
Puntos: 1
Te doy la razon

Estoy de acuerdo contigo la verdad de echo creo que falta un canal aqui en el foro de sql xq es valido para muchos lenguajes de programacion y como dices hace mas limpio el codigo.

Yo las sql las suelo hacer con el asistente de access de ahi ke me salgan mal largas pero no me dan problemas de ralentizacion la verdad.

Mira mi sql es esta:

SELECT DISTINCT Servicios.ServNombre, TipoServicio.TipoNombre, Usuarios.UsId FROM (Clientes INNER JOIN Usuarios ON Clientes.UsIdCli = Usuarios.UsIdCli) INNER JOIN (TipoServicio INNER JOIN (Servicios INNER JOIN UsuariosServicios ON Servicios.ServId = UsuariosServicios.UsServIdServ) ON TipoServicio.TipoId = Servicios.ServIdTipo) ON Usuarios.UsId = UsuariosServicios.UsServIdUs WHERE (((Clientes.UsIdCli)=2));
  #10 (permalink)  
Antiguo 29/04/2005, 02:49
Avatar de Jose_minglein2  
Fecha de Ingreso: noviembre-2004
Mensajes: 2.344
Antigüedad: 19 años, 5 meses
Puntos: 8
Yo lo que hago es abreviar el nombre de las tablas para que no salga tan largo, es decir p.ej.

Select S.ServNombre From Servicios S

Con esto se reduce un montón el string, te recomiendo que si Access te lo permite, lo utilices.

Con respecto a tu problema, primero el distinct tienes que decir que distinct(ServNombre)

Veo también que al final solo estás cogiendo los que SI están concatenados, no?? los otros ya no los necesitas???

Segundo, si quieres mostrar solo p.ej. Lan/Wan Valdemoro, ten en cuenta, que vas a perder uno de los 2 valores de UsId, normalmente sólo pillará el último, es decir, te quedaría así:

ServNombr TipoNombre UsId
Lan/Wan Alcobendas Lan/Wan 3
Lan/Wan Valdemoro Lan/Wan 3
Lan/Wan Pozuelo Lan/Wan 3
Seguridad Valdemoro Seguridad 39
Seguridad Pozuelo Seguridad 3
Wifi Pozuelo Wifi 3

te quedaría si entiendo bien, lo que quieres hacer podrías hacer esto:

SELECT DISTINCT(concat(Servicios.ServNombre, TipoServicio.TipoNombre)), Servicios.ServNombre, TipoServicio.TipoNombre, Usuarios.UsId FROM (Clientes INNER JOIN Usuarios ON Clientes.UsIdCli = Usuarios.UsIdCli) INNER JOIN (TipoServicio INNER JOIN (Servicios INNER JOIN UsuariosServicios ON Servicios.ServId = UsuariosServicios.UsServIdServ) ON TipoServicio.TipoId = Servicios.ServIdTipo) ON Usuarios.UsId = UsuariosServicios.UsServIdUs WHERE (((Clientes.UsIdCli)=2));


con esto sólamente te saldrán una vez, pero como te digo perderás valores
  #11 (permalink)  
Antiguo 29/04/2005, 02:58
Avatar de Nombela  
Fecha de Ingreso: abril-2005
Mensajes: 611
Antigüedad: 19 años, 1 mes
Puntos: 1
Lo que trato de hacer

Lo que estoy intentantando hacer es que me muestre todos los servicios del cliente ese. Y una vez mostrados todos que salgan seleccionados los del usuario que tengo marcado en un combo.
El problema que me da es que cuando listo con la sql esa todos los servicios pues el lan/wan valdemoro como lo tienen 2 usuarios pues me sale repetido. He puesto el distinct (concact()) pero me dice que no reconoce la palabra concact. Yo uso sql server.
  #12 (permalink)  
Antiguo 29/04/2005, 03:16
Avatar de Jose_minglein2  
Fecha de Ingreso: noviembre-2004
Mensajes: 2.344
Antigüedad: 19 años, 5 meses
Puntos: 8
Ahhhhhhhhh, ok ok ok ok
As probado lo que te he dicho???-> DISTINCT(concat(Servicios.ServNombre, TipoServicio.TipoNombre)), con eso juntará los strings y sólo te mostrará lo que quieres.


Claro que tendrías un problema, si por ejemplo, tienes un ServNombre que fuese
'Lan/WanVal' y un TipoNombre que fuese 'moro' ya que no te lo mostraría, voy a pensar un solución más factible, pero si quieres de momento (y para hacer pruebas) puedes usar ese distinct(concat)
  #13 (permalink)  
Antiguo 29/04/2005, 03:46
Avatar de Jose_minglein2  
Fecha de Ingreso: noviembre-2004
Mensajes: 2.344
Antigüedad: 19 años, 5 meses
Puntos: 8
Porque no haces lo que te dije la otra vez de poner un if y así no concatenas con usuario y no te saldrían repetidos??Es decir:


SELECT S.ServNombre, T.TipoNombre, if(S.ServId in (Select ServIdServ From UsuariosServicios US inner join usuarios U on U.UsId=US.UsServIdUs inner join clientes C on C.UsIdCli=U.UsIdCli where UsServIdServ=" & combodeusuario.selectedvalue &") and C.UsIdCli=2, 1, 0) as COMPRUEBA FROM TipoServicio T INNER JOIN Servicios S on S.ServId=T.ServIdServ
  #14 (permalink)  
Antiguo 29/04/2005, 04:08
Avatar de Nombela  
Fecha de Ingreso: abril-2005
Mensajes: 611
Antigüedad: 19 años, 1 mes
Puntos: 1
esta es mi sql

myCommand = new SqlCommand ("SELECT S.ServNombre, T.TipoNombre, if(S.ServId in (Select ServIdServ From UsuariosServicios US inner join usuarios U on U.UsId=US.UsServIdUs inner join clientes C on C.UsIdCli=U.UsIdCli where UsServIdServ=" + ComboLogin.SelectedItem.Value +") and C.UsIdCli="+Request.QueryString["Id"]+") as COMPRUEBA FROM TipoServicio T INNER JOIN Servicios S on S.ServId=T.ServIdServ",myConnection);

me dice sintaxis incorrecta cerca de la palabra if y sintaxis incorrecta cerca de la palabra as.
  #15 (permalink)  
Antiguo 29/04/2005, 04:13
Avatar de Jose_minglein2  
Fecha de Ingreso: noviembre-2004
Mensajes: 2.344
Antigüedad: 19 años, 5 meses
Puntos: 8
Eso es porque la sintaxis de SqlServer es distinta (la que te pongo es de MYsql) aunque como te dije deberían ser las mismas, data una vuelta por la documentacion de tu SQLServer para ver como se traduciría eso, la cuestión es que si el servicio indexa con el usuario devuelve un 1 en caso contrario un 0, y lo devuelve en la variable COMPRUEBA, pero ya te digo que tendrás que mirar la documentación y ver como se traduciría.
  #16 (permalink)  
Antiguo 29/04/2005, 04:16
Avatar de Nombela  
Fecha de Ingreso: abril-2005
Mensajes: 611
Antigüedad: 19 años, 1 mes
Puntos: 1
Gracias

Gracias tio ahora miro como se traduciria.
Un saludo
  #17 (permalink)  
Antiguo 29/04/2005, 04:23
Avatar de Jose_minglein2  
Fecha de Ingreso: noviembre-2004
Mensajes: 2.344
Antigüedad: 19 años, 5 meses
Puntos: 8
Prueba el if por Iif, y si no tendrás que poner un Case (según he leido por el google)
  #18 (permalink)  
Antiguo 29/04/2005, 04:24
Avatar de Jose_minglein2  
Fecha de Ingreso: noviembre-2004
Mensajes: 2.344
Antigüedad: 19 años, 5 meses
Puntos: 8
Sería algo así
CASE WHEN existencia < 0 THEN 'SI' ELSE 'NO' END

lo del AS si que te lo debería coger, creo que te falta un partentesis antes del AS,

pruebalo y me cuentas
  #19 (permalink)  
Antiguo 29/04/2005, 05:34
Avatar de Nombela  
Fecha de Ingreso: abril-2005
Mensajes: 611
Antigüedad: 19 años, 1 mes
Puntos: 1
Nada

Lo siento macho pero no me aclaro. No veo como va lo del case porque lo del Iid no me lo coge.
  #20 (permalink)  
Antiguo 30/04/2005, 11:55
Avatar de Jose_minglein2  
Fecha de Ingreso: noviembre-2004
Mensajes: 2.344
Antigüedad: 19 años, 5 meses
Puntos: 8
Iid,no he leido Iif, pero como te dije SQLServer (por lo que he ledio) sería con case


SELECT S.ServNombre, T.TipoNombre, case when S.ServId in (Select ServIdServ From UsuariosServicios US inner join usuarios U on U.UsId=US.UsServIdUs inner join clientes C on C.UsIdCli=U.UsIdCli where UsServIdServ=" & combodeusuario.selectedvalue &") and C.UsIdCli=2 then 1 else 0 FROM TipoServicio T INNER JOIN Servicios S on S.ServId=T.ServIdServ
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:56.