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

Devolver valor de consulta en mysql...

Estas en el tema de Devolver valor de consulta en mysql... en el foro de .NET en Foros del Web. Tengo la necesidad de solicitar un valor de retorno de una consulta hecha a una base de datos en mysql... la consulta es la siguiente: ...
  #1 (permalink)  
Antiguo 09/12/2010, 12:19
 
Fecha de Ingreso: noviembre-2003
Mensajes: 403
Antigüedad: 20 años, 5 meses
Puntos: 4
Devolver valor de consulta en mysql...

Tengo la necesidad de solicitar un valor de retorno de una consulta hecha a una base de datos en mysql...

la consulta es la siguiente:
Código MySQL:
Ver original
  1. SELECT count(*) FROM sesion

Esta consulta esta correcta por que en el administrador de mysql retorna el valor que se desea, que debe ser 126

tengo una funcion que creo deberia funcionar para obtener ese valor en un string y usarlo en mi codigo... la funcion es la siguiente...

Previamente se han importado las MySql.Data.MySqlClient
Código vb:
Ver original
  1. 'declaramos la cadena de conexión
  2.    Dim ConStr As String = "server=localhost;User Id=root;password=0231;database=sislacoh;Persist Security Info=True"
  3.     'instanciamos un objeto conexion
  4.    'y le pasamos de parametro la variable con la cadena
  5.    Dim Con As New MySqlConnection(ConStr)
  6.     'creamos la funcion para insertar, Update o delete que devuelve
  7.    ' un valor tipo string (cadena de texto)
  8.    'con un parametro que contendrá la cadena de conexión
  9.    Public Function MiFuncion(ByVal query As String) As String
  10.         'creamos el objeto comando y le pasamos el parámetro que contiene la query y la conexion
  11.        Dim Comando As New MySqlCommand(query, Con)
  12.         'Try para capturar los errores
  13.        Try
  14.             'antes de abrir conexión nos aseguramos que no exista conexión establecida previa
  15.            If Not Con Is Nothing Then Con.Close()
  16.             'abrimos conexión
  17.  
  18.             Con.Open()
  19.             'declaramos la variable de tipo entero que contendrá las filas afectadas y ejecutamos
  20.            'el comando
  21.            Dim res As Integer = Comando.ExecuteNonQuery()
  22.  
  23.             'mandamos como retorno en múmero de filas afectadas
  24.            'pero utilizamos Tostring para pasar el valor de número entero a cadena de texto
  25.            'porque hay que recordar que la función devuelve un valor de tipo string
  26.            Return res.ToString
  27.  
  28.             'capturamos a partir de aquí si hay errores
  29.        Catch ex As Exception
  30.  
  31.             'y si hay errores retornamos el mensaje de error
  32.            Return MsgBox(ex.Message, MsgBoxStyle.Critical)
  33.  
  34.             'y con Finally que es parte de TRY CATCH y END TRY
  35.            'ponemos el código que se ejecutará se produzca o no un error
  36.        Finally
  37.  
  38.             'cerramos la conexión
  39.            Con.Close()
  40.  
  41.             'y esto es muy importante, el objeto comando que habiamos creado
  42.            'lo eliminamos de la memoria
  43.            Comando = Nothing
  44.             'finalizamos la captura de errores
  45.        End Try
  46.  
  47.     End Function

Esta funcion la he usado para ejecutar unos insert o updates y me ha funciona correctamente, lo que indica que si se comunica con la base de datos...

y en este caso la impmente asi
Código vb:
Ver original
  1. Dim valor As String = MiFuncion("SELECT count(*) FROM sesion")

En este caso el resultado que siempre me devuelve es "-1", y no "126" no logro entender... alguna orientacion. o alguna otra forma de hacer esto...

PD.
Uso Vb.net 2008, mysql server 5.1 y Mysql Connector net 6.3.5
  #2 (permalink)  
Antiguo 09/12/2010, 20:58
Avatar de gedarufi  
Fecha de Ingreso: diciembre-2008
Ubicación: Colombia
Mensajes: 540
Antigüedad: 15 años, 4 meses
Puntos: 22
Respuesta: Devolver valor de consulta en mysql...

Lo que debes de hacer es utilizar un DataReader y en lugar de utilizar ExecuteNonQuery debes de utilizar ExecuteReader, quedaria algo asi
Código C#:
Ver original
  1. Public Function MiFuncion(ByVal query As String) As String
  2.         'creamos el objeto comando y le pasamos el parámetro que contiene la query y la conexion
  3.        Dim Comando As New MySqlCommand(query, Con)
  4.        Dim DataReader As MySqlDataReader
  5.  
  6.        'Try para capturar los errores
  7.         Try
  8.             'antes de abrir conexión nos aseguramos que no exista conexión establecida previa
  9.            If Not Con Is Nothing Then Con.Close()
  10.            'abrimos conexión
  11.  
  12.             Con.Open()
  13.             'declaramos la variable de tipo entero que contendrá las filas afectadas y ejecutamos
  14.            'el comando
  15.             DataReader  = Comando.ExecuteReader()
  16.            
  17.             If DataReader.HasRows Then
  18.                    DataReader.Read()
  19.                    Return DataReager.GetInt32(0).ToString()
  20.             End If
  21.  
  22.             'capturamos a partir de aquí si hay errores
  23.        Catch ex As Exception
  24.  
  25.            'y si hay errores retornamos el mensaje de error
  26.             Return MsgBox(ex.Message, MsgBoxStyle.Critical)
  27.  
  28.             'y con Finally que es parte de TRY CATCH y END TRY
  29.            'ponemos el código que se ejecutará se produzca o no un error
  30.         Finally
  31.  
  32.             'cerramos la conexión
  33.            Con.Close()
  34.  
  35.            'y esto es muy importante, el objeto comando que habiamos creado
  36.             'lo eliminamos de la memoria
  37.            Comando = Nothing
  38.            'finalizamos la captura de errores
  39.         End Try
  40.  
  41.     End Function

Puedes poner el Read dentro de un while para sacar varios valores de la DB.

Saludos
  #3 (permalink)  
Antiguo 10/12/2010, 08:50
 
Fecha de Ingreso: junio-2010
Mensajes: 11
Antigüedad: 13 años, 10 meses
Puntos: 0
Respuesta: Devolver valor de consulta en mysql...

Tal y como lo tienes, tu función puede realizar operaciones de insercción, modificación o borrado pero no de consulta.

Cada vez que haces una de estas operaciones haces un "command.ExecuteNonQuery();" pero cuando haces una consulta esto no es así y necesitas un datareader.

Un ejemplo de la recogida de valores de un select:

Cita:
Código c#:
Ver original
  1. String CadenaDeConexion = "Server=xxxx;Database=aluminio;User Id=xxxx;Password=xxxx";
  2.                     MySqlConnection myCnn = new MySqlConnection();
  3.                     myCnn.ConnectionString = CadenaDeConexion;
  4.                     MySqlDataReader Reader;
  5.                     myCnn.Open();
  6.                     MySqlCommand command = myCnn.CreateCommand();
  7.                     string consulta = "";
  8.  
  9.                     consulta = "SELECT count(id) ";
  10.                     consulta += "FROM tbalmacen INNER JOIN tbperfil ";
  11.                     consulta += "ON tbalmacen.idBarra = tbperfil.idBarra ";
  12.                     consulta += "WHERE (perfil like '";
  13.                     consulta += comboBox1.Text.ToString();
  14.                     consulta += "')";
  15.                     command.CommandText = consulta;
  16.                     Reader = command.ExecuteReader();
  17.                     string sResultado = "";
  18.                     while (Reader.Read())
  19.                     {
  20.                         for (int i = 0; i < Reader.FieldCount; i++)
  21.                             sResultado += Reader.GetValue(i).ToString();
  22.  
  23.                     }
  24.                     Reader.Close();
  25.                     myCnn.Close();
Ahora bien a la hora de realizar tu funcion además de tener en cuenta si estás realizando una consulta... deberás tener en cuenta otros factores como el numero de registros que vas a obtener así como cuantas tuplas (las columnas) vas a sacar en la consulta.
  #4 (permalink)  
Antiguo 14/12/2010, 13:51
 
Fecha de Ingreso: noviembre-2003
Mensajes: 403
Antigüedad: 20 años, 5 meses
Puntos: 4
Respuesta: Devolver valor de consulta en mysql...

Ok, muchisimas gracias... y otra pregunta similar a esta, y si mi consulta fuera a arrojar varias columnas, pero SOLO una fila... como podria recuperar el valor de cada columna..
  #5 (permalink)  
Antiguo 14/12/2010, 15:42
Avatar de gedarufi  
Fecha de Ingreso: diciembre-2008
Ubicación: Colombia
Mensajes: 540
Antigüedad: 15 años, 4 meses
Puntos: 22
Respuesta: Devolver valor de consulta en mysql...

cambiando el indice al momento de llamar el metodo get del DataReader de esta manera.

Data.GetValue(<indice de la columna>);

Saludos
  #6 (permalink)  
Antiguo 14/12/2010, 15:53
 
Fecha de Ingreso: noviembre-2003
Mensajes: 403
Antigüedad: 20 años, 5 meses
Puntos: 4
Respuesta: Devolver valor de consulta en mysql...

Podrias darme ser un poco mas claro, digamos que la consulta sea
Código SQL:
Ver original
  1. SELECT nombre, apellido, cedula FROM alumnos WHERE WHERE idalumno = '1'
  #7 (permalink)  
Antiguo 14/12/2010, 16:02
Avatar de gedarufi  
Fecha de Ingreso: diciembre-2008
Ubicación: Colombia
Mensajes: 540
Antigüedad: 15 años, 4 meses
Puntos: 22
Respuesta: Devolver valor de consulta en mysql...

Seria algo asi

Código C#:
Ver original
  1. String nombre = Data.GetString(0);
  2. String apellido = Data.GetString(1);
  3. int cedula = Data.GetInt32(2);

Puedes modificarlo de acuerdo al tipo de dato que vas a traer de la DB y a las columnas que traigas.

Saludos
  #8 (permalink)  
Antiguo 14/12/2010, 22:31
 
Fecha de Ingreso: diciembre-2010
Ubicación: México
Mensajes: 3
Antigüedad: 13 años, 4 meses
Puntos: 0
Respuesta: Devolver valor de consulta en mysql...

Cita:
Iniciado por Pax-Man Ver Mensaje
Tengo la necesidad de solicitar un valor de retorno de una consulta hecha a una base de datos en mysql...

la consulta es la siguiente:
Código MySQL:
Ver original
  1. SELECT count(*) FROM sesion

Esta consulta esta correcta por que en el administrador de mysql retorna el valor que se desea, que debe ser 126

tengo una funcion que creo deberia funcionar para obtener ese valor en un string y usarlo en mi codigo... la funcion es la siguiente...

Previamente se han importado las MySql.Data.MySqlClient
Código vb:
Ver original
  1. 'declaramos la cadena de conexión
  2.    Dim ConStr As String = "server=localhost;User Id=root;password=0231;database=sislacoh;Persist Security Info=True"
  3.     'instanciamos un objeto conexion
  4.    'y le pasamos de parametro la variable con la cadena
  5.    Dim Con As New MySqlConnection(ConStr)
  6.     'creamos la funcion para insertar, Update o delete que devuelve
  7.    ' un valor tipo string (cadena de texto)
  8.    'con un parametro que contendrá la cadena de conexión
  9.    Public Function MiFuncion(ByVal query As String) As String
  10.         'creamos el objeto comando y le pasamos el parámetro que contiene la query y la conexion
  11.        Dim Comando As New MySqlCommand(query, Con)
  12.         'Try para capturar los errores
  13.        Try
  14.             'antes de abrir conexión nos aseguramos que no exista conexión establecida previa
  15.            If Not Con Is Nothing Then Con.Close()
  16.             'abrimos conexión
  17.  
  18.             Con.Open()
  19.             'declaramos la variable de tipo entero que contendrá las filas afectadas y ejecutamos
  20.            'el comando
  21.            Dim res As Integer = Comando.ExecuteNonQuery()
  22.  
  23.             'mandamos como retorno en múmero de filas afectadas
  24.            'pero utilizamos Tostring para pasar el valor de número entero a cadena de texto
  25.            'porque hay que recordar que la función devuelve un valor de tipo string
  26.            Return res.ToString
  27.  
  28.             'capturamos a partir de aquí si hay errores
  29.        Catch ex As Exception
  30.  
  31.             'y si hay errores retornamos el mensaje de error
  32.            Return MsgBox(ex.Message, MsgBoxStyle.Critical)
  33.  
  34.             'y con Finally que es parte de TRY CATCH y END TRY
  35.            'ponemos el código que se ejecutará se produzca o no un error
  36.        Finally
  37.  
  38.             'cerramos la conexión
  39.            Con.Close()
  40.  
  41.             'y esto es muy importante, el objeto comando que habiamos creado
  42.            'lo eliminamos de la memoria
  43.            Comando = Nothing
  44.             'finalizamos la captura de errores
  45.        End Try
  46.  
  47.     End Function

Esta funcion la he usado para ejecutar unos insert o updates y me ha funciona correctamente, lo que indica que si se comunica con la base de datos...

y en este caso la impmente asi
Código vb:
Ver original
  1. Dim valor As String = MiFuncion("SELECT count(*) FROM sesion")

En este caso el resultado que siempre me devuelve es "-1", y no "126" no logro entender... alguna orientacion. o alguna otra forma de hacer esto...

PD.
Uso Vb.net 2008, mysql server 5.1 y Mysql Connector net 6.3.5



Buenas noches, acabo de registraría en el foro y no pude evitar ver este tema ya que hace poco me tope con la misma interrogante. Acabo de empezar a programar en .net.

El que cada vez que ejecutes una consulta con el método .ExecuteNonQuery() va a retornar efectivamente un numero, no necesariamente relacionado con tu consulta sino como un tipo flag o bandera que te indica el resultado de la ejecución de esa consulta.

Para ejecutar consultas del estilo que tu requieres, que solamente te devuelvan un solo valor, utiliza el método .ExecuteScalar() que esta diseñado para esas situaciones. Para mas información o referencia puedes consultar Google o directamente el manual de referencia en la pagina de mysql. Saludos...
  #9 (permalink)  
Antiguo 15/12/2010, 14:38
 
Fecha de Ingreso: noviembre-2003
Mensajes: 403
Antigüedad: 20 años, 5 meses
Puntos: 4
Respuesta: Devolver valor de consulta en mysql...

Al final para devolver todos los registros de una fila, usamos esto...
Código vb:
Ver original
  1. Sub consultaroficial(ByRef idoficial As String)
  2.  
  3.         Dim Comando As New MySqlCommand("SELECT cedula,Nombre,Apellido,idComponente,idRango,instructor FROM oficiales where idoficial = '" & idoficial & "'", Con)
  4.  
  5.         'Try para capturar los errores
  6.        Try
  7.             'antes de abrir conexión nos aseguramos que no exista conexión establecida previa
  8.            If Not Con Is Nothing Then Con.Close()
  9.             'abrimos conexión
  10.  
  11.             Con.Open()
  12.             'declaramos la variable de tipo entero que contendrá las filas afectadas y ejecutamos
  13.            'el comando
  14.            Dim reader As MySqlDataReader = Comando.ExecuteReader
  15.  
  16.             If reader.Read Then
  17.                 editar_alumno.TextBox3.Text = Trim(reader("cedula"))
  18.                 editar_alumno.TextBox1.Text = Trim(reader("Nombre"))
  19.                 editar_alumno.TextBox2.Text = Trim(reader("Apellido"))
  20.                 editar_alumno.ComboBox2.SelectedValue = CInt(reader("idComponente"))
  21.                 editar_alumno.ComboBox3.SelectedValue = CInt(reader("idRango"))
  22.                 If reader("Instructor") = "1" Then
  23.                     editar_alumno.CheckBox1.CheckState = CheckState.Checked
  24.                 Else
  25.                     editar_alumno.CheckBox1.CheckState = CheckState.Unchecked
  26.                 End If
  27.             End If
  28.             'mandamos como retorno en múmero de filas afectadas
  29.            'pero utilizamos Tostring para pasar el valor de número entero a cadena de texto
  30.            'porque hay que recordar que la función devuelve un valor de tipo string
  31.  
  32.  
  33.             'capturamos a partir de aquí si hay errores
  34.        Catch ex As Exception
  35.  
  36.             'y si hay errores retornamos el mensaje de error
  37.            MsgBox(ex.Message, MsgBoxStyle.Critical)
  38.  
  39.             'y con Finally que es parte de TRY CATCH y END TRY
  40.            'ponemos el código que se ejecutará se produzca o no un error
  41.        Finally
  42.  
  43.             'cerramos la conexión
  44.            Con.Close()
  45.  
  46.             'y esto es muy importante, el objeto comando que habiamos creado
  47.            'lo eliminamos de la memoria
  48.            Comando = Nothing
  49.             'finalizamos la captura de errores
  50.        End Try
  51.  
  52.  
  53.     End Sub

Muchas gracias por la ayuda...
  #10 (permalink)  
Antiguo 15/12/2010, 14:39
 
Fecha de Ingreso: noviembre-2003
Mensajes: 403
Antigüedad: 20 años, 5 meses
Puntos: 4
Respuesta: Devolver valor de consulta en mysql...

Cita:
Iniciado por Pax-Man Ver Mensaje
Al final para devolver todos los registros de una fila, usamos esto...
Código vb:
Ver original
  1. Sub consultaroficial(ByRef idoficial As String)
  2.  
  3.         Dim Comando As New MySqlCommand("SELECT cedula,Nombre,Apellido,instructor FROM oficiales where idoficial = '" & idoficial & "'", Con)
  4.  
  5.         'Try para capturar los errores
  6.        Try
  7.             'antes de abrir conexión nos aseguramos que no exista conexión establecida previa
  8.            If Not Con Is Nothing Then Con.Close()
  9.             'abrimos conexión
  10.  
  11.             Con.Open()
  12.             'declaramos la variable de tipo entero que contendrá las filas afectadas y ejecutamos
  13.            'el comando
  14.            Dim reader As MySqlDataReader = Comando.ExecuteReader
  15.  
  16.             If reader.Read Then
  17.                 editar_alumno.TextBox3.Text = Trim(reader("cedula"))
  18.                 editar_alumno.TextBox1.Text = Trim(reader("Nombre"))
  19.                 editar_alumno.TextBox2.Text = Trim(reader("Apellido"))
  20.                 If reader("Instructor") = "1" Then
  21.                     editar_alumno.CheckBox1.CheckState = CheckState.Checked
  22.                 Else
  23.                     editar_alumno.CheckBox1.CheckState = CheckState.Unchecked
  24.                 End If
  25.             End If
  26.             'mandamos como retorno en múmero de filas afectadas
  27.            'pero utilizamos Tostring para pasar el valor de número entero a cadena de texto
  28.            'porque hay que recordar que la función devuelve un valor de tipo string
  29.  
  30.  
  31.             'capturamos a partir de aquí si hay errores
  32.        Catch ex As Exception
  33.  
  34.             'y si hay errores retornamos el mensaje de error
  35.            MsgBox(ex.Message, MsgBoxStyle.Critical)
  36.  
  37.             'y con Finally que es parte de TRY CATCH y END TRY
  38.            'ponemos el código que se ejecutará se produzca o no un error
  39.        Finally
  40.  
  41.             'cerramos la conexión
  42.            Con.Close()
  43.  
  44.             'y esto es muy importante, el objeto comando que habiamos creado
  45.            'lo eliminamos de la memoria
  46.            Comando = Nothing
  47.             'finalizamos la captura de errores
  48.        End Try
  49.  
  50.  
  51.     End Sub

Muchas gracias por la ayuda...

Etiquetas: devolver, mysql
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 19:12.