Obtener datos desde mysql con Visual Basic 2005 o 2008 y volcarlos a un control o variable

Escrito en Diciembre 10, 2008 por Alex

Para obtener datos desde mysql y volcarlos a una o varias variables o controles hacemos lo siguiente:

Para facilitar las cosas vamos a hacerlo todo desde un formulario sin crear una nueva clase.
En el anterior post está la manera de crear la cadena de conexión, hacer la referencia etc. Pero aquí resumo algo.

Comenzamos con agregar la referencia al conector mysql.data, después importamos los espacios de nombres al comienzo del código:

 
Imports System.Data
Imports MySql.Data.MySqlClient

 

  1. Declaramos una variable con la cadena de conexión.
  2. Declaramos un objeto MysqlConection y le pasamos como parámetro la variable de cadena.
  3. Creamos una función que en este caso llamaremos “LeerDatos” con dos parámetros llamados Sql de tipo cadena y el otro será un array de parámetros llamado Control del tipo control.(La función devuelve verdadero si se logró la consulta y falso si no se logró.)
  4. Dentro de la función declaramos un objeto del tipo MysqlDataAdapter y le pasamos como parámetros la variable que contiene la query de mysql y la variable que contiene la cadena de conexión (Esto hace que se abra la conexión de manera implícita, es decir, sin que lo digamos con el método open() y se cierra cuando ya no es necesaria sin necesidad del método close(), aunque lo recomendable es hacerlo de manera explícita indicando ambos métodos)
  5. Creamos un objeto Dataset (Es donde se guardan los datos resultantes de la query), un objeto DataRow (Representa cada fila con los datos)
  6. Llenamos el Dataset con el método Fill() del DataAdapter pasando como parametro el Dataset a llenar.
  7. Con un ciclo For llenamos los controles que sean necesarios.

 

 Así queda el código: 

Public Class Form1
    'variable que contiene la cadena de conexion
    Dim ConStr As String 
ConStr = "server=localhost;uid=user;password=mipass;database=alumnos"
 
    'crear objeto conexión
    Dim Con As New MySqlConnection(ConStr)
 
    'Funcion LeerDatos
    Private Function LeerDatos(ByVal sql As String, _
ByVal ParamArray Control() As Control) As Boolean
 
        'abrimos conexion explicitamente
        Con.Open()
 
        'objeto dataadapter
        Dim Da As New MySqlDataAdapter(sql, ConStr)
        'objeto dataset
        Dim Ds As New DataSet()
        'objeto de tipo fila
        Dim Row As DataRow
 
        Try
            'llenar dataset
            Da.Fill(Ds)
            'cerramos conexión explicitamente
            Con.Close()
 
            ' instanciar y llenar
            'por cada fila en las filas que contiene la tabla
            For Each Row In Ds.Tables(0).Rows
                'por cada control pasado como parametro en el array 
                For i As Integer = 0 To Control.Length - 1
                    'asignamos a su propiedad Text el dato
                    Control(i).Text = Row(i).ToString
                Next
            Next
 
            'devuelve verdadero si logró llegar aquí
            Return True
 
        Catch ex As Exception
            'si hubo error devuelve falso
            Return False
 
        Finally
            'finalmente elimina objetos de memoria y cerramos conexión
            'en caso de que este abierta
            Ds = Nothing
            Da = Nothing
            Row = Nothing
            If Not Con Is Nothing Then Con.Close()
 
        End Try
 
    End Function
 
End Class

 

Para usar la función, en el formulario colocamos un botón, en este caso 4 textbox para mostrar ahi los datos y un label que servirá para mostrar si fue exitoso el resultado.

Private Sub bLlenar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _
Handles bLlenar.Click
        ‘variable que contendra verdadero o falso
        ‘dependiendo si se leyeron los datos o hubo error
        ‘Esta variable es opcional
        Dim res As Boolean
        ’si queremos saber el resultado de la operacion asignamos la
        ‘funcion a la variable, si no la ponemos sin variable
        res = LeerDatos(select nombre,apellido1,calificacion from alumnos where id=& TextBox1.Text.Trim, TextBox2, TextBox3, TextBox4)
        ’si se asigno variable, asignamos el resultado a el label
        Label1.Text = res.ToString
    End Sub

 
 

Al pulsar el botón nos muestra en los textbox los campos de Nombre, Apellido y calificación de una base de datos que contiene la base de datos alumnos buscando el Id del alumno tecleado en el textbox1 que con el método trim elimina los espacios sobrantes al principio y al final.

El array de parámetros que tiene la función nos sirve para utilizar los controles necesarios en base a la consulta que hicimos. Por ejemplo: En esta consulta necesitamos tres datos, por lo tanto, necesitamos tres controles. Si se quisieran guardar en variables en vez de controles solo es necesario cambiar el tipo de dato que es “control” por “string”

Private Function LeerDatos(ByVal sql As String, ByVal ParamArray Dato() As String) _
 As Boolean
        ”’
        ”’
    End Function

Si te gusto este artículo Suscribete a nuestro feed

26 Comentarios en “Obtener datos desde mysql con Visual Basic 2005 o 2008 y volcarlos a un control o variable”

  1. dantors |

    acabo de checar lo que pusiste, lo boy a checar sale se ve interesantes.

    gracias.

  2. dantors |

    gracias por tu ayuda, la informacion que me has brindado me ha servido de mucho…

    ahora estoy poniendo en practica todo lo aprendido aqui…estoy haciendo una aplicacion para windows “un punto de venta espero y me salga.

    por el momento te envio un saludo y mil gracias.

    feliz navidad y prospero año nuevo

    Daniel Torres (Dantors)”

  3. ingelm |

    hermano tendras algo similar a esto pero con access, lo que yo quiero es tener una base de datos en access digamos una agenda, y que al seleccionar el nombre de un listbox se muestre el resto de la informacion (telefono,direccion, etc) en unos label.

    salud y gracias de antemano.

  4. Alex |

    No he puesto nada con access porque en realidad hay mucha información ya de esto en varios sitios.
    Pero te pongo este enlace de la página de Microsoft que explica lo que necesitas.
    De todas maneras si no es entendible o tienes dudas me dices y subo un ejemplo.

    http://support.microsoft.com/kb/821765/es

    Saludos.

  5. Trinidad |

    Esta muy bien tu articulo
    soy un aprendis de visual y quisiera saber si me pudieras ayudar a mostrar los los registros de una tabla de mysql en textbox cada campo correspondiente de la tabla en cada textbox esparo tu respusta gracias
    que estes bien.

  6. elMoy |

    Excelente trabajo el que as hecho, yo tabién necesito poner un resultado de mi base de datos en mysql en un textbox, no en un data grid, a gradesco tu tiempo Saludos!!

  7. Alex |

    Se me hace dificil que se muestre en textbox los datos de los campos porque los campos pueden se demasiados.

  8. Alex |

    Precisamente este post lo explica, si copias la función de arriba solo le pasas de parametro el textbox y listo.

  9. Trinidad |

    Hola Alex gracias por tu respuesta y con respecto a los son pocos los que quiero mostrar si acaso son 6
    deantemano gracias saludos y que estes bien

  10. Alex |

    Trinidad:
    Con esta funcion que se encuentra en este post puedes hacerlo, si puedes notar la funcion tiene un array de parámetro, el array de parametro especifica que le puedes meter cuantos controles quieras.

    Private Function LeerDatos(ByVal sql As String, _
    ByVal ParamArray Control() As Control) As Boolean

    para usar la función como lo indica el post, pero solo que le agregas los controles necesarios, al ser un array de controles le pasas los que necesites en el orden que tengas los campos.

    res = LeerDatos(“select nombre,apellido1,calificacion from alumnos where id=” & TextBox1.Text.Trim, TextBox2, TextBox3, TextBox4)

    Saludos..

  11. elMoy |

    Gracias!!

  12. Trinidad |

    Alex gracias de nuevo por tu ayuda mira aqui te mando el codigo del pequeño porgrama que estoy haciendo
    Private Sub btnmostrar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnmostrar.Click
    Dim cnn As New MySqlConnection
    Dim cmd As New MySqlCommand
    Dim da As New MySqlDataAdapter
    Dim ds As New DataSet
    cnn.ConnectionString = “server=Localhost;Database=direccion;Uid=root”

    cnn.Open()
    cmd.Connection = cnn
    cmd.CommandText = “select * from agenda ”
    da.SelectCommand = cmd
    da.Fill(ds)
    Actualizar()
    Private Sub Actualizar()
    TextBox2.Text = CStr(dt.Rows(intfila)(”Nonbre”)) Aqui me muestra el error al cargar los datos al textbox
    TextBox3.Text = CStr(dt.Rows(intfila)(”Apellido”))
    TextBox4.Text = CStr(dt.Rows(intfila)(”Direccion”))
    TextBox5.Text = CStr(dt.Rows(intfila)(”Ciudad”))
    TextBox6.Text = CStr(dt.Rows(intfila)(”Telefono”))

    End Sub

    haber si me puedes echar la mano gracias y que tengas buen dia

  13. Alex |

    Trinidad: Que objeto es el “dt”???

    porque que yo vea el objeto que tiene los datos es el dataset (ds) pero tu utilizas el dt

    ????

  14. Trinidad |

    Ok en objeto dt lo declare de tipo DataTable
    estas son las otras variavles que declare como publicas
    Dim intfila As Integer
    Dim dt As DataTable
    Dim cnn As String
    Gracias alex por tu apoyo saludos

  15. Alex |

    Trinidad: Porqué no tomas el ejemplo de arriba, Ahí no uso el DataTable sino una función a la cual le pasas la variable tipo textbox…

  16. Yanet |

    Necesito saber como puedo tener el listado de los nombres de todas las bases de datos que se encuentran en un servidor cualquiera de MYSQL. O sea, yo a la hora de conectarme no especifico la BD pues no se cuales voy a tener. Si me podrían ayudar se lo agradecería.

  17. Alex |

    Janet:
    Es muy sencillo, con solo ejecutar la query show databases, pero te dejo una función que puedes copiar:

    El databaseList es un control de tipo ComboBox.

    Private Sub GetDatabases()
    Dim reader As MySqlDataReader
    reader = Nothing

    Dim cmd As New MySqlCommand(”SHOW DATABASES”, con)
    Try
    reader = cmd.ExecuteReader()
    databaseList.Items.Clear()

    While (reader.Read())
    databaseList.Items.Add(reader.GetString(0))
    End While
    Catch ex As MySqlException
    MessageBox.Show(”Falló la recuperación de la lista de Bases de Datos: ” + ex.Message)
    Finally
    If Not reader Is Nothing Then reader.Close()
    End Try

    End Sub

    Cualquier duda comentar.

  18. Edwin |

    hola alex, mira tengo una consulta ojala me ayudes, tengo una base de datos llamada BDD , kiero hacer una copia exacta de la base de datos pero con distinto nombre BDD_1, trabajo con vb2005 y Mysql , seria de gran ayuda una guia que me des, ando perdido saludos desde Ya.

  19. Alex |

    Utiliza SqlYog, es una herramienta gratuita para administrar bases de datos de manera visual.

  20. Eduardo |

    hola a todos quisiera saber si me pueden a yudar con vb y mysql, ya me logre conectar usando el conector net.6.2.2 pero quiero hacer lo siguiente.
    en mi formulario tengo 3 textbox, codigo, nombre ,apellido, y un boton. lo que quiero es ingresar el codigo y al hacer clik en el boton que me muestre el nombre y apellido correspondientes al codigo en la cual estan almacenados en la base de datos

    les agradeceria me puedan ayudar……….

  21. miguel |

    hola a alex quisiera ver que posibilidad hay de que me muestres un ejemplo de como realizar una busqueda en mysql y mostarla en unos texbox en visual vasic .net. quiero que la consulta se realize por nombre mi tabla tiene los campos id, nombre, telefono, email.

  22. Erick |

    utilice este codigo pero me bota error en reader = cmd.ExecuteReader()
    cuando lo corro

    Private Sub GetDatabases()
    Dim reader As MySqlDataReader
    reader = Nothing

    Dim cmd As New MySqlCommand(”SHOW DATABASES”, con)
    Try
    reader = cmd.ExecuteReader()
    databaseList.Items.Clear()

    While (reader.Read())
    databaseList.Items.Add(reader.GetString(0))
    End While
    Catch ex As MySqlException
    MessageBox.Show(”Falló la recuperación de la lista de Bases de Datos: ” + ex.Message)
    Finally
    If Not reader Is Nothing Then reader.Close()
    End Try

    End Sub

  23. Alex |

    Erick:
    Si usas Reader=Nothing estas eliminando el reader de memoria y por eso te da error.

  24. José Medina López |

    Que tal, saludos, buenos si me puedes ayudar, lo que pasa es que qiero poner mi cadena de conexion en una clase creada y luego poder llamar mi cadena de conexion desde otro formulario…. Es de urgencia…

  25. Alex |

    Jo´se Medina:
    Pues la cadena ponla como variable string friend o public.

    Te recomiendo que crees una clase donde pongas la acdena como private y desde esa clase construyas funciones friend o public.
    elemplo:
    La case se llama Conexion
    Class Conexion
    Dim Cadena as String=”cadena conexion”

    friend function Insertar(SQL as string) as integer}
    ‘aqui usas la cadena
    Aqui haces el insert
    End Function
    End Class

    Y desde fuera declaras:

    Dim Miconexion as conexion

    miconexion.insertar(”INSERT …”)

  26. Hernan |

    “TextBox2.Text = CStr(dt.Rows(intfila)(”Nonbre”)) Aqui me muestra el error al cargar los datos al textbox”
    El eror q tenes no sera que has puesto mal Nombre, porque en ese lugar has escrito Nonbre. Fijate si no es eso… Suerte!

Escribe un comentario