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

return valor select c#

Estas en el tema de return valor select c# en el foro de .NET en Foros del Web. Hola a todos, tengo una duda, He creado esta función, que recibe un id numerico, y lo que hace es devolver el valor de la ...
  #1 (permalink)  
Antiguo 07/07/2014, 05:36
 
Fecha de Ingreso: mayo-2013
Mensajes: 34
Antigüedad: 10 años, 11 meses
Puntos: 0
return valor select c#

Hola a todos, tengo una duda,


He creado esta función, que recibe un id numerico, y lo que hace es devolver el valor de la columna, pero solo puedo imprimirlo, si pongo el return fuera del switch no me funciona porque no existe la variable, y si lo pongo dentro no me compila... no sé como puedo conseguir eso.. lo suyo seria guardar los valores de la bbdd (que son rutas y demas) en unas variables globales pero no sé muy bien el como hacerlo..

saludos


Código C:
Ver original
  1. public void leer()
  2.         {
  3.  
  4.             String cadena_de_conexion = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\status\bbdd\status.mdb;";
  5.             OleDbConnection conexion = new OleDbConnection(cadena_de_conexion);
  6.             conexion.Open();
  7.  
  8.             OleDbCommand query = new OleDbCommand("SELECT * FROM config ", conexion);
  9.             OleDbDataReader reader = query.ExecuteReader();
  10.  
  11.             while(reader.Read()){
  12.                 string ruta_bbdd = reader.GetString(1);
  13.  
  14.                 Console.WriteLine(ruta_bbdd);
  15.  
  16.                      
  17.         }
  #2 (permalink)  
Antiguo 07/07/2014, 06:00
Avatar de Malenko
Moderador
 
Fecha de Ingreso: enero-2008
Mensajes: 5.323
Antigüedad: 16 años, 3 meses
Puntos: 606
Respuesta: return valor select c#

No hace falta que sean variables globales, simplemente variables locales en la funcion. El problema es que usas un "while", lo que indica más de un resultado y no tendría que ser así, no?

Yo lo pondría de esta forma (dejando el "bug" del while):

Código C:
Ver original
  1. public string leer()
  2. {
  3.     String ruta_bbdd = String.Empty;
  4.     String cadena_de_conexion = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\status\bbdd\status.mdb;";
  5.     OleDbConnection conexion = new OleDbConnection(cadena_de_conexion);
  6.     conexion.Open();
  7.          
  8.     OleDbCommand query = new OleDbCommand("SELECT * FROM config ", conexion);
  9.     OleDbDataReader reader = query.ExecuteReader();
  10.          
  11.     while(reader.Read()){
  12.         ruta_bbdd = reader.GetString(1);
  13.         Console.WriteLine(ruta_bbdd);
  14.     }
  15.    
  16.     return ruta_bbdd;
  17. }

Lo dicho, el código aún tiene cosas bastante mejorables, como controlar las excepciones, pero supongo que con esto se resuelve tu duda.
__________________
Aviso: No se resuelven dudas por MP!
  #3 (permalink)  
Antiguo 07/07/2014, 06:48
 
Fecha de Ingreso: mayo-2013
Mensajes: 34
Antigüedad: 10 años, 11 meses
Puntos: 0
Respuesta: return valor select c#

Buenas, ya lo intenté pero no me compila me da este error:

Error 2 The name 'ruta_bbdd' does not exist in the current context

Yo he puesto un while porque es la única forma que he conseguido para extraerlo de alguna forma, pero si hay otra forma mejor lo podría cambiar, me es indiferente tener o no el while...

saludos!
  #4 (permalink)  
Antiguo 07/07/2014, 06:55
Avatar de Malenko
Moderador
 
Fecha de Ingreso: enero-2008
Mensajes: 5.323
Antigüedad: 16 años, 3 meses
Puntos: 606
El código que te he puesto te da ese error al compilar?
  #5 (permalink)  
Antiguo 07/07/2014, 07:14
 
Fecha de Ingreso: mayo-2013
Mensajes: 34
Antigüedad: 10 años, 11 meses
Puntos: 0
Respuesta: return valor select c#

fallo mio por no copiar y machacar lo que tenía, funciona muy bien por la primera línea.

pero no me funciona cuando añado un campo y un switch case...

Código C:
Ver original
  1. public string leer(int id) // el id es para devolver la ruta que quiero en ese momento
  2.        {
  3.  
  4.  
  5.     String ruta_bbdd = String.Empty;
  6.     String ruta_backup = String.Empty;
  7.     String cadena_de_conexion = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\status\bbdd\status.mdb;";
  8.     OleDbConnection conexion = new OleDbConnection(cadena_de_conexion);
  9.     conexion.Open();
  10.          
  11.     OleDbCommand query = new OleDbCommand("SELECT * FROM config ", conexion);
  12.     OleDbDataReader reader = query.ExecuteReader();
  13.          
  14.     while(reader.Read()){
  15.         ruta_bbdd = reader.GetString(1);
  16.         ruta_backup = reader.GetString(2);
  17.  
  18.         Console.WriteLine(ruta_bbdd);
  19.     }
  20.     switch (id)
  21.     {
  22.         case 1:
  23.  
  24.             return ruta_bbdd;
  25.  
  26.         case 2:
  27.             return ruta_backup;
  28.  
  29.         default:
  30.             Console.WriteLine("Default case");
  31.             break;
  32.     }


Error: Error 1 'status.config.leer(int)': not all code paths return a value
  #6 (permalink)  
Antiguo 07/07/2014, 07:28
Avatar de Malenko
Moderador
 
Fecha de Ingreso: enero-2008
Mensajes: 5.323
Antigüedad: 16 años, 3 meses
Puntos: 606
Respuesta: return valor select c#

Pues eso, el error es bastante claro: hay casos en que no devuelves nada, es decir, cuando entras en el default del switch. La solución es sencilla, pon un "return String.Empty;" dentro del default.
__________________
Aviso: No se resuelven dudas por MP!
  #7 (permalink)  
Antiguo 07/07/2014, 07:51
 
Fecha de Ingreso: mayo-2013
Mensajes: 34
Antigüedad: 10 años, 11 meses
Puntos: 0
Respuesta: return valor select c#

Genial, tenía sentido...soy bastante novato como puedes ver...

gracias por todo!!

lo que no termino de conseguir es que.. si un campo es entero, como hago para filtrarlo o hacer que lo devuelva, no consigo controlar eso...

un saludo!
  #8 (permalink)  
Antiguo 07/07/2014, 08:05
Avatar de Malenko
Moderador
 
Fecha de Ingreso: enero-2008
Mensajes: 5.323
Antigüedad: 16 años, 3 meses
Puntos: 606
Respuesta: return valor select c#

Si quieres obtener un campo entero de la base de datos puedes usar el GetByte, GetInt16, GetInt32 , ... y usarlo de la misma manera que haces con el GetString.
__________________
Aviso: No se resuelven dudas por MP!
  #9 (permalink)  
Antiguo 07/07/2014, 08:13
 
Fecha de Ingreso: mayo-2013
Mensajes: 34
Antigüedad: 10 años, 11 meses
Puntos: 0
Respuesta: return valor select c#

El problema es que devuelvo un string, el return es sobre un string no un int... y por eso me peta
  #10 (permalink)  
Antiguo 07/07/2014, 09:40
Avatar de Malenko
Moderador
 
Fecha de Ingreso: enero-2008
Mensajes: 5.323
Antigüedad: 16 años, 3 meses
Puntos: 606
Respuesta: return valor select c#

Usa el ToString() para pasar el tipo entero (int) a cadena.
__________________
Aviso: No se resuelven dudas por MP!

Etiquetas: return, select, valor
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 06:51.