Ver Mensaje Individual
  #8 (permalink)  
Antiguo 14/12/2010, 22:31
In3xp3rt0
 
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...