¿Consultar a mysql y mostrar en un listbox MS Visual Basic?

publicado por: Anonymous

Cordial saludo compañeros, Resulta que tengo una base de datos llamada cotización, un formulario en MS Visual Basic con un listbox y un botón llamado consultar. lo que quiero hacer es, por medio del botón consultar, mostrar en el listbox la información que esta en la base de datos. Para conectar la aplicación con mi base de datos use el siguiente codigo en un modulo, creando la siguiente función:

Imports MySql.Data.MySqlClient
Module conexion
    'En este bloque esta el metodo o funcion para conectar con la base de datos
    Public Function conectar()

        Try
            Dim conexion As New MySqlConnectionStringBuilder()
            conexion.Server = "localhost"
            conexion.UserID = "root"
            conexion.Password = ""
            conexion.Database = "cotizacion"

            Dim con As New MySqlConnection(conexion.ToString())
            con.Open()
            MsgBox("La conexion se realizo correctamente", 64)
        Catch ex As Exception
            MsgBox("No se pudo conectar", 48)
        End Try


        Return 0
    End Function

Conecta perfectamente con la función creada, la función la llame en el load del formulario.

Intente realizar la consulta, y mostrarla en el listbox por medio del botón de la siguiente manera:

Imports MySql.Data.MySqlClient
Public Class Form1
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        conectar()
    End Sub

    Private Sub btnconsultar_Click(sender As Object, e As EventArgs) Handles btnconsultar.Click

        Dim sql As String = " SELECT nombre_estudio FROM estudios'"
        Dim comando As New MySqlCommand(sql)
        Dim resultado As MySqlDataReader

        resultado = comando.ExecuteReader
        listestudios.Items.Add(resultado)

    End Sub
End Class

Pero me genera un error, ¿como podría hacerlo correctamente?

solución

Estas teniendo una confusion en lo que estas haciendo.

Que hayas logrado conectarte a la DB, aunque es un paso muy grande, no implica que tu programa sepa por todos lados que conexion usar. Podrias por ejemplo, tener mas de una conexion a varias DB distintas.

Entonces, en tu programa la funcion conectar, efectivamente crea una conexion, la abre… e inmediatamente la cierra, porque la funcion no devuelve el objeto que se conecto, que es quien efectivamente sabe como hablar con esa DB.

El objeto command, ademas, requiere saber que conexion usar, la cual le dice especificamente a que DB debe conectarse.

Entonces probemos con estos cambios:

Public Function conectar() as MySqlConnection
    Try
        Dim conexion As New MySqlConnectionStringBuilder()
        conexion.Server = "localhost"
        conexion.UserID = "root"
        conexion.Password = ""
        conexion.Database = "cotizacion"

        Dim con As New MySqlConnection(conexion.ToString())
        con.Open()
        MsgBox("La conexion se realizo correctamente", 64)
        Return con
    Catch ex As Exception
        MsgBox("No se pudo conectar", 48)
        Return nothing
    End Try

Esta funcion, ahora devuelve una conexion abierta. IMPORTANTE, recuerda cerrarla despues de cada vez que la uses.

y ahora en la otra funcion, hagamos algo asi:

Private Sub btnconsultar_Click(sender As Object, e As EventArgs) Handles btnconsultar.Click
    Dim con As MySqlConnection
    con = conectar()
    'Aca deberias verificar si efectivamente te devolvio una conexion abierta
    Dim sql As String = " SELECT nombre_estudio FROM estudios"
    Dim comando As New MySqlCommand(sql)
    comando.Connection = con
    Dim resultado As MySqlDataReader

    resultado = comando.ExecuteReader
    listestudios.Items.Add(resultado)
    'RECUERDA CERRAR LA CONEXION!
End Sub

Ahora tu comando deberia saber que conexion usar.

Respondido por: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *