Llenar un DataGrid con Mysql en Visual basic.net
Escrito en Diciembre 10, 2008 por Alex
Para llenar un control DataGrid con datos de mySql necesitamos en un formulario insertar el DataGrid y un botón de comando.
Como siempre hacemos la referencia al archivo MySql.data que es el conector de MySql para .net y que lo pueden descargar desde la página de mySql o desde el enlace que esta en este post.
Una vez realizada la referencia, importamos los espacios de nombre necesarios en la sección de declaraciones generales.
Imports System.Data Imports MySql.Data Imports MySql.Data.MySqlClient
Creamos una variable de tipo String con la cadena de conexión. Dentro del evento click del botón creamos un objeto del tipo MysqlConection pasándole como parámetro la variable String de conexión, un objeto del tipo Dataset, un objeto DataTable donde se guardará la tabla con los datos y un objeto de tipo DataAdapter pasándole como parámetro la sentencia Sql y el objeto MySqlConection.
Creamos un objeto tipo CommandBuilder pasándole como parámetro el objeto DataAdapter para que de esta manera se ejecute la consulta.
Con el método Fill() del objeto DataAdapter llenamos el objeto DataTable.
Asignamos a la propiedad DataSource del DataGridView el objeto DataTable mostrando así los datos contenidos.
Finalmente es muy importante eliminar de memoria los objetos utilizados para optimizar los recursos,
EN este punto hay que recordar que los objetos no se eliminan de la memoria en el momento que nosotros lo especificamos con Nothing, pero los preparamos para que el Recolector de Basura de .net lo haga en el momento que crea conveniente.
Aquí está el código completo:
Imports System.Data Imports MySql.Data Imports MySql.Data.MySqlClient Public Class Form1 'variable de cadena de conexión Dim ConStr As String ConStr= "server=localhost;uid=alux;password=batman;database=alux" Private Sub Button1_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Button1.Click 'variable de conexión Dim Con As New MySqlConnection(ConStr) 'variable dataset Dim Ds As New DataSet 'variable tabla Dim Tabla As New DataTable 'adaptador que sirve de enlace intermedio entre la aplicación y la 'base de datos Dim Da As New MySqlDataAdapter("select * from articulos", Con) 'capturamos errores Try 'ejecutamos la query que tiene el DataAdapter Dim Cmd As New MySqlCommandBuilder(Da) 'llenamos la tabla Da.Fill(Tabla) 'mostramos datos DataGridView1.DataSource = Tabla Catch ex As MySqlException 'en caso de error MsgBox(ex.Message) Finally 'finalmente eliminamos objetos de memoria Con = Nothing Ds = Nothing Tabla = Nothing Da = Nothing End Try End Sub End Class







hola alex feliz año
hee tal vez me recuerdes, sabes hasta ahorita he aprendido muchos con gtus ejemplos, hasta me atrevi ha hacer un trabajo final de todo lo que has mostrado….nada mas que tengo un problemita.
mi trabajo es un punto de venta de una farmacia x, y bueno ya hize las conexion asi como la mostraste ya doy de altas de productos, modifico, elimino etc. ahora quisiera hacer una epecie de carrito de compra para el formulario donde se realizan las ventas, nada mas que pues la neta ahi mequede, utilize el ejemplo del datagrid pero no es lo que deseo. no se si tu puedas ayudarme con mi problimita. ya que tengo que entregar ese trabajo a mas tardar el miercoles o si no me reprueban.
por favor ayudame.
Me imagino que lo que quieres hacer, es ingresar el código de un artículo, que se busque en la BD, si se encuentra, que lo agregue a un ListView lo que es su descripción y precio y de está manera hasta que se termine la compra.
Para eso creo que necesitas leer el post que le sigue a este y que es llenar ListView desde BD
http://www.mejoralex.com/llenar-listview-desde-base-de-datos
Si esto no es lo que buscas, dime con más claridad…
agradesco que allas contestado
Mira te explico: tengo un formulario que realizara las ventas, hay un textbox donde se captura el codigo de barras del producto X, y un boton donde se realizara la busqueda del producto.
Si el producto existe apareceran los datos del producto (codigo de barras, nombre, precio, cantidad_existente ) estos se colacaran en algun contenedor tal vez ahi entre el ” listview ” .
Si algun producto se repite solo se incrementara, en el campo cantidad_producto() y asi sucesivamente.
ya cuando se allan realiazado todas las compras o insertado en el contenedor, procederemos a cobrar, multiplicando los precios de los productos por sus cantidades, despues se realizara una suma de cada uno de los productos y el resultado estara en un textbox.
espero y me halla explicado y que me puedas ayudar… solo tengo hasta mañana y bueno ya estara de dios que el maestro me quiera dar otro dia…
gracias por tu ayuda… enserio gracias.
Dantors: Y de todo esto que es lo que te hace falta?
Buenas tardes
pues la verdad todo
mira necesito ejecutar una VENTA, primero ejecuto una busqueda ( id_codigo_barras) y en donde puedo yo meter esa busqueda..?
si realizo otra busqueda del mismo articulo ¿como le hago para incrementar solo el campo cantidad en el formulario?
y asi seguir con otros productos que yo ingrese, tal y como se realiaza una compra en el super.
espero y me entiendas. estoy checando la pagina…tengo una cuenta de hotmail estoy en linea chi_t_c_d@hotmail.com
Deja ver si te puedo mandar un ejemplo….
QUE TAL ALEX
OYES QUE BUENO CONTAR CON PERSONAS COMO TU, AGRADESCO DE CORAZON TU APOYO
EL EJEMPLO QUE MANDASTES ES LO QUE NECESITA, OYES YA POR ULTIMO Y SE QUE SIDO MUY MOLESTOSO CONTIGO.
ME PODRIAS DECIR COMO PUEDO HACERLE PARA QUE SE SUMEN LOS VALORES QUE ESTAN ADENTRO DEL LISTVIEW, PARA PODER HACER OPERACIONES SOBRE ELLAS.
MIRA QUISIERA SUMAR TODOS LOS “PRECIOS TOTALES” DEL LISTVIEW PARA ASI PODER HACER UNA SUMA DONDE PUEDA VER EL COSTO DE TODOS LOS PRODUCTOS EN UN LABEL…Y TAMBEIN PARA PODER REGISTRAR LAS VENTAS EN UNA TABLA EN LA BASE DE DATOS.
DISCULPA SI TE CAUSO MUCHO RETRAZO PERO PROMETO YA NO MOLESTARTE BUENO POR EL MOMENTO. JEJEJE
OYE TU PAGINA YA NO ESTA DISPONIBLE..?
ESTOY CORRIENDO LA VOZ DE TUS CONOCIMIENTOS PARA QUE PUEDAN VISITAR TU PAGINA.
SALE NOS VEMOS Y APENAS HOY CHEQUE MI CORREO ANDABA VIENDO COMO RESOLVER MI PROBLEMA..
SALUDOS AMIGO Y BENDICIONES PARA TI…
Oye alex, me sirvió de mucho tu explicación de haehco hize un reporte de crystal report utilizando este método, hoara quiero hacer un reporte combinado.. el reporte que hice es el de mostar todos los articulos de una tabla “Select * from articulos” ahora quiero hacer una consualta combinada por ejemplo:
“Select compras.*, articulos.* where articulos.articuloid=compra.articuloid” me podrías ayudar ??
Pues así como presentas la consulta esta bien, tienes la idea.
Cual es la duda???
buen aporte funciona todo bien
una pregunta queridos companeros ya teniendo la conexion a base de datos mysql
quiero realizar una buscqueda utilizando un txtbox y un button que se llame buscar y cuando le de click a button buscar que me busque un nombre pero solo un nombre por ejemplo mario y que me muestre en mi datagrid solo los que seleciono osea solo los nombres marios por ejemplo me pueden echar la mano con esta consulta muchas graciaasssssssssss
e buscado en todas partes y no encuentro como realizarlo gracias ,……………….
Killer, Te lo voy a poner con un Listview porque se ve mucho mejor.
Metes el listview que llamaremos List
Configuras su propiedad columnas agregando los campos que necesitas con el n ombre que quieras y pueden ser independientes de la base de datos, ejemplo Nombre, Apellido, Dirección etc..
Necesitamos tambien un textbox.
Dentro del código del botón sacamos el texto que escribimos en en textbox a una variable:
Dim TextoNombre as string=texttbox1.text.trim
‘Vaciar lista
List.Items.Clear()
‘declaramos variable SqlFind para almacenar una consulta utilizando el operador LIKE utilizando el comodín % para que así si se teclea Mar, busque las coincidencias como Mario Mara Maria etc.. todo ordenando por nombre.
Dim SqlFind As String = “SELECT nombre,apellido,direccion from clientes where nombre LIKE ” & TextoNombre & “%” & “ORDER BY nombre”
‘y ejecutamos la función que pongo mas a abajo y que llena el listview
dim res as boolean = BusquedaCliente(SqlFind, List)
‘FUNCION BUSQUEDA QUE DEVUELVE FALSO O VERDADERO
Public Function BusquedaCliente(ByVal Sql As String, ByVal Source As ListView) As Boolean
Dim Comando As New MySqlCommand(Sql, Con)
Dim DR As MySqlDataReader
Try
If Not Con Is Nothing Then Con.Close()
Con.Open()
DR = Comando.ExecuteReader()
Dim item As New ListViewItem
While DR.Read()
item = Source.Items.Add(CStr(DR(”nombre”)))
item.SubItems.Add(CStr(DR(”apellido”)))
item.SubItems.Add(CStr(DR(”direccion”)))
item.SubItems.Add(CStr(DR(”telefono”)))
End While
Return True
Catch ex As Exception
Return False
Finally
Comando = Nothing
DR = Nothing
Con.Close()
End Try
End Function
Saludos.
una pegunta realise el codigo pero solo me aparece un error en
conectar= “server=localhost;uid=root;password=;database=cfp”
me aparese subrallada la palabra Y ME DICE QUE SE ESPERA UNA DECLARACION
aui esta todo el codigo
Imports System.Data
Imports MySql.Data
Imports MySql.Data.MySqlClient
Public Class Form1
Dim conectar As String
conectar= “server=localhost;uid=root;password=;database=cfp”
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim Con As New MySqlConnection(conectar)
Dim Ds As New DataSet
Dim Tabla As New DataTable
Dim Da As New MySqlDataAdapter(”select * from tabla”, Con)
Try
Dim Cmd As New MySqlCommandBuilder(Da)
Da.Fill(Tabla)
DataGridView1.DataSource = Tabla
Catch ex As Exception
MsgBox(ex.Message)
Finally
Con = Nothing
Ds = Nothing
Tabla = Nothing
Da = Nothing
End Try
End Sub
End Class
porfavor si me puedes hayudar porque tengo que terminarlo el dia de mañana y de antemano gracias por todo..
cave decir que no eh definido un password para mi base de datos pero lo prove asi con el ejemplo deconectarse a mysql desde visual basic.net y ese si me funciono pues te deje mis agradecimientos pero el problema esque nesesito mostrarlo en eñ datagrid…
son requerimientos pro se trata de una tarea de mi colegio..
si me pudieras explicar mi error te lo agradeseria mucho
bueno pues ya lo pude resolver gracias de todas formas
porfavor puesde agregarme al correo o escrivir el tuyo por que enserio me has sido de mucha ayuda
ademas cabe felicitarte por las erramientas que nos estas brindando para seguir ampliando conosimientos
medfermadrid@hotmail.com
porfavor me gustaria seguir en contacto
gracias
Que bueno que ya lo hayas resuelto y claro que estaremos en contacto.
Saludos…
Saludos Alex! La verdad felicidades por tener este blog que seguro que ha sido de mucha ayuda para muchas personas!
Aqui vengo a molestar para preguntar unas dudas que tengo sobre el codigo que nos compartes para lograr pasar datos a un datagrid..
Veras, lo he hecho en Sql Server y Visual Basic 2008, y asi quedo el codigo casi identico al tuyo (excepto por la diferencia de las lineas de Mysql a sql server 2005):
Imports System.Data.SqlClient
Public Class Form1
Dim constr As String = “Data Source=.\SQLEXPRESS;AttachDbFilename=C:\prueba.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True”
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim CN As New SqlConnection(constr)
Dim Ds As DataSet
Dim tabla As DataTable
Dim Da As New SqlDataAdapter(”SELECT numero AS Numero, nombre AS Nombre FROM tabla1″, CN)
Try
Dim cmd As New SqlCommandBuilder(Da)
Da.Fill(tabla)
DataGridView1.DataSource = tabla
Catch ex As Exception
MsgBox(ex.Message)
Finally
CN = Nothing
Ds = Nothing
tabla = Nothing
Da = Nothing
End Try
End Sub
End Class
Al termino de esto, me menciona el VB este lema: “Variable ‘tabla’ is used before it has been assigned a value. A null reference exception could result at runtime.” y me subraya la variable “Tabla” en la sentencia “Da.Fill(tabla)”, y al correr el programa me sale el msgbox de la excepcion que me dice que el valor no puede ser nulo: “value cannot be null. Parameter name: dataTable”. No faltara alguna expresion donde se reciva el valor de la sentencia de sql a la variable tabla?
De antemano muchas gracias Alex! ojala puedas aclararme la duda!
Por cierto.. tb no se ocupa abrir y cerrar coneccion? como CN.Open() y CN.Close()?
Porfavor.. TwT Espero ojala puedas aclararme..
Ya consegui hacerlo… el codigo es este…
Imports System.Data.SqlClient
Public Class Form1
Dim constr As String = “Data Source=.\SQLEXPRESS;AttachDbFilename=C:\prueba.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True”
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim CN As New SqlConnection(constr)
Dim Da As New SqlDataAdapter(”SELECT * FROM tabla1″, CN)
Dim DS As New DataSet
Try
Dim cmd As New SqlCommandBuilder(Da)
Da.Fill(DS, “tabla1″)
Me.DataGridView1.DataSource = DS.Tables(”tabla1″)
Catch ex As SqlException
MsgBox(ex.Message)
Finally
CN = Nothing
DS = Nothing
Da = Nothing
End Try
End Sub
End Class
Y pues creo que si.. hacia falta esto: Da.Fill(DS, “tabla1″) .. Gracias de todas formas Alex…
Ok daniel, lo que te hacia falta ya lo solucionaste.
Lo de si hay que poner con.open y close no es necesario pero si recomendable. Ya que VB abre la conexión implicitamente y no es necesario que la abras tu, pero para buenas practicas abrela tu y cierrala tambien.
Estas muy intersantes los articulos.
Me gustaira que me dijeran como hacer un reporte utilizando la conexion con mysql y conectarme a un servidor remoto Por Favor.
Saludos.
Hola Baltazar, para hacer reportes utiliza Crystal reports.
En breve pongo un post con este tema.
HOLA ALEX, TENGO UNA PREGUNTA ESPERO ME PUEDAS AYUDAR…
ESTOY TRATANTO DE ELIMINAR UN REGISTRO DE MI BD (ACCES) DESDE MI DATAGRIDVIEW EN VB.NET ESTO DE LA SIG. FORMA:
Private Sub dataesquema_CellDoubleClick(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles dataesquema.CellDoubleClick
Dim cot As Integer
cot = CInt(dataesquema.SelectedCells.Item(0).Value)
Base.Borra_calendario(cot)
PERO ME ESTOY DANDO TOPES EN ESTA LINEA:
cot = CInt(dataesquema.SelectedCells.Item(0).Value)
Y NO SE A QUE SE DEBA, ME TOMA EL SIGUIENTE VALOR Y NO EL PRINCIPAL O EL SELECCIONADO PARA ELIMINAR.
ME PODRAS AYUDAR?
GRACIAS.
Necesitaria ver tu metodo Borra_calendario …
saludos solo para molestarte un poco ya q toy ahciendo un programa para el colegio…
hice todo lo anterior mencionado pero a la hora de buscar en la base de datos por nombre apellidos y generacion me sale error de comillas simples (´) ups me podias ayudar…
este es mi codigo…
Public Class FrmBuscar
Inherits System.Windows.Forms.Form
Dim cnn As String = “server=localhost;uid=root;password=1025;database=archivo”
Private Sub btnAceptar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAceptar.Click
‘iniciamos conexion a la DB
Dim Con As New MySqlConnection(cnn)
Dim Ds As New DataSet
Dim tabla As New DataTable
‘buscamos al sujeto en la base de datos
aki el error ————————->
Dim da As New MySqlDataAdapter(”select Nombres, ApPaterno, ApMaterno, Generacion from persona where nombres=’” & txtNombre.Text & “‘, ApPaterno=’” & txtApPaterno.Text & “‘, AppMaterno=’” & txtApMaterno.Text & “‘ Generacion=’” & txtGeneracion.Text & “‘”, Con)
Try
‘ejecutamos la query que tiene el DataAdapter
Dim Cmd As New MySqlCommandBuilder(da)
‘llenamos la tabla
da.Fill(tabla)
‘mostramos datos
DataGridView1.DataSource = tabla
Catch ex As MySqlException
‘en caso de error
MsgBox(ex.Message)
Finally
Con = Nothing
Ds = Nothing
tabla = Nothing
da = Nothing
End Try
End Sub
con lo anterior solo con un txt funciona no se q tengo q hacer para q funcione con todos los txt q tengo
de ante mando gracias y espero tu comentario
disculpa y gracias
tambien si hay otra manera lo agradeceria…
y de preferencia si fuera en el DataGridView1 lo agradeceria….
Morthe:
No se a que te refieres con “solo un txt funciona”
El único problema que veo en el código es que utilizas mayusculas y minusculas en los campos pero luego los mencionas solo en minusculas. En mysql eso da error.
Con un datagrid hay otro post:
http://www.mejoralex.com/llenar-un-datagrid-con-mysql-en-visual-basicnet
Hola!
Buenas tardes. Bueno quisiera saber algo en base a lo que comenta Morthe, el quiere que la busqueda se haga ingresando los datos en todos los textbox? o que con solo poner un dato en 1 solo texboxt se haga la busqueda?
Lo que quiero hacer es q en un formulario ingresen lo que quieren buscar, por decir que si ponen nombre se busque por nombre, o si ponen apellido, no necesariamente que llenen los 3 o 4 textbox. Como se puede hacer eso?
Gracias de antemano.
Saludos =)
Romy Solo modifica la consulta con el modificador AND
hola alex encontre tu pagina y bastante util, para gente como yo que tamos empesando con vb2008 y Mysql, mi problema es el siguiente.
kiero hacer algo asi como un punto de venta, utilizando datagridview osea ingresar un codigo de algun producto en la primera celda(1,1) para luego al presionar enter me busque en una base de datos, y coloque el resultado en las proximas columnas (1, 2):(1, 3) y posiconar el cursor en la cuarta columna y poner la cantidad necesaria para luego al presionar enter em calcule el importe de todo y salte a la siguiente fila y asi sucesivamente, ir pasando de celda columna con el enter… espero me haya explicado
El datagrid es para mostrar datos de la base de datos y no tanto para mostrar resultados en base a los campos, además de que el datagrid tiene muy mal aspecto. Por eso recomiendo que pongas los datos en un listview, asi podras manipularmo mejor y se vera muy bien.
Aquí esta el post de como llenar un listview desde mysql:
http://www.mejoralex.com/llenar-listview-desde-base-de-datos
Hola Alex, por favor podrias ayudarme con el siguiente problema que tengo con el datagridview:
quiero asignarle un valor a cierta celda, es un valor numerico como por ejemplo “489.435″ mediante un dataset, el problema es que cuando lo grabo en la celda del grid solo me considera el numero entero, omite la parte decimal osea “489″. ¿como podria hacer para que se vea el dato exacto en la celda del grid? este es el codigo que uso
dg_detalle.Item(”monto_soles”, i_fila).Value = ds_ventas.Tables(0).Rows(0).Item(”monto_soles”)
pd: ya he probado dandole formato a al columna:
dg_detalle.Columns(”monto_soles”).DefaultCellStyle.Format = “N3″ ….y nada
“dg_detalle” es el nombre del control datagridview
“ds_ventas” es el nombre de la variable asignada para el dataset
“monto_soles” es el nombre del campo de la columna
el campo “monto_soles” de mi BD de mysql es decimal(18,3), al que le aplicado un Sum(monto_soles) para que sume el total.
agradesco de antemano tu ayuda.
mira
Tengo el siguiente codigo el problema sitengo un id_medicamentos di fenrente me ilimina el anterior
Dim Con As New MySqlConnection(ConStr)
Dim Ds As New DataSet
Dim Tabla As New DataTable
Dim Da As New MySqlDataAdapter(”SELECT id_medicamento,nombre,precio FROM medicamentos WHERE id_medicamento=’” & Txtcod.Text & “‘”, Con)
Try
Dim Cmd As New MySqlCommandBuilder(Da)
Da.Fill(Ds, “medicamentos”)
DataGridView1.DataSource = Ds.Tables(”medicamentos”)
Catch ex As MySqlException
MsgBox(ex.Message)
Finally
Con = Nothing
Ds = Nothing
Tabla = Nothing
Da = Nothing
End Try
Dim dt As DataTable = DirectCast(DataGridView1.DataSource, DataTable)
Dim tota As Object = dt.Compute(”SUM(Precio)”, Nothing)
Me.TxtTotal.Text = tota.ToString
End If
Hola alex, tengo un lio desde hace mucho, y no he podido solucionarlo.
tengo un DataGridView, en el cual ingreso un codigo en la primera celda le doy enter y me busca el producto que corresponde y su precio, todo lo hace bien,
el problema esta cuando abro otro formulario desde la primera celda con la tecla (f4) lo hace bien busco un producto segun descripcion, y me encuentra su codigo lo capturo y vuelvo al DgView a la primera celda con el codigo capturado le doy enter y no me ejecuta nada, necesariamente debo volver a digitar o escribir todo el codigo capturado para darle enter y siga funcionando, ademas el cierre del formulario donde busco es muy lento, me podrias ayudar???
Edwin: No se porque no te funciona el Keypress pero deberia hacerlo.
Aqui el problema en ambos casos es del código y necesitaria verlo.
HOla estoy utilizando visual basic .net y hago una consulta de mi base de datos y la despliego en un datagrid y quiero poder modificar los datos del datagrid y que se modifiquen tambien en mi tabla
este es mi codigo
Dim adaptador As New Odbc.OdbcDataAdapter
Dim tabla As New DataTable
Dim consulidEmpresa As String = “SELECT * FROM Empresa WHERE RFC=’” + txtRFC.Text + “‘”
Dim com As New Odbc.OdbcCommand(consulidEmpresa, Conex)
com.CommandText = consulidEmpresa
adaptador.SelectCommand = com
adaptador.Fill(tabla)
DataEmpresa.DataSource = tabla
Conex.Close()
y para guardar los cambios
Try
adaptador.Update(tabla)
Catch ex As Exception
MsgBox(ex.ToString)
End Try
espero me puedan ayudar
Sigue el ejemplo de http://www.mejoralex.com/conectarse-a-mysql-desde-visual-basic-2005
como mostrar en un label la sumatoria de una consulta por ejemplo “select sum(iva) as total from caja where oficina=’1v’ ” en visual basic.net 2005 con sqlServer
por favor alguien podria ayudarme se los agradeceria mucho
Solo metes elk resultado a el control:
Label1.text=row(0).tostring
Suponiendo que el campo es el primer campo indice cero.
Hey! Do you know if they make any plugins to help with SEO? I’m trying to get my blog to rank for some targeted keywords but I’m not seeing very good results. If you know of any please share. Thanks!
buenas tardes
me sale un error al querer repetir la consulta en el da.Fill(tabla)
Buen dia.
Quisiera saber si tienes un ejemplo de como ingresar datos en un Datagrid y luego guardarlos en una tabla de mysql.
Muchas gracias!.
PODRIAS PUBLICAR UN EJEMPLO COMO ACTUALIZAR DATOS EN UNA BASE DE DATOS CON MYSQL Y VISUAL BASIC.NET