El tutorial de VB-MySQL - Parte 3

Por Mike Hillyer

Última Actualización: 15 de Febrero, 2004

  1. Introducción
  2. Diseño de un Sistema de Acceso
  3. Utilizar MySQL Administrator
    • Descarga e Instalación MySQL Administrator
    • Conexión a MySQL Server
    • Agregar Un Usuario
  4. Connector/NET
    • Descarga e Instalación de Connector/NET
  5. Visual Basic.NET
    • Descarga e Instalación de Visual Basic.NET 2005 Express Edition
    • Inicio de Visual Basic.NET
    • La Ventana Principal de VB.NET
    • Asignar un Nombre al Formulario por Defecto
    • Agregar Referencias
    • Guardar el Proyecto
  6. Diseño del Formulario de Acceso
  7. Creación de un Evento
  8. Inicio de la Aplicación
  9. Importación del Sistema de Nombres de Connector/NET
  10. Agregar un Objeto MySqlConnection
  11. Instanciación del Objeto MySqlConnection
  12. Armado del String de Conexión
  13. Apertura de la Conexión
  14. Utilización de un MessageBox
  15. Cierre de la Conexión
  16. Eliminación del Objeto MySqlConnection
  17. Captura de Errores
  18. Prueba del Proyecto
  19. Mejoras
  20. Conclusión

Introducción

Este artículo es la tercera parte de una serie de artículos realizados para documentar la creación de aplicaciones de Windows® utilizando Visual Basic.NET y MySQL. En los artículos anteriores, he descrito cómo diseñar una aplicación y base de datos, instalar MySQL y MySQL Query Browser y cómo completar nuestra tabla utilizando la función Script Editor de MySQL Query Browser.

En este artículo, describiré cómo instalar Microsoft Visual Basic 2005 Express Edition, MySQL Administrator y MySQL Connector/NET. Utilizaremos estas herramientas para crear un formulario de acceso al sistema para nuestra aplicación de registro.

Diseño de un Sistema de Acceso

Existen varias opciones posibles al trabajar en un sistema de accesos pero generalmente se opta por una de dos opciones:

  1. Crear tu propio sistema de acceso. Almacena nombres de usuarios y contraseñas en una tabla de MySQL y utiliza una única cuenta de usuario para todas las instancias de la aplicación que se conecte a MySQL. Cada instancia de la aplicación se conectará a una cuenta de servidor y luego validará el usuario utilizando las tablas que se han creado.
  2. Utilizar las tablas de seguridad propias de MySQL. Crea usuarios MySQL para cada cuenta y deja que MySQL se encargue de la administración de la autenticación y los privilegios.

Ambos enfoques tienen sus respectivas ventajas y desventajas. Cuando construyes un sistema de acceso, potencialmente tienen mayor control sobre los usuarios, grupos y privilegios. Tienes un manejo más simple de los permisos porque se necesita un único MySQL nativo. Por otra parte, existe una mayor probabilidad de que existan problemas de seguridad porque lo que crees no pasará por un proceso de revisión como el que tiene el servidor MySQL. Además, tienes un punto débil en cuanto a la seguridad ya que cada instalación del cliente tiene una copia de la cuenta central de usuario para conectarse a MySQL y esa cuenta debe tener la mayor cantidad de permisos posible para un usuario administrativo. Estas consideraciones no son tan importantes al desarrollar una aplicación web porque es más fácil manejar una instancia web que una colección de aplicaciones de escritorio.

Cuando uses las opciones de seguridad propias de MySQL, obtienes un sistema de administración de privilegios robusto que ha sido minuciosamente revisado y probado. Puedes restringir los privilegios con gran detalle e incluso asignar distintos permisos basados en el host desde el cual se conecta un usuario. La desventaja tiene que ver con la complejidad: sacarle el mayor provecho a la autenticación propia de MySQL es más difícil que hacer una por tu cuenta y deberás agregar un usuario al servidor MySQL cada vez que quieras agragar un nuevo usuario a tu aplicación.

Como esta no es una aplicación basada en web, crearemos nuestra aplicación utilizando el sistema de privilegios propio de MySQL. Para poder crear un usuario nativo en MySQL tendremos que instalar primero MySQL Administrator, una aplicación GUI para la administración de servidores.

Utilizar MySQL Administrator

MySQL Administrator es una herramienta GUI lanzada por MySQL AB para administrar tu servidor MySQL. MySQL Administrator puede utilizarse para administrar usuarios, cambiar la configuración del servidor, manipular las bases de datos del servidor y monitorear el estado del servidor.

Descarga e Instalación de MySQL Administrator

MySQL Administrator puede descargarse desde http://dev.mysql.com/downloads/administrator/1.0.html. En nuestro caso, necesitamos la versión de Windows que incluye el instalador, evita tomar la versión ‘Without Installer’ (Sin Instalador). Guarda el instalador en tu disco y haz doble clic en el icono del instalador para comenzar la instalación. El instalador es un instalador estándar de Windows y no debería requerir ninguna acción especial.

Conexión a MySQL Server

Luego de que finalice la instalación, debería aparecer un icono de MySQL Administrator en tu escritorio. Haz doble clic en el icono de MySQL Administrator para ver el formulario de acceso. También puedes iniciar MySQL Administrator haciendo clic en Inicio > Programas > MySQL > MySQL Administrator.

El formulario de acceso de MySQL Administrator es casi idéntico al formulario de acceso a MySQL Query Browser, con la diferencia de que MySQL Administrator no requiere que se le especifique un esquema por defecto. Ingresa tu información de acceso como usuario root y presiona el botón OK (Aceptar) para abrir MySQL Administrator.

Agregar Un Usuario

Haz clic en la opción User Administration (Administración de Usuarios) del panel de menúes de la izquierda para ver la pantalla de administración de usuarios.

Presiona el botón New User (Nuevo Usuario) para crear una cuenta como nuevo usuario. En la opción MySQL User (Usuario de MySQL) utiliza el valor de username (nombre de usuario) que estableciste en tu fila de usuario en el tutorial anterior. Agrega una contraseña y establece cualquier Información Adicional que quieras especificar (toda la información de la sección Additional Information es opcional).

Cuando ya hayas puesto un nombre de usuario y contraseña, presiona la solapa Schema Privileges (Privilegios del Esquema). Haz clic sobre la base de datos entrada_salida y luego sobre el botón para asignarle a tu usuario todos los privilegios disponibles para la base de datos (refinaremos la lista de privilegios en el futuro). Presiona el botón Apply Changes (Aplicar Cambios) para crear el nuevo usuario. Ahora puedes cerrar MySQL Administrator.

Connector/NET

A principios de 2004 MySQL AB contrató a Reggie Burnett de ByteFX y adquirió su proveedor de datos ByteFX .NET para MySQL. El proveedor se renombró por Connector/NET y no sólo se provee gratis bajo los términos de la GNU Public License, sino que es uno de las más completos y mejores proveedores de .NET para MySQL disponibles en la actualidad. Connector/NET fue escrito en C# y es un código completamente manipulable, permitiendo su portabilidad a cualquier plataforma que soporte .NET, incluso Mono. Una ventaja que ofrece Connector/NET por sobre otras soluciones es su uso del protocolo MySQL nativo: muchas otras soluciones envuelven la librería de cliente C de MySQL y sufren una pérdida de performance como consecuencia.

Descarga e Instalación de Connector/NET

MySQL Connector/NET puede ser descargado desde http://dev.mysql.com/downloads/connector/net/. Descarga la versión que incluye el instalador a tu disco rígido local y descomprime el archivo Zip.

Haz doble clic sobre el archivo de instalación para comenzar el proceso de instalación. Realiza una instalación completa en el directorio por defecto.

Visual Basic.NET

Visual Basic.NET es la nueva versión de Visual Basic. Si bien comparte el nombre Visual Basic, existen diferencias significativas entre Visual Basic 6 y Visual Basic.NET. VB.NET ya está entrando en su tercera versión. La primera versión fue Visual Basic.NET, la segunda fue Visual Basic.NET 2003 y la nueva versión es Visual Basic.NET 2005. Visual Basic.NET 2005 está actualmente en su fase de prueba beta y además esta versión presenta una nueva versión Express que utilizaremos en este tutorial.

La versión Express de Visual Basic.NET es básicamente una versión pelada que conserva toda las funciones necesarias para producir aplicaciones básicas (no quise lograr ningún juego de palabras).

Descarga e Instalación de Visual Basic.NET 2005 Express Edition

VB.NET 2005 Express Edition puede descargarse desde http://lab.msdn.microsoft.com/express/vbasic/default.aspx. Busca algún hipervínculo de descarga para la Community Technical Preview (Adelanto para la Comunidad Técnica) o algún hipervínculo tipo Download Now (Descargue Ahora).

Cuando hayas descargado el instalador, hazle doble clic para comenzar el proceso de instalación. Las opciones de la instalación por defecto deberían ser suficientes.

Inicio de Visual Basic.NET

Cuando ya hayas instalado VB.NET 2005, busca un acceso dentro de la sección Programas de tu menú Inicio que diga Visual Basic 2005 Express Edition Beta. Inicia VB.NET y presiona Ctrl + N para crear un nuevo proyecto.

Ingresa un nombre para el proyecto y elige la plantilla Windows Application (Aplicación para Windows). Presiona el botón OK (Aceptar) para crear el proyecto.

La Ventana Principal de VB.NET Window

Cuando se cree tu proyecto, deberías ver una ventana parecida a esta:

A la izquierda se encuentra la barra de herramientas. Puedes arrastrar elementos de la barra de herramientas para agregarlos a tu aplicación. En el centro tenemos el espacio de trabajo, el cual nos muestra el primer formulario en la vista Diseño. A la derecha está el Solution Explorer (Explorador de Soluciones), que muestra todos los archivos involucrados en nuestro proyecto.

Asignar un Nombre al Formulario por Defecto

Primero haz clic en el objeto Form1.vb del Solution Explorer y elige la opción Properties (Propiedades). Esto te mostrará una ventana de diálogo de propiedades donde podremos renombrar el archivo.

La herramienta Propiedades se utiliza para establecer varias propiedades de los objetos que manejaremos a medida que trabajemos en nuestro proyecto. En este caso, queremos cambiar la propiedad File Name (Nombre de Archivo) para reflejar más apropiadamente el propósito del formulario. Agregaré el prefijo frm a los nombres de los formularios. No cambies la extensión del archivo del formulario.

Cuando hayas cambiado el nombre del archivo, haz clic en el formulario dentro del espacio de trabajo. La herramienta Propiedades cambiará para reflejar las propiedades del formulario. Desplázate hacia abajo hasta que encuentres la propiedad Text (Texto) y ponle algo apropiado. En mi caso, le puse Entrada-Salida - Acceso. La propiedad Text determina lo que aparece como título del formulario y puedes ver esto reflejado en el espacio de trabajo.

Agregar Referencias

Antes de comenzar a utilizar Connector/NET con Visual Basic, necesitamos agregar una referencia a nuestro proyecto. Al agregar una referencia, le estamos diciendo a VB.NET dónde debe buscar MySQL Connector/NET para poder acceder a los objetos y métodos de Connector/NET.

Para agregar una referencia, elige la opción Add Reference… (Agregar Referencia…) del menú Project (Proyecto). Elige la solapa Browse (Examinar) y localiza la instalación de Connector/NET, generalmente ubicada en C:\Program Files\MySQL\MySQL Connector Net 1.0.2\bin\.NET 1.1 (o su equivalente C:\Archivos de Programa\MySQL\MySQL Connector Net 1.0.2\bin\.NET 1.1) (La ruta puede variar dependiendo del número de versión de Connector/NET). Elige el archivo MySql.Data.dll y connector/NET se agregará a tu proyecto.

Guardar el Proyecto

Ahora que ya hemos configurado algunas opciones de nuestro proyecto, deberíamos guardar el proyecto antes de continuar. Elige la opción Save All (Guardar Todo) del menú File (Archivo). Como esta es la primera vez que guardamos el proyecto, aparece la siguiente pantalla de diálogo:

Estas opciones deberían aceptarse generalmente, guardando el proyecto en una nueva carpeta dentro de la carpeta Mis Documentos/Visual Studio/Projects (en mi caso utilizo una ruta personalizada a Mis Documentos). Presiona el botón Save (Guardar) para guardar tu proyecto.

Diseño del Formulario de Acceso

Para diseñar el formulario de acceso, arrastra los objetos desde la barra de herramientas hasta el formulario. En nuestra primera versión necesitaremos pedirles a los usuarios un nombre de servidor, nombre de usuario y contraseña. Haz clic en el objeto TextBox de la barra de herramientas y arrástralo hasta el formulario. Una vez que se ubique dentro del formulario, lo puedes estirar, mover y generalmente mejorar su tamaño y posición. Cuando estés contento con la ubicación del cuadro de texto, ve a la herramienta Propiedades y busca la propiedad Name (Nombre). Cambia el nombre para reflejar mejor el uso del cuadro de texto (en mi caso le puse txtServidor). Agrega dos cuadros de texto adicionales y llámalos txtUsuario y txtContraseña.

Aunque nos parezca obvio cuál es el propósito de cada cuadro de texto, el usuario final probablemente necesite algo de ayuda. Utilizaremos objetos Label (Etiquetas) como indicios para el usuario que le indicarán para qué se utiliza cada cuado de texto. Arrastra el objeto etiqueta hasta el formulario y ubícala en la misma línea que el primer cuadro de texto. Una vez que está ubicada, busca la propiedad Text (Texto) en la herramienta Propiedades y ponle algo como Servidor:. Repite este proceso dos veces más para los objetos TextBox restantes. Como no utilizaremos las etiquetas en el código verdadero de la apliación, no hay necesidad de cambiar los nombres por defecto de las etiquetas.

El elemento final que debe agregarse a nuestro formulario será un par de botones; uno para iniciar el proceso de acceso y el otro para cancelar. Arrastra los botones al formulario y establece la propiedad Name (Nombre) a cmdIngresar y cmdCancelar. Cambia la propiedad Text (Texto) a Ingresar y Cancelar, respectivamente.

Cuando hayas terminado este proceso, tu formulario debería verse así:

Creación de un Evento

Voy a empezar creando un evento para el botón Cancelar. Un evento es algo que dispara la ejecución de código dentro de VB.NET. En este caso, el evento en cuestión será el haber presionado el botón Cancelar. La forma más simple de crear un evento de clic de botón es hacer doble clic en el botón del formulario. Cuando haces doble clic en el botón cancelar, se mostrará la vista Código del formulario y podrás ver el siguiente código:

Public Class frmAcceso
Private Sub cmdCancelar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdCancelar.Click

End Sub
End Class

La línea Public Class indica que esta clase describe nuestro formulario y la línea Private Sub muestra que esta es una subfunción que maneja el evento Click del objeto cmdCancelar. Las dos líneas End muestran dónde termina el código de cada una de estas secciones.

Agregaremos una única línea a la subfunción para cerrar la aplicación cuando se haga clic en el botón:

Application.Exit()

Esta línea le indica a la aplicación que debe cerrarse y será ejecutada cuando hagamos clic en el botón Cancelar. Ahora, tu código debería verse así:

Public Class frmAcceso
Private Sub cmdCancelar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdCancelar.Click
Application.Exit()
End Sub
End Class

Inicio de la Apliación

Una vez que hayas ingresado el código, guarda el proyecto y presiona la tecla F5 para probar la aplicación. También puedes elegir la opción Start (Iniciar) desde el menú Debug (Depuración) hacer clic en el icono verde de la barra de herramientas.

Tu formulario debería mostrarse y si haces clic en el botón Cancelar, el formulario debería desaparecer para cerrar la aplicación. Si presionas el botón Ingresar, no sucederá nada ya que no hemos creado ningún código para el evento de presionar el botón Ingresar.

Importación del Sistema de Nombres de Connector/NET

Los objetos de VB.NET se organizan en sistemas de nombres. Los sistemas de nombres son agrupaciones lógicas de objetos que se utilizan para facilitar la organización los distintos objetos disponibles en VB.NET.

Para utilizar un objeto Connection necesitas definirlo como MySql.Data.MySqlClient.MySqlConnection (hablaremos más sobre este objeto luego). Por supuesto que esto es muy largo para escribirlo seguido por lo que podemos utilizar la sentencia Imports para acortarlo.

Si agregamos Imports MySql.Data.MySqlClient al principio del archivo fuente, nos podemos referir al objeto Connector/NET como MySqlConnection.

Agregar un Objeto MySqlConnection

MySQL Connector/NET es básicamente una colección de objetos utilizados para acceder a una base de datos MySQL. El primer objeto que utilizaremos es el objeto MySqlConnection. El objeto de conexión funciona como un intermediario entre los demás objetos contenidos dentro de Connector/NET y el servidor MySQL. El objeto de conexión maneja el proceso de acceso y es el objeto que utilizaremos para verificar que la información de acceso de un usuario es correcta.

Existen dos pasos para crear un objeto. Primero, declaramos el objeto, luego lo instanciamos. Cuando declaramos un objeto, le asignamos un nombre que usaremos para referirnos a él y también indicamos el alcance del objeto, o en otras palabras, qué funciones y procedimientos puede acceder el objeto. En nuestro caso, tenemos que asegurarnos de que cualquier función o procedimiento dentro del formulario tenga acceso al objeto de conexión, por lo tanto declararemos el objeto de conexión en primer lugar dentro de la clase:

Imports MySql.Data.MySqlClient

Public Class frmAcceso
Dim con As MySqlConnection
Private Sub cmdCancelar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdCancelar.Click
Application.Exit()
End Sub
End Class

La palabra clave Dim se utiliza al declarar objetos y variables. Yo utilicé con como nombre para mi objeto de conexión. La palabra clave As se usa para indicar qué estamos declarando (un objeto, una variable, etc). Finalmente, MySqlConnection es el objeto que estamos declarando.

Instanciación del Objeto MySqlConnection

Ahora que ya hemos declarado el objeto de conexión, debemos instanciarlo. Hasta que no hayamos instanciado un objeto, no estará disponible para ser utilizado. Instanciaremos el objeto dentro de la subfunción que maneja el evento click del botón Ingresar. Haz doble clic en el botón Ingresar en la vista Diseño para crear la subfunción.

Para instanciar el objeto utilizaremos la palabra clave New:

Private Sub cmdIngresar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdIngresar.Click
con = New MySqlConnection()
End Sub

Armado del String de Conexión

El objeto MySqlConnection utiliza un string de conexión para conocer a qué servidor debe conectarse, qué base de datos acceder y qué nombre de usuario y contraseña utilizar para autenticarse. Las distintas propiedades se separan con punto y coma. Este es un ejemplo de un string de conexión:

server=localhost; user id=mike; password=12345; database=entrada_salida

Obviamente, necesitamos que el string de conexión refleje la información que el usuario ingrese en el formulario. Para hacer esto utilizaremos el carácter & para unir los distintos strings y el valor .Text de los objetos TextBox. Adicionalmente, utilizaré el carácter _ para separar el código en varias líneas:

Private Sub cmdIngresar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdIngresar.Click
con = New MySqlConnection()
con.ConnectionString = "server=" & txtServidor.Text& ";" _
& "user id=" & txtUsuario.Text& ";" _
& "password=" & txtContraseña.Text& ";" _
& "database=entrada_salida"

End Sub

Apertura de la Conexión

Lo último que nos queda por hacer es indicarle al objeto de conexión que abra la conexión con el servidor MySQL mediante el método .Open() del objeto de conexión:

Private Sub cmdIngresar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdIngresar.Click
con = New MySqlConnection()
con.ConnectionString = "server=" & txtServidor.Text& ";" _
& "user id=" & txtUsuario.Text& ";" _
& "password=" & txtContraseña.Text& ";" _
& "database=entrada_salida"

con.Open()

End Sub

Utilización de un MessageBox

Cuando hayamos abierto la conexión con éxito, querremos que el usuario sepa si su nombre de usuario y contraseña eran correctos. Podemos lograr esto con el objeto MessageBox. En su forma más simple, el objeto MessageBox (cuadro de mensaje) le mostrará un mensaje al usuario con un botón Aceptar. Esta es una simple línea de código para mostrar un MessageBox:

MessageBox.Show("Conexión Abierta Con Éxito!")

Cierre de la Conexión

Cuando hayamos terminado con el objeto de conexión tendremos que cerrarlo. Al cerrar la conexión liberamos los recursos necesarios para mantener la conexión activa. Es una buena práctica cerrar las conexiones ni bien hayas terminado de utilizarlas. Una conexión se cierra con el método .Close().

con.Close()

Eliminación del Objeto MySqlConnection

Cada vez que hayamos terminado de trabajar por completo con un objeto es una buena práctica eliminarlo, reduciendo así el consumo de recursos de nuestra aplicación. Cuando eliminamos un objeto, los recursos que ocupaba se liberan y el objeto deja de existir. Eliminamos un objeto llamando a su método .Dispose().

con.Dispose()

Captura de Errores

Actualmente, nuestro código es apropiado para una situación ideal. Si no podemos conectarnos al servidor o si ingresamos un nombre de usuario o contraseña equivocada el objeto de conexión devolverá un error, también conocido como excepción. Para manejar errores, VB.NET tiene una sintaxis especial de TRY … CATCH … FINALLY. Ponemos el código con los errores potenciales después de la palabra clave TRY pero antes de la palabra clave CATCH. LA palabra CATCH se utiliza para indicar qué clase de error nos podemos encontrar (en nuestro caso, el error devuelto será un objeto Connector/NET MySqlException). Todo el código ubicado a continuación de la palabra clave FINALLY será ejecutado haya o no un error. Si ocurre una excepción, el código restante de la sección TRY no será ejecutado.

Este es el código final que maneja la conexión:

Private Sub cmdIngresar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdIngresar.Click
con = New MySqlConnection()
con.ConnectionString = "server=" & txtServidor.Text& ";" _
& "user id=" & txtUsuario.Text& ";" _
& "password=" & txtContraseña.Text& ";" _
& "database=entrada_salida"

Try
con.Open()
MessageBox.Show("Conexión Abierta Con Éxito")
con.Close()
Catch mierror As MySqlException
MessageBox.Show("Error de Conexión a la Base de Datos: " & mierror.Message)
Finally
con.Dispose()
End Try
End Sub

Esto combina todo el código de conexión y permite manejar errores sin que la aplicación se cierre por operaciones inválidas. Instanciamos el objeto de conexión y le asignamos un string de conexión. Dentro de un bloque TRY … CATCH de manejo de errores, intentamos abrir la conexión al servidor y, si se realiza con éxito, le mostramos un MessageBox al usuario indicando el éxito y luego cerramos la conexión.

Si ocurre un error al conectarse, se ejecutará el código del bloque CATCH. En este caso le mostraremos al usuario un MessageBox con la propiedad .Message del objeto MySQLException, que contiene el mensaje asociado al error comprensible para los humanos.

En el bloque FINALLY eliminamos el objeto de conexión. Hacemos esto en el bloque FINALLY porque haya o no tenido éxito la conexión, querremos eliminar el objeto.

Prueba del Proyecto

Cuando el código esté en su lugar, guarda el proyecto y presiona la tecla F5 para iniciar la aplicación en modo depuración. Prueba la verdadera dirección del servidor, nombre de usuario y contraseña, luego prueba usar una dirección de servidor equivocada y luego prueba una contraseña errónea. Notarás distintos mensajes de error al utilizar una dirección errónea que al utilizar una contraseña errónea. El mensaje de error al utilizar un nombre de usuario erróneo es el mismo que al utilizar una contraseña errónea, ya que un mensaje de error separado constituiría una amenaza a la seguridad ya que un potencial intruso podría saber si un nombre de usuario es correcto o no.

Mejoras

Hay algunas mejoras que deberán hacerse a nuestro formulario de acceso. En primer lugar, nuestro usuario no debería tener que ingresar la dirección del servidor cada vez que deseen usar la aplicación y en un futuro veremos cómo guardar la dirección del servidor en un archivo de configuración.

La segunda mejora es con respecto al manejo de errores. Mostrar el mensaje de error de MySQL está bien durante la etapa de desarrollo pero la versión final de nuestra aplicación no debería mostrar los errores de la base de datos directamente. Podemos utilizar la propiedad .Number del objeto MySqlException para determinar qué clase de error estamos tratando y luego crear un mensaje de error personalizado.

Para finalizar, obviamente necesitaríamos lograr que una conexión exitosa nos lleve a un nuevo formulario en nuestra aplicación. Si nuestra aplicación consistiera en formulario de acceso y nada más, seguramente no será muy popular.

Conclusión

En este tutorial hemos explicado la instalación de MySQL Administrator y la creación de una nueva cuenta de usuario MySQL. Luego instalamos VB.NET y MySQL Connector/NET. Finalmente utilizamos VB.NET para crear un formulario de acceso para nuestra aplicación que nos conecta al servidor MySQL (suponiendo que ingresamos la dirección de servidor y el nombre de usuario y contraseña correcta). El formulario se configuró para manejar errores durante la conexión mediante el uso de la sintaxis TRY … CATCH … FINALLY.

El archivo del proyecto creado en este tutorial está disponible en el hipervínculo de abajo. Los archivos del proyecto son para Visual Basic 2005 Express Edition.

En el próximo tutorial crearemos nuestro primer evento y haremos un formulario para mostrar el estado actual de nuestros usuarios.
Código de Ejemplo #1
Descargar Código de Ejemplo Adjunto

Ejemplo de cómo conectarse a una Base de Datos MySQL utilizando VB.NET y Connector/NET.

Private Sub cmdIngresar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdIngresar.Click
con = New MySqlConnection()
con.ConnectionString = "server=" & txtServidor.Text& ";" _
& "user id=" & txtUsuario.Text& ";" _
& "password=" & txtContraseña.Text& ";" _
& "database=entrada_salida"

Try
con.Open()
MessageBox.Show("Conexión Abierta Con Éxito")
con.Close()
Catch mierror As MySqlException
MessageBox.Show("Error de Conexión a la Base de Datos: " & mierror.Message)
Finally
con.Dispose()
End Try
End Sub

64 Responses to “El tutorial de VB-MySQL - Parte 3”

  1. Kevin Says:

    Por favor publique los demas tutos al español, son myu buenos y me interesa mucho seguir las instrucciones que ustedes enseñan
    Gracias por su colaboracion . Y muchas Felicitaciones por interesarsen a compartir sus enseñanzas con nosotros

  2. whidbey Says:

    Hola, excelentisimo manual, no pense que fuera a ser tan bueno y tan detallado, la pregunta es si existe alguna forma de hacer esto de manera visual, es decir arrastrando y soltando, respondanme al correo porfavor.

  3. Fernando Rios Says:

    Sabes amigo he tenido dificultades para crear un exe sobre mono. Mi proyecto utiliza el conector de MySQL, y lo he instalado para mono. He visto un comentario tuyo en referencia a que funciona bajo esta plataforma, y me encantaría ver una explicación de cómo se hace. Salu2 desde Mexico.

  4. Johnny F. Rojas G. Says:

    De verdad sería una muy buena idea q publicaran todos en español, es excelente este tutorial…

  5. Andres Ramiro Cruz Jaime Says:

    por favor publique todo el resto de manual :S

  6. Edgar Castellanos Says:

    Excelente manual, hasta yo le entendi y eso es decir bastante ya que soy muy torpe programando. Por favor le agradeceira infinitamente que siguiera con los manuales. :D

  7. Emilio Diaz Says:

    excelente tutorial, sigan asi……..

  8. jesus Says:

    hey, a mi no me funciona el codigo… me da un error donde dice con = New MySqlConnection()… alguien puede ayudarme?

  9. Johnny F. Rojas G. Says:

    Jesús revisa si agregastes correctamente la referencia (MySql.Data.dll) y acuérdate de importar el paquete (Imports MySql.Data.MySqlClient) revisando esas dos cosas se te soluciona el problema. Suerte.

  10. jesus Says:

    Hola Johnny, si agregué la referencia MySql.Data.dll y tambien coloqué el Imports MrSql.Data.MySqlClient… pero sigue arrojándome el error =S gracias… =) seguiré intentando a ver

  11. jesus Says:

    jeje, yo estoy nuevo en el vb .net, y me bajé la edición express… sumamente espectacular… ya me di cuenta del error, fue una torpeza… estaba colocando el código directamente dentro de “Public Class Form1″ y “End Class”, ahora las coloqué dentro del LOAD del form, y funciona, todo calidad… pero ahora tengo otro error, ya que el tratar de conectarme al servidor remoto, me dice que hay un problema con alguna especificación del host… es neceario colocar IP? o puede ser por el dominio???? Gracias ! =)

  12. jesus Says:

    qué tal? soy yo una vez más… el error que me da es el siguiente:

    “Unable to connect to any of the specified MySQL hosts…”

    Espero que alguien pueda ayudarme porque la verdad no tengo idea, yo le pasé todos los datos de mi servidor mysql en internet…

  13. Johnny F. Rojas G. Says:

    Hola Jesús, crea una cuenta anónima eso debería solucionarte el problema, intenta a ver.

  14. Alex Figueroa Says:

    Por que mejor no abres una discusión en el foro en español…

    bueno pero de igual manera lo que debes crear es al usuario root o a los usuarios que vayan a ingresar en tu bdd con la opción de % en vez de localhost, mejor dicho:

    Qry = “GRANT ALL PRIVILEGES ON *.* TO ‘” & NomUsr & “‘@’%’ IDENTIFIED BY ‘” & PasUsr & “‘”

  15. welington Says:

    soy nuevo en lo que es vb.net pero tengo conocimientos (ni avanzado -ni novato) de vb,, me interesa seguir el proyecto de este forum “El tutorial de VB-MySQL” que por el momento ya consegui la parte No. 3 pero lo hice atraves de “la web del programador”,,, mi pregunta es…

    hay una forma directa de llegar hasta estas publicacion sin intermediario “la web del programador u otro site”

    le agradeceria la informacion

  16. Alex Figueroa Says:

    Mira Wellington esta es la “traducción oficial” del tutorial, por el momento ando muy ocupado para poder seguir publicando las traducciones de los demás temas o capítulos, apenas tenga tiempo retomaré el trabajo de los demás, pero si alguien podría ayudarme en esto, yo haría la revisión y los publicaría…

  17. Andres Ramiro Cruz Jaime Says:

    hola amigo por danos una mano con la traduccion, yo soy inutil hasta las patas con el ingles, solo se un poco del tecnico. no quiero parecer lamer pero en cuanto puedas ayudarnos traduciendo lo que falta estaremos totalmente agradecidos

  18. Alex Figueroa Says:

    No hay problema espero dentro de un mes terminar unos dos proyectos y continuaré con lo ofrecido, hasta mientras pueden utilizar el foro para poder preguntar o aclarar dudas acerca de lo que necesiten…

  19. Claudio Says:

    Muy bueno los articulos con esta exelente base de datos, que la vengo utilizando hace rato

  20. Fher Says:

    Excelente Manual funciono correctamente, únicamente el detalle que tube es que al principio si no aprece por predeterminado la clase MYSQL, se puede agregar desde Menú Proyecto->Agregar Referencia (.net) se agrega MYSQL.data.
    Saludos

  21. M.Ivan Says:

    hola que tal que buenos manuales estoy estudiando lic. en informatica y me interesa hacer un proyecto de visua basic sobre una bases de bases de MYSQL y aqui hee encontrado muy buen material

    espero que sigan publicando mas manuales me interesan mucho

  22. joel Says:

    Exelente tutorial, espero pronto esten las otras partes.

  23. William Says:

    Una pregunta, hago esa pantalla para conectarme a una BD MySQL y cuando hago un windows form como hago para que utilice ese string de conexión, soy nuevo programando en vb 2005.

    Gracias por la ayuda!!!

  24. Antonio Says:

    Que tal, soy un poco nuevo en VB.net y MySQL, conozco mas de access pero quiero aprender este sistema. Tengo el VB.Net 2005 y MySQL 5.0, baje el conector 5.0.7 pero no me dejo insertar el dll porque es para .Net 2.0 y el que tengo es 1.0 asi que baje el conector 1.0.9 que ya me dejo insertar el dll. Ahora tengo el siguiente problema: Me dice que no se puede conectar a ninguno de los host SQL especificados. El codigo que utilizo es el siguiente:

    Dim cad As String = ” Database=sapam ; server=localhost ; User Id=root ; Password=1234 ”
    Dim con As New MySqlConnection(cad)
    con.Open ()

    Espero alguien me pueda decir si estoy haciendo algo mal. Instale MySQL en mi pc e hice una db que se llama sapam con el pass 1234. Gracias de antemano por su ayuda.

  25. William Says:

    Recomiendo bajar el conector .NET version 5.1 soluciona varios problemas que presenta la version 5.0.x a mi me funciono mejor y con esta me conecto a MySQL

  26. William Says:

    Ejemplo de conexion

    ********* Ojo con esto si no ***************

    Imports MySql.Data.MySqlClient

    *****************************************

    Public Class frmLogin
    Dim conn As MySqlConnection

    Private Sub cmdCancel_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdCancel.Click
    Application.Exit()
    End Sub

    Private Sub cmdLogin_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdLogin.Click
    conn = New MySqlConnection()
    conn.ConnectionString = “server=” & txtServer.Text & “;” _
    & “user id=” & txtUsername.Text & “;” _
    & “password=” & txtPassword.Text & “;” _
    & “database=in_out”

    Try
    conn.Open()
    MessageBox.Show(”Connection Opened Successfully”)
    conn.Close()
    Catch myerror As MySqlException
    MessageBox.Show(”Error Connecting to Database: ” & myerror.Message)
    Finally
    conn.Dispose()
    End Try
    End Sub
    End Class

  27. maria Says:

    Tengo un grave problema, no puedo instalar el mysql connector net 5.x, mientras se está instalando surge el error: “Input string was not in a correct format” alguna idea? es urgente

  28. Pepe Says:

    Hola, ya he creado la conexion hacia la base de datos mysql, pero tengo un problemita, despues de todo esto como manipulo la BD??? como añado , borro, modifico, muestro registros?? . Disculpen la ignorancia, pero si alguien me puediera decir como se lo agradecere mucho

  29. Agustín Says:

    una pregunta, esto se puede aplicar tambien a visual basic .net 2003

  30. adalberto Says:

    codigo fuente para resolver la ecuacion cuadratica de la forma x2+bx+c

  31. adalberto Says:

    enviar codigo a este correo

  32. Anny Says:

    Hola yo tuve problemas cuando corri el programa me salia que el conn no estaba declarado, fui a ver y estaba declarado asi:
    Public Class frmAcceso
    Dim con As MySqlConnection lo que hice fue agregarle otra n al con asi conn ejemplo:

    Public Class frmAcceso

    Dim conn As MySqlConnection
    y me corrio enseguida sin problemas.
    Me encanto este tutorial lo entendi super rapido espero que nos enseñes mas.

  33. Silvia Says:

    La verdad me parece interesante el artículo pero me gustaría saber cómo le hago para insertar datos desde un formulario a MySQL?

  34. Henry Says:

    Una guía muy didáctica.
    Gracias.

  35. Dick Castillo Says:

    muy bueno el proyecto, se entiende a la perfección.
    por favor un proyecto crear un formulario y una tabla con nombre y contraseña de usuarios y poder cambiar desde el proyecto las contraseñas.

    gracias.

  36. fransico Says:

    los ejemplos no se pueden descargas podrias areglar los links porfavor

  37. Joel Says:

    tengo problemas para iniciar el MySQL Administrator, es de cir, me da error number 2005 al crear una nueva conexion, alguien que me diga como arranca eso !!!!

  38. Raul Parra Says:

    Por favor de donde puede bajar los ejemplos

  39. vice f dumen Says:

    saludos hola raul tengo la misma pregunta donde lo puedo bajar el link http://www.vbmysql.com/download/vb-mysql-tutorial-3.zip esta roto

    nose mucho de visual pero tengo mucho conosimienoto en DB y nesesito aser un formulario en visual e integrarlo con vb y ver el codigo de este tutorial me aria mucha ayuda si alguien sabe de otros tutoriale pls envienme un email a vcorp11@hotmail.com

  40. vice f dumen Says:

    tengo la misma pregunta donde lo puedo bajar el link http://www.vbmysql.com/download/vb-mysql-tutorial-3.zip esta roto

    nose mucho de visual pero tengo mucho conosimienoto en DB y nesesito aser un formulario en visual e integrarlo con vb y ver el codigo de este tutorial me aria mucha ayuda si alguien sabe de otros tutoriale pls envienme un email a vcorp11@hotmail.com

  41. Fernando Says:

    Genial.. funciona de maravilla.. aunque acotando yo me instalé EasyPhp que maneja servidor Apache, y EMS SQL Manager para manipular las Bases de Datos y funciona de maravilla.

    Y me adhiero a lo que mis compañeros están pidiendo …. el resto de los tutoriales. Sobre todo la parte de ABM..

    Saludos…

    Fernando Sotomayor
    La Paz - Bolivia.

    Pd. tengo un manual super completo en pdf de VB.Net asi que si alguien quiere me avisa para que se lo envíe.

  42. Fernando Says:

    Perdón mi mail es. fsotomayor@gmail.com

    Fernando Sotomayor
    La Paz - Bolivia

  43. carlos Says:

    muy tutorial me gustaria como modificar, desde un formulario la base de datos de mysql

  44. carlos Says:

    elcarlos_mc7@hotmail.com este es mi correo para ver si me podias auxiliar ese parte es muy bueno el tutorial

  45. PParker Says:

    Hola, buen día:

    Estoy desarrollando un pequeño sistema de consulta utilizando vb net y mysql, se supone que ya hace todo l que tiene que hacer insertar, consultar, eliminar y demás… Peeeeeeroooo, ahora me han solicitado una interface para crear la base de datos del sistema, ya tengo el script y a base funciona bien, pero aún no encuentro como ejecutar el script desde vbnet, me podrán ayudar con esto???

    Sin más por ahora y en espera de su valiosa participación, quedo de ustedes.

    Saludos!!!

  46. Russvell Jesus Says:

    Hola a todos, estoy tratando de hacer la conexion en ASP .NET y no logro hacer no si alguien me puede ayudar el error que me sale es unable to connect to any the specified MySQL hosts, ya hice todo lo que me dijieron pero nada alguien sabe que puede estar pasando…. Gracias, este es mi codigo en ASP .NET que deberia ser los mimo de VB .NET ya que traba con esa clase

    Imports MySql.Data.MySqlClient
    Partial Class _Default
    Inherits System.Web.UI.Page

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    Dim cadSQL As String
    cadSQL = “Database=Test;Data Source=localhost;User Id=Admin;Password=admin”
    Dim cn As New MySqlConnection(cadSQL)
    Try
    cn.Open()
    Catch ex As Exception
    MsgBox(ex.Message, MsgBoxStyle.Critical, “Error…”)
    End Try
    End Sub
    End Class

  47. szombie Says:

    tnx man.. that help me a lot…

  48. Dixon Says:

    Hola Russvell, ya intentaste de la forma en que lo muestra este tutorial? osea, no creando la cadena y creando el objeto MySqlConnection mandandole como parametro esa cadena como tu lo haces:

    Dim cadSQL As String
    cadSQL = “Database=Test;Data Source=localhost;User Id=Admin;Password=admin”
    Dim cn As New MySqlConnection(cadSQL)

    Sino creando el objeto y luego decirle a al atributo ConnectionStrgin

    con = New MySqlConnection()
    con.ConnectionString = “server=localhost;user id=Admin;password=admin;database=Test”

    No se si sea muy diferente, pero en vb me funciona asi, tal y como nos dice el tutorial, espero que lo puedas solucionar.

    suerte.

  49. Dixon Says:

    Hola Russvell, el error “unable to connect to any the specified MySQL hosts” me salio a mi cuando estaba ejecutando el codigo pero no tenia mi computador como servidor, para poder conectarme a mysql, el programa que utilizo yo para solucionar esto se llama WAMP, que me permite volver mi computador como servidor y ademas tiene el servicio de mysql y contiene phpmyadmin para administrar la base de datos.

    espero que te sirva, corriendo ese programa ya no me genera ese error.

    suerte

  50. antonio Says:

    FELICIDADES……!!!!!!!!!!!!!!!!!
    EXCELENTE MANUAL….

  51. proncillo Says:

    Excelente aplicación. Despues de realizar la base de datos y la aplicación en Visual, me sale el siguiente error: Error Connecting to Database: UnKnown column ‘id’ in ‘filed list’-
    Si alguien me echa una amno, porque ya no sé que hacer. Muchas gracias

  52. Xored_mx Says:

    Hola solo para aclara un punto, no se a ustedes, pero a mi me paso que al utilizar el string basico senialado al instanciar, y mandarlo llamar con el metodo cmdConectar, me dio un error que no se puede cnecatr al host especificado… les copio el estrin basico:

    con.ConnectionString = “server=” & txtServidor.Text& “;” _
    & “user id=” & txtUsuario.Text& “;” _
    & “password=” & txtContraseña.Text& “;” _
    & “database=entrada_salida”

    bueno se me resolvio el error agrgando el valor del puerto, digo, no importa el orden el sistema se encargara de cacheralo, les paso el code:

    con.ConnectionString = “Database=” & textDb.Text _
    & “;” & “Port=” & textPort.Text _
    & “;” & “Server=” & textDbSvr.Text _
    & “;” & “User Id=” & textUser.Text _
    & “;” & “Password=” & textPass.Text
    bueno difiere un poco del ejemplo por que lo estoy contruyendo para manjera multiples bases… jejeje aun asi quedo a sus ordenes ojala sea de mucha utilidad!!!!

    DLB xored_mx

  53. famae Says:

    Maestro diste un exelente punto de partida

  54. Xored_mx Says:

    Gracias!!! pero no me lo agardescas a mi, es gracias a Dios, por cierto, en verdad espero no incomodar con esto a los foristas, (lo de Dios)… les comento un detalle mas… este problema se me presento, por que hice la instalacion a mano, es decir se instalan por separado my sql, el apache y el php, segun io… no es necesario instalar un sistema completo de web server, basta con el my sql… mi version del mysql es 5.0.45 comunity-nt via tcp-ip

    que tengan exclente dia!!!!

  55. Dixon Says:

    Hola proncillo, debes revisar si en tu base de datos tienes una columna llamada “id”, o por lo menos ese es el error que te esta saliendo. Solo te puedo decir.. revisa tu BD y mira bien el nombre de la columna a la cual estas referenciado.

    Suerte.

  56. Mario Says:

    Esta muy bien el ejemplo pero si quisiera conectarme por medio de una red local que es lo que tengo que hacer, nesesito hilos acaso si esta es miltiusuario? o solo en el parametro “server” le pongo el ip de la maquina servidor o que es lo que se tiene que hacer

  57. Mariella Says:

    SE LUCIERON CON ESTE TUTORIAL, muchas gracias por compartir el conocimiento con nosotros.

  58. Juan de Dios Says:

    Cuando quiero separar la parte de la conexión al servidor y a la base de datos en MySQL en un módulo me sale errores en:

    con = new MySqlConnection

  59. DDARTHP Says:

    hola Men Muy Buen tutorial, me aliviano un mucho el trabajo, pero ahora tengo un problema la cuestion es que necesito leer de una tabla los datos luego ponerlos dentro de textBox y pues la verdad hasta ahora no he podido tengo el codigo hasta aqui y se que funciona bien

    Imports MySql.Data.MySqlClient
    Public Class frmCarnet
    Dim con As MySqlConnection

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
    Dim objDataSet As DataSet
    Dim servidor As String = “INETSERVER”
    Dim usuario As String = “SECRETARIA”
    Dim contraseña As String = “password=a303365″
    Dim database As String = “database=asuhebrapa”
    con = New MySqlConnection()
    con.ConnectionString = “server=” & servidor & “;” _
    & “user id=” & usuario & “;” & contraseña & “;” & database & “”

    Dim strSQL As String
    Dim registro As Integer

    strSQL = “SELECT * FROM estudiantes WHERE cc =”" & cc.Text & “”ORDER BY cc”
    If cc.Text = “” Then
    MsgBox(”Ingrese el numero de identificación del Alumno”)
    cc.Focus()
    Exit Sub
    End If

    se que el codigo lee lo que necesito pero no se como ver los datos que lee ni como utilizarlos
    de antemano gracias por la respuesta

  60. Gaby20 Says:

    Hola alguien q por favor me ayude estoy trabajando en VB.net y my sql manager 2007
    necesito un pequeño codigo de eliminar los datos de una tabla con procedimientos almacenados
    Desde ya muchas gracias

  61. dxrfoqwvu wipbdnez Says:

    jiaumwf jnexualt yedofah tluekp xkzqdigt unbcqztav bqkcoz

  62. fAbY Says:

    Adapte el codigo, solo quiero hacer la conexion a la bd:
    _______________________________________
    Option Explicit On

    Imports MySql.Data.MySqlClient
    Public Class Form1
    Inherits System.Windows.Forms.Form

    #Region ” Windows Form Designer generated code ”

    Public Sub New()
    MyBase.New()

    ‘This call is required by the Windows Form Designer.
    InitializeComponent()

    ‘Add any initialization after the InitializeComponent() call

    End Sub

    ‘Form overrides dispose to clean up the component list.
    Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
    If disposing Then
    If Not (components Is Nothing) Then
    components.Dispose()
    End If
    End If
    MyBase.Dispose(disposing)
    End Sub

    ‘Required by the Windows Form Designer
    Private components As System.ComponentModel.IContainer

    ‘NOTE: The following procedure is required by the Windows Form Designer
    ‘It can be modified using the Windows Form Designer.
    ‘Do not modify it using the code editor.
    Private Sub InitializeComponent()

    ‘Form1

    Me.AutoScaleBaseSize = New System.Drawing.Size(5, 13)
    Me.ClientSize = New System.Drawing.Size(292, 268)
    Me.Name = “Form1″
    Me.Text = “Form1″

    End Sub

    #End Region

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    Dim con As MySqlConnection
    con.ConnectionString = “Server=127.0.0.1;Database=test;Uid=root;Pwd=;Por=3306″
    Try
    con.Open()
    MessageBox.Show(”Conexión Abierta Con Éxito”)
    con.Close()
    Catch mierror As MySqlException
    MessageBox.Show(”Error de Conexión a la Base de Datos: ” & mierror.Message)
    Finally
    con.Dispose()
    End Try

    End Sub
    End Class
    _____________________________________

    pero al ejecutarlo me sale este error:

    “an unhandled exception of ype “System.NullReferenceException’ ocurred in”

    x favor ayudenme. gracias

  63. fAbY Says:

    tmb el mismo id del codigo (”user id=”) pero tampoco funciono :(

  64. fAbY Says:

    ya lo solucione, me faltaba añadirle NEW a mi instancia de MySqlConnection ;-)

Leave a Reply