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
- Declaramos una variable con la cadena de conexión.
- Declaramos un objeto MysqlConection y le pasamos como parámetro la variable de cadena.
- 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ó.)
- 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)
- Creamos un objeto Dataset (Es donde se guardan los datos resultantes de la query), un objeto DataRow (Representa cada fila con los datos)
- Llenamos el Dataset con el método Fill() del DataAdapter pasando como parametro el Dataset a llenar.
- 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







acabo de checar lo que pusiste, lo boy a checar sale se ve interesantes.
gracias.
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)”
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.
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.
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.
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!!
Se me hace dificil que se muestre en textbox los datos de los campos porque los campos pueden se demasiados.
Precisamente este post lo explica, si copias la función de arriba solo le pasas de parametro el textbox y listo.
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
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..
Gracias!!
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
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
????
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
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…
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.
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.
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.
Utiliza SqlYog, es una herramienta gratuita para administrar bases de datos de manera visual.
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……….
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.
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
Erick:
Si usas Reader=Nothing estas eliminando el reader de memoria y por eso te da error.
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…
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 …”)
“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!