Conectarse a Mysql desde Visual Basic 2005

Escrito en Octubre 22, 2008 por Alex

Para conectarnos a Mysql desde Visual.Net lo mejor es hacerlo de manera nativa con el conector que nos proporciona Mysql llamado “Mysql.Data.dll” que puedes bajar desde aquí.

Una vez descargado el archivo tenemos que agregar una referencia desde Visual Basic a dicho conector.
Para esto hay que ir al menú Proyecto y despúes a Agregar referencia… En la ventana que aparece buscamos el archivo indicado y lo agregamos.

En todos los casos necesitamos saber una cadena de conexión como es el nombre del servidor, el usuario y password y la base de datos.

Para este ejemplo utilizaremos un módulo y dentro del formulario un botón y un Label.

Lo primero que tenemos que hacer al principio del módulo es importar los espacios de nombres que utilizaremos y que en este caso son dos, uno que importa los objetos necesarios por parte de .Net para trabajar con orígenes de datos y que es el espacio “System.Data” y el espacio que nos proporciona Mysql que es “System.Data.MysqlClient” y lo hacemos al principio del módulo de la manera siguiente: 

Imports System.Data
Imports MySql.Data.MySqlClient

Ahora dentro del código del módulo vamos a declarar una variable que contenga la cadena de conexión válida para Mysql. Tomando en cuenta que el servidor esta en la máquina local, con un usuario llamado “user1″ y un password “pass1″ y la base de datos a utilizar se llama “mibase” declaramos la variable de la siguiente forma y al mismo tiempo le asignamos el valor de la cadena entre comillas dobles.

Dim ConStr As String = “server=localhost;uid=User1;password=mipass;database=mibase”

 Es posible aumentar si fuera necesario el valor del puerto con la palabra “port=3310″ que en este caso el puerto es el 3310 pero si no se especifica se toma el puerto default que es el 3306.

Ahora creamos un objeto tipo MysqlConection y le pasamos como parámetro la variable que contiene la cadena de conexión. 

Dim Con As New MySqlConnection(ConStr)

Ahora vamos a crear la primer funcion par Insertar datos, actualizar los ya existentes o eliminar registros.

Para las operaciones que no nos devuelven ningún dato o ningún conjunto de registros como Update, Delete o Insert utilizaremos el método “ExecuteNonQuery” ya que este método solo nos puede devolver el número de filas que se hayan visto afectadas. 

Module Module1
 
 
    'declaramos la cadena de conexión 
    Dim ConStr As String = "server=localhost;uid=User;password=Mipass;database=MiDb"
 
    'instanciamos un objeto conexion
    'y le pasamos de parametro la variable con la cadena 
    Dim Con As New MySqlConnection(ConStr)
 
    'creamos la funcion para insertar, Update o delete que devuelve
    ' un valor tipo string (cadena de texto)
    'con un parametro que contendrá la cadena de conexión 
    Public Function MiFuncion(ByVal Sql As String) As String
 
        'creamos el objeto comando y le pasamos el parámetro que contiene la query y la conexion 
        Dim Comando As New MySqlCommand(Sql, Con)
 
        'Try para capturar los errores
        Try
 
            'antes de abrir conexión nos aseguramos que no exista conexión establecida previa 
            If Not Con Is Nothing Then Con.Close()
 
            'abrimos conexión 
            Con.Open()
 
            'declaramos la variable de tipo entero que contendrá las filas afectadas y ejecutamos 
            'el comando
            Dim res As Integer = Comando.ExecuteNonQuery()
 
            'mandamos como retorno en múmero de filas afectadas
            'pero utilizamos Tostring para pasar el valor de número entero a cadena de texto
            'porque hay que recordar que la función devuelve un valor de tipo string 
            Return res.ToString
 
            'capturamos a partir de aquí si hay errores 
        Catch ex As Exception
 
            'y si hay errores retornamos el mensaje de error 
            Return ex.Message
 
            'y con Finally que es parte de TRY CATCH y END TRY
            'ponemos el código que se ejecutará se produzca o no un error 
        Finally
 
            'cerramos la conexión 
            Con.Close()
 
            'y esto es muy importante, el objeto comando que habiamos creado 
            'lo eliminamos de la memoria 
            Comando = Nothing
            'finalizamos la captura de errores 
        End Try
 
    End Function
 
End Module

Ahora para utilizar la función desde el formulario solo necesitamos llamarla de la siguiente forma dentro del evento Click del botón de comando.

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        'creamos la sentencia sql que inserta en una tabla llamada alumnos en sus campos id y nombre
        'los valores 11 y Jose Lopez 
        Dim sql As String = "insert into `alumnos`(`Id_alumno`,`Nombre`) values ( ‘11‘,’Jose Lopez’)"
        'le asignamos a la propiedad text del label1 
        'el resultado de las filas modificadas llamando a la función 
        Label1.Text = Mifuncion(sql)
    End Sub

Al ejecutar el código notamos que nos devuelve  el valor de “1″ que significa que solo se modificó una fila.

Si se quiere ejecutar un Update o un Delete solo se tiene que cambiar la Query por la adecuada.
En el siguiente post pondré el código para las funciones que devuelven datos.

Si te gusto este artículo Suscribete a nuestro feed

32 Comentarios en “Conectarse a Mysql desde Visual Basic 2005”

  1. Andrea |

    hola, me parece perfecto y me ayud mucho pero una pregunta como puedo hacer para que los datos ingresados no los digite yo en la cadena sql sino que los reciba de un TexBox o un combo

  2. Alex |

    La manera mas fácil seria esta:
    Insertas 4 textbox y un boton
    Para hacerla fácil sin válidar los datos ingresados por el usuario:
    Este código iria en el botón:
    Dim ConStr As String = “server=” & TextBox1.Text.Trim & “;uid=” & _
    TextBox2.Text.Trim & “;password=” & TextBox3.Text.Trim & “;database=” & _
    TextBox4.Text.Trim

    El Trim es para eliminar espacios que puedan haber escrito en los textbox y el guión bajo es para poder dividir lo que es una sola linea en este caso en tres.

    Aclaro que si quieres válidar que la información que ingresaron es correcta, necesitas hacerlo antes de asignar esta cadena en el mismo botón pero ese es otro rollo.

  3. dantors |

    Me a resultado de mucha ayuda tu informacion…he podido completar una aplicacion con conexion a mysql, nada mas que ahun no logro enviar mas de un dato, contenido en un textbox, soy nuevo en esto y me agrada aprender y esto me ha dado un conocimiento nuevo.

    hs y si no es mucho pedir me gustaria saber como vaciar los datos en un textbox.

    muchas gracias….

  4. Alex |

    Dantors, te lo pongo en el nuevo post del 10 de Diciembre.

  5. dantors |

    Que tal Alex

    oyes, estoy tratando de insertar mas datos a la base de datos pero aun no puedo quien sabe que pasa, la cadena solo me admite un dato…

    Dim sql As String = “insert into `mi_tabla`(`id_codigo_barra`) values ( ‘ ” & textbox1.Text.Trim() & “‘)”

    y yo quiero introducir mas de un dato atravez de un textbox, la verdad se me dificulta aprender espero y me puedas ayudar ya intente cambiandole cosas a la cadena ahi te las mando para que veas todo el desastre que hize, jejeje es muy frustante no poder saber espero y me ayudes.

    Dim sql As String = “insert into `inventario`(`id_codigo_barra`,`nombre_producto`) values ( ” & codigo_barras.Text.Trim() & “,” & producto.Text.Trim() & “)”

    Dim sql As String = “insert into `inventario`(`id_codigo_barra`,`nombre_producto`)values(`” & codigo_barras.Text.Trim() & “`,`” & producto.Text.Trim() & “`)”

    Dim sql As String = “insert into `inventario`(`id_codigo_barra`,`nombre_producto`)values(`” & codigo_barras.Text.Trim() & ““” & producto.Text.Trim() & “`)”

    Dim sql As String = “insert into `inventario`(`id_codigo_barra`,`nombre_producto`)values(`” & codigo_barras.Text.Trim & “`,`” & producto.Text.Trim & “`)”

    Dim sql As String = “insert into `inventario`(`id_codigo_barra`,`nombre_producto`)values(`” & codigo_barras.Text.Trim() &, & producto.Text.Trim() & “`)”

    Dim sql As String = “insert into `inventario`(`id_codigo_barra`,`nombre_producto`)values(`” & codigo_barras.Text.Trim() & producto.Text.Trim() & “`)”

    Dim sql As String = “insert into `inventario`(`id_codigo_barra`,`nombre_producto`)values(`” & codigo_barras.Text.Trim & producto.Text.Trim & “`)”

  6. Alex |

    Dantors, No se como esta estructurada tu BD, como si tienes en la tabla inventario solo dos campos que son el codigo de barras y el nombre del artículo o hay más campos como el precio o algo así.

    Pero te respondo imaginando que son más campos y que los estas dejando en blanco.

    Aquí tu problema no es visual basic, sino mysql en cuanto a la sentencia SQL.
    Cuando realices INSERT utilizando la cláusula INTO debes de especificar los nombres de todas las columnas y en el caso de que el valor que contiene una columna no la quieras o no la sepas, debes poner “NULL” siempre y cuando ese campo acepte valores nulos.

    Pero existe INSERT utilizando SET para poder especificar solo unos campos y la sentencia quedaria así:

    sql=”INSERT inventario SET id_codigo_barra=`750135984512`, nombre_producto=`Galletas De chocolate`”

    y con variables:

    Dim sql As String = “INSERT inventario SET id_codigo_barra=” & TextBox1.Text.Trim & “,” & “nombre_producto=” & TextBox2.Text.Trim

    Las comillas simples las puedes omitir como lo hago en la segunda sentencia pero ten cuidado con esto ya que en versiones anteriores de mysql puede haber errores.
    Otra cosa que debes tener en cuenta es el tipo de dato que estas metiendo en cada campo, ya que debe de coincidir con el de la BD. ejemplo: No puedes meter texto en un campo numérico.
    Y verifica que todos tus campos que dejas en blanco, puedan aceptar valores nulos.
    Saludos…

  7. Medfer Madrid |

    me as sido de gran ayuda la verdad es que llevava un dia sin dormir intentando aser la conexion
    gracias

  8. Alex |

    De nada…

  9. FULGENCIO QUIÑONES |

    ESTAMOS TRABAJANDO EN MYSQL

  10. lila |

    q tal loc
    m sirvio de mucho lo q piblicaste..
    thanks.,…

  11. lila |

    q tal loc
    m sirvio de mucho lo publicaste..
    thanks.,…

  12. Noe Diego |

    Hola Alex !!

    estoy comensando desde cero

    segui paso a paso tus instrucciones de como conectarce de a mysql desde VB 2005, pero me envia un error

    Imports Statements must precede any declarations

    type ‘MySqlConnection’ is not defined

    type ‘MySqlCommand’ is not defined

  13. Noe Diego |

    Hola Alex !!

    estoy comensando desde cero

    segui paso a paso tus instrucciones de como conectarce de a mysql desde VB 2005, pero me envia un error

    Imports Statements must precede any declarations

    type ‘MySqlConnection’ is not defined

    type ‘MySqlCommand’ is not defined

    perdon senti que fui muy descortes en el mensaje anterior se me olvido lo siguiente

    espero me puedas ayudar.
    te doy las gracias de antemano……

  14. Alex |

    NOE:
    Necesitas colocar al principio del código :
    Imports System.Data
    Imports MySql.Data.MySqlClient

  15. Hugo |

    Hola Alex, sera que no puedes darnos un ejemplo de como crear un sistema de login en ASP Net con MySQL, Saludos.

  16. Luis Cv |

    Muchas gracias por el tutorial, exitos brother ;D

  17. ADRIAN |

    Se puede hacer esto mismo en Visual Basic 6.0

  18. Alex |

    Adrian, se pude hacer esto pero es diferente la forma de hacerlo.
    Para hacer esto en vb 6.0 hay mucha información en internet. Para lo que falta un poco es de .net asi que por eso este blog esta dedicado a .net.

  19. VICTOR CHAHUA |

    COMO ESTAS ALEX ALGUIEN ME PUDE AYUDAR ME marca ERROR VERSION MYSQL
    (tome todo los pasos y nada )
    You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘Lopez’,’15’,’80’)’ at line 1
    TENGO INSTALADO EL
    MYSQL VERSION —MySQL Database Version 5.0.51b
    gracias espero su apoyo

    victor_chahua@hotmail.com

  20. Nancy |

    esta super genial lo q publicaste me sirvio de mucho, relamente hace lo q tiene q hacer … muchas gracias,,, sabes me gustaria estar en contacto… chaooo

  21. michael |

    MUY BUENO ESTE POST SI HUBIERA Q VOTAR TE DARIA UN 1000 JAJAJAJA EXITOS

  22. michael |

    mi hermano… mira al poner los textbox y validarlos en el insert solo me acepta los valores numericos y los tipo texto o varchar no me los acepta que me recomiendas para poder solucionar el problema…

  23. luis |

    mira segui paso a paso tu informacion y pues corrio pero al momento de dar click al boton me aparecio esto

    acces denied for user ‘Arzat’@'localhost’(using password: yes)

    ojala puedas decirme q tiene de malo me imagino q es mi mysql el q anda mal o sera por q tengo windows vista o q puede ser???

  24. ALex |

    El problema es la cadena de conexión. tienes mal los datos, nose, password, usuario o configuracion de mysql.

  25. luis |

    ok ya quedo muy buen aporte compañero gracias por tu post

  26. Daniel |

    Luis, tienes que configurar bien los privilegios de los usarios en cuanto al acceso a las base de datos de MySQL. quizas el usuario que estas usando no esta autorizado para grabar o reliza “X” transacción.

    Alex tambien estoy iniciando en .NET y los tutoriales que he conseguido no los logre entender del todo.
    He leido sobre el DataAdapter,dataset, etc. y he logrado conectarme a la base de datos y realizar una consulta mediante un datagridview.

    Pero ahora quiero saber como ingresar datos. como eliminar, etc. este es el codigo que use para cargar el datagridview.

    mports MySql.Data.MySqlClient
    Imports MySql.Data
    Imports System.Data.SqlClient

    Public Class Form2

    Private Sub Form2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

    Dim cadena As String = ” server =localhost; user id=” & usuario & “;password =” & password & “;database = ” & basedatos
    table = New DataTable
    adaptador = New MySqlDataAdapter(”select * from usuarios “, cadena)
    builder = New MySqlCommandBuilder(adaptador)
    adaptador.Fill(table)
    DataGridView1.DataSource = table

    End Sub

  27. Alex |

    Daniel:
    Solo te falta poder actualizar los datos que ya tienes en el datagrid.
    Este es un ejemplo que pondrías en un botón de Guardar.

    Private Sub GuardarBtn_Click(ByVal sender As Object, ByVal e As EventArgs) Handles GuardarBtn.Click
    Dim changes As DataTable = data.GetChanges()

    If changes Is Nothing Then
    MsgBox(”No hay cambios”)
    Exit Sub
    End If

    adaptador.Update(changes)

    table.AcceptChanges()

    End Sub

  28. parke |

    hola tengo dudas en esto, tengo en mi aplicacion manejo un form ydentro de ahi tengo un textbox donde el primer dato que agrego es el id_alum, pero me gustaria que este fuera incrementando automatico y que no fuera defino el rango al que incremente dado que a la larga serian muchos id_Alum podrian ayudarme

  29. Alex |

    Parke:
    Eso lo tienes que definir en mysql como Autoincrement y al insertar ignoras el ID ya que lo haria automaticamente mysql. el campo seria tipo INT.

  30. parke |

    podrias pasarme tu correo para estar mas en comunicacion o bien me agregas por algoq ue me pudieras ayudar

  31. parke |

    piter_25254@hotmail.com

  32. ashkym |

    Alex mira estoy empesando en la programacion en visual studio 2008 uso el conector .net
    logro conectar la base de datos de mysql hago el boton de guardar registro ell de elminar y el de comprobar si existe el registro. mi problema es el siguiente despues que yo hago
    dim sql as string
    sql=”select *from tabla where id=1″
    comando.connection=conexion
    comando.commandtext=sql
    sql=comando.executereader

    con este codigo yo realizo la consulta pero lo que quiero saber en realidad es como hago
    para mostralos en los textbox
    ej
    la tabla tiene 4 campos y yo tengo 4 textbox yo quisiera mostrar los registro de cada campo en cada textbox espera me entiendas y de verdad espero que me ayudes lo necesito urgentemente

Escribe un comentario