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 ModuleAhora 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.







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
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.
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….
Dantors, te lo pongo en el nuevo post del 10 de Diciembre.
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 & “`)”
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…
me as sido de gran ayuda la verdad es que llevava un dia sin dormir intentando aser la conexion
gracias
De nada…
ESTAMOS TRABAJANDO EN MYSQL
q tal loc
m sirvio de mucho lo q piblicaste..
thanks.,…
q tal loc
m sirvio de mucho lo publicaste..
thanks.,…
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
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……
NOE:
Necesitas colocar al principio del código :
Imports System.Data
Imports MySql.Data.MySqlClient
Hola Alex, sera que no puedes darnos un ejemplo de como crear un sistema de login en ASP Net con MySQL, Saludos.
Muchas gracias por el tutorial, exitos brother ;D
Se puede hacer esto mismo en Visual Basic 6.0
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.
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
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
MUY BUENO ESTE POST SI HUBIERA Q VOTAR TE DARIA UN 1000 JAJAJAJA EXITOS
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…
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???
El problema es la cadena de conexión. tienes mal los datos, nose, password, usuario o configuracion de mysql.
ok ya quedo muy buen aporte compañero gracias por tu post
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
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
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
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.
podrias pasarme tu correo para estar mas en comunicacion o bien me agregas por algoq ue me pudieras ayudar
piter_25254@hotmail.com
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