Como conectar Visual Basic .NET con MYSQL
Casiopea nos vuelve a sorprender con otro excelente aporte, cualquier duda postearla aquí.
1. Enlazar VB y MySQL.
1.1 Objetivos del tema.
Documentar los pasos a seguir para el uso de VB con bases de datos de MySQL.
1.2 Introducción.
MySQL se puede enlazar con el uso de ODBC, pero parece más cómodo, el uso del mismo sistema basado en los objetos de conexión. Estos están desarrollados y se pueden descargar de la página de SUN. Igualmente podemos descargar de la misma página el gestor de la base de datos, es decir MySQL y herramientas gráficas de administración.
1.3 Objetos necesarios.
La base de datos,
mysql-noinstall-5.1.33-win32
Los objetos de conexión para Visual Studio NET,
mysql-connector-net-5.x.x
Por comodidad la herramienta de administración del entorno de Windows,
mysql-gui-tools-noinstall-5.0-r17-win32
Se puede elegir entre descomprimir en la ruta que deseemos, o bien descargar una versión con instalador.
1.4 Utilización.
Instalar el gestor de MySQL, se compone de distintos elementos, que cumplen con las necesidades de administración desde la línea de comandos. El comando de inicio del gestor es
Código: | C:MySQL[/img]mysqld –u root |
Una vez que se ha lanzado el gestor de MySQL, el servidor de MySQL, la ventana de DOS, quedará abierta, y ejecutándose dicho servidor.
Mientras estemos utilizando VB con MySQL deberá estar abierta dicha ventana.
Podemos crear un archivo de proceso por lotes, un escrip, para su inicio y otro para su posterior parada.
Este sería el de inicio.
Código: | ECHO OFF
CLS
ECHO INICIO DE MySQL
D:
Cd D:\Mysql\mysql-5.1.33-win32\bin
MySQLd -u root |
Y el de parada
Código: | ECHO OFF
CLS
ECHO PARADA DE MySQL
D:
Cd D:\Mysql\mysql-5.1.33-win32\bin
MySQLAdmin -u root shutdown
Pause |
Con estos dos archivos tenemos suficiente para probarlo.
MySQL es una base datos muy completa, esos parámetros son los mínimos imprescindibles, a medida que se domina la herramienta, se deberán incluir más parámetros para su correcta utilización.
El uso se supone en modo local, 'localhost'.
1.5 Uso de VB con MySQL.
El primer paso será definir en referencias el uso de la librería, espacio de nombres, como deseemos llamarlo, de MySQL.
Deberemos saber donde hemos instalado dicha utilidad de SUN para su localización.
Para ello hay que acudir a Proyecto-Agregar referencia.
Y en la ventana
Pinchar en examinar hasta llegar a su ubicación, que por defecto es la que vemos.
Una vez seleccionada ya veremos como esta incluida la referencia en la pestaña de .Net.
A partir de aquí ya podemos hacer referencia a los mismos objetos que en SQL o en Acces para el uso de la base de datos, salvando las distancias claro está.
1.6 Creamos la base de datos.
Claro está que no hay porque hacerlo desde VB, pero veamos como hacerlo de forma mínima.
Antes de eso hay que configurar la conexión a la base de datos con el objeto Connection.
El nombre de la base de datos se supone declarado a nivel de módulo, la ruta será dentro del directorio de datos de MySQL, por defecto.
Código: | Public Sub ConfigConexion( ByRef Conexion As MySql.Data.MySqlClient.MySqlConnection)
Dim CadenaConexion As String = "Data Source=localhost;" & _
"Database=" & NombreBaseDatos & ";" & _
"User Id=root;Password="
Conexion = New MySql.Data.MySqlClient.MySqlConnection(CadenaConexion)
Try
Conexion.Open()
Catch ex As MySql.Data.MySqlClient.MySqlException
MsgBox("No se ha podido establecer " & vbCrLf & _
"la conexión con la base de datos.", MsgBoxStyle.Critical)
Finally
Select Case Conexion.State
Case ConnectionState.Open
Conexion.Close()
End Select
End Try
End Sub |
Está es una opción de entre varias posibles.
Hay que tener presente que la conexión es donde más cambios vamos a encontrar siempre.
Después vamos a necesitar un objeto del tipo Command que será el que realizará la tarea.
Código: | Private Sub CrearBaseDatos()
Dim Conexion As New MySql.Data.MySqlClient.MySqlConnection
Dim CadenaSQL As String = "CREATE DATABASE " & NombreBaseDatos & ";"
Dim CadenaConexion As String = "Data Source=localhost;User Id=root;"
Dim Comando As New MySql.Data.MySqlClient.MySqlCommand(CadenaSQL)
Conexion = New MySql.Data.MySqlClient.MySqlConnection(CadenaConexion)
Try
Conexion.Open()
Comando.Connection = Conexion
Comando.CommandType = CommandType.Text
Try
Select Case Comando.ExecuteNonQuery
Case 0
MsgBox("No se ha creado")
Case 1
MsgBox("Creada")
Case Else
MsgBox("A saber que ha pasado")
End Select
Catch ex As MySql.Data.MySqlClient.MySqlException
MsgBox("No se ha podido crear" & vbCrLf & _
"la base de datos.", MsgBoxStyle.Critical, Me.Text)
End Try
Catch ex As MySql.Data.MySqlClient.MySqlException
MsgBox("No se ha podido establecer la" & vbCrLf & _
"conexión con la base de datos.", MsgBoxStyle.Critical, Me.Text)
Finally
Select Case Conexion.State
Case ConnectionState.Open
Conexion.Close()
End Select
End Try
Conexion = Nothing
End Sub |
Esta es la sintaxis mínima para crear una base de datos.
Código: | Dim CadenaSQL As String = "CREATE DATABASE " & NombreBaseDatos & ";" |
Como no hay que esperar datos devueltos el objeto a utilizar para su creación es un objeto Command.
Código: | Conexion = New MySql.Data.MySqlClient.MySqlConnection(CadenaConexion)
Conexion.Open()
Comando.Connection = Conexion
Comando.CommandType = CommandType.Text
Select Case Comando.ExecuteNonQuery |
La pregunta de control se basa en que haya un dato devuelto, que es la creación de la base de datos.
Código: | Select Case Comando.ExecuteNonQuery
Case 0
MsgBox("No se ha creado")
Case 1
MsgBox("Creada")
Case Else
MsgBox("A saber que ha pasado")
End Select |
En el ejemplo se supone que forma parte de una utilidad y por eso el objeto conexión se configura en el mismo procedimiento.
También podemos hacerlo desde la herramienta gráfica de administración, pulsando en la zona de bases de datos y con el botón derecho del ratón seleccionar Create New Schema.
Respondemos OK y la base quedará creada.
1.7 Creamos las tablas.
Con la misma filosofía se puede proceder a crear la tablas de la base de datos. La sintaxis mínima puede ser esta.
Código: | "CREATE TABLE IF NOT EXISTS Tipo_Socio " & _
"( " & _
"Codigo VARCHAR(2) PRIMARY KEY," & _
"Denominacion VARCHAR(12) " & _
")" |
Solo hay que ceñirse a la sintaxis de SQL.
Un ejemplo algo más complejo
Código: | "CREATE TABLE IF NOT EXISTS Serv_Realiz " & _
"( " & _
"Socio VARCHAR(5)," & _
"Fecha VARCHAR(8), " & _
"Reserva VARCHAR(6), " & _
"Servicio VARCHAR(3) REFERENCES Servicios ON DELETE NO ACTION " & _
"ON UPDATE NO ACTION, " & _
"Numero VARCHAR(2) REFERENCES Serv_Exist ON DELETE NO ACTION " & _
"ON UPDATE NO ACTION, " & _
"Hora VARCHAR(5), " & _
"PRIMARY KEY (Socio, Fecha, Reserva)," & _
"FOREIGN KEY (Socio) REFERENCES Socios ON DELETE NO ACTION " & _
"ON UPDATE NO ACTION, " & _
"UNIQUE (Socio, Fecha, Reserva) " & _
")" |
El código puede ser el que sigue:
Código: | Private Sub CreaTabla(ByVal Conexion As MySql.Data.MySqlClient.MySqlConnection, _
ByVal Comando As MySql.Data.MySqlClient.MySqlCommand, _
ByVal CadenaSQL As String)
Comando = New MySql.Data.MySqlClient.MySqlCommand(CadenaSQL)
Comando.Connection = Conexion
Comando.CommandType = CommandType.Text
Try ' capturamos si hay errores
Select Case Comando.ExecuteNonQuery
Case 0
MsgBox("No se ha creado " & CadenaSQL, MsgBoxStyle.Critical, Me.Text)
Case 1
' Creada la tabla
Case Else
MsgBox("A saber que ha pasado")
End Select
Catch ex As Exception
' si hay errores retornamos el mensaje de error
MsgBox(ex.Message, MsgBoxStyle.Critical, Me.Text)
' 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
Comando = Nothing ' lo eliminamos de la memoria
End Try
End Sub |
La creación de la tabla se basa en el mismo sistema que antes, el uso de un objeto command.
El objeto connection se supone ya configurado.
Código: | Comando = New MySql.Data.MySqlClient.MySqlCommand(CadenaSQL)
Comando.Connection = Conexion
Comando.CommandType = CommandType.Text
Select Case Comando.ExecuteNonQuery
Case 0
MsgBox("No se ha creado " & CadenaSQL, MsgBoxStyle.Critical, Me.Text)
Case 1
' Creada la tabla
Case Else
MsgBox("A saber que ha pasado")
End Select |
Este procedimiento se llama pasando como parámetros un objeto Connection, un objeto Command, que se podría crear en el mismo procedimiento, no es imprescindible, y la instrucción SQL con la descripción de la tabla.
Código: | CreaTabla(Conexion, Comando, CadenaSQL) |
Este procedimiento se puede basar en un array que contenga todas las tablas y un sistema adjunto de checkbox que habilite las que deseamos crear, en la fase de pruebas de la aplicación es cómodo, después no tiene sentido.
Código: | ' Tablas de apoyo
V(1).Nombre = "Tipos de socios"
V(1).Create = "CREATE TABLE IF NOT EXISTS Tipo_Socio " & _
"( " & _
"Codigo VARCHAR(2) PRIMARY KEY," & _
"Denominacion VARCHAR(12) " & _
")" |
El bucle podría ser algo así.
Código: | While X < V.Length
Objeto = CType(Me.Panel01.Controls.Item(X), CheckBox)
Select Case Objeto.Checked
Case True
CreaTabla(Conexion, Comando, V(X).Create)
End Select
X=X+1
End While |
Esta es una forma de crear las tablas desde programa.
Pero disponemos de la opción del programa de administración del entorno gráfico que es comodo.
Para ello arrancamos el programa MySQLAdministrator y pulsamos en el botón de Create Table.
La ventana del programa es esta.
Seleccionamos en la lista de la izquierda la base de datos que deseamos utilizar y después pulsamos Create Table.
La ventana de creación de una tabla es la que vemos y solo hay que ir añadiendo los campos e ir jugando con las pestañas de opciones en función de las necesidades de cada campo.
Al finalizar pulsar Apply Changes veremos como aparece una ventana con el código SQL de la tabla, solo tenemos que pulsar Execute, y la tabla se incorporará a la base de datos.
Y el resultado es la adición de la tabla a la base de datos.
[img] align="" width="692" height="79" src="imagenes/Nivel_3_1_img_8.jpg[/img]
Podemos observar como el motor de la tabla está mal seleccionado con respecto al resto de las tablas de la base de datos.
Habría que seleccionar con el botón derecho en la tabla la opción de editar tabla, para volver a la misma ventana de antes y en la pestaña de Table Options cambiar el motor de la tabla para que todo quede bien.
Y así con todas las tablas que deseemos crear o modificar.
En esa ventana también podemos editar los datos de las tablas para comprobar el correcto funcionamiento de nuestros programas, seleccionando la tabla con el botón derecho del ratón la opción de Edit Table Data.
Disponemos de más opciones es cuestión de documentarse.
1.8 Resto de acciones.
Con respecto al resto de acciones que se pueden presentar en un programa, no hay diferencia, su uso se basa en la misma filosofía que con SQLServer o Access, salvando las diferencias que podamos encontrar en la sintaxis de SQL.
La utilización de los objetos de MySQL puede facilitarse si importamos en las propiedades del proyecto el espacio de nombres de MySQL.Data.MySQLClient.
Proyecto -Propiedades de proyecto -Referencias.
De esa forma podemos escribir simplemente.
Código: | Dim ObjSQL As MySqlConnection |
Que siempre es más cómodo.
Autor: casiopea |