Vous êtes sur la page 1sur 10

Fuente: http://www.ajpdsoft.com/modules.php?

name=News&file=article&sid=565
MySQL: Acceso nativo a MySQL Server con VB.Net usando el driver Connector
Net
Adaptado para Talleres de aprendizaje de MySQL por: URIEL CASTAEDA
SIERRA Sep/2015

Aplicacin Ejecutable, sin instalador.


A continuacin encontrar diferentes rutinas de cdigo Visual Basic que le
permitirn construir una pequea aplicacin para ejecutar consultas en las
bases de datos instaladas en el servidor MySQL que usted elija y al cual
tenga acceso con la debida autorizacin (usuario contrasea)
El desarrollo de esta aplicacin permite ver la forma como se aplican los
diferentes elementos para conexin de una base de datos y la construccin de
cadenas SQL para ejecutar acciones de consulta sobre las diferentes tablas.
Al finalizar el ejercicio de desarrollo se muestra en dos captulos
complementarios, aspectos de alto inters que usted debe tener en cuenta
para el desarrollo de sus aplicaciones.
El primero de estos, realiza una explicacin sobre los diferentes modos de
conexin o acceso a las bases de datos, identificando las ventajas y
desventajas que ofrecen cada uno de estos. Entre ellos el Conector MySQL
Server para aplicaciones .NET.
La ltima parte del taller explica cmo puede usted hacer para copiar la
aplicacin (ejecutable) en otro computador sin tener el software editor de
Visual Studio, teniendo en cuanta los componentes mnimos de software que
usted debe considerar para que la aplicacin opere correctamente en otro
computador.

Alistamiento
Previo al inicio del desarrollo, usted debe considerar necesaria y verificar que
ya se encuentren debidamente instaladas instalas las referencias al conector
de Base de datos que utilizar para la aplicacin. En este caso utilizaremos el
conector .Net de MySQL.
Las instrucciones para la instalacin de este conector ya fueron entregadas
en un taller previo, sin embargo, puede consultar en detalle en el link de la

fuente original de donde hemos tomado este ejemplo de desarrollo de


software.
Tambin es necesario que disponga de un servidor de bases de datos MySQL
instalado en su computador o en la red LAN donde se encuentre conectado.

Desarrollo de la aplicacin:
Crear el proyecto en Visual Studio.
Inicie desde CEROS un nuevo proyecto en la plataforma de Visual Studio.Net,
creando un proyecto tipo Windows FORM. Crearlo en su carpeta de talleres
con el siguiente nombre: VisorAccesoNativoMySQL

Establecer la referencia al conector de Base de datos


de se desea utilizar.
Una vez instalada es hora de importarla en nuestro proyecto de Visual Studio.
Con el proyecto abierto, nos dirigimos al men PROYECTO y elegimos el
submen Propiedades En
esta
ventana
hacemos
clic
en
la
pestaa Referencias y
despus
en
la
flecha
de
opciones
del
botn Agregar y ah elegimos la opcin Referencia.

En la ventana a lado izquierdo elegimos Ensamblados y luego Extensiones.


Dentro de las extensiones que aparecen buscamos la extensin Mysql.Data,
la seleccionamos y activamos el check que le aparece (verifica que la versin
de la extensin sea la que fue recientemente descargada e instalada).
Pulsamos Aceptar y cerramos la ventana.

Cmo agregar una extensin que no est en el listado


Si la extensin no aparece listada, presiona sobre el botn Examinar
y procede a buscarla en el directorio donde instalaste el conector
MySQL.

Importamos las libreras externas de .Net


Pulsando en la pestaa de ver cdigo fuente del formulario principal (o
con la tecla F7), desde el cdigo fuente, al principio (antes de la
definicin de clase), aadiremos el siguiente import:
Imports MySQL.Data.MySqlClient

Con esta lnea estamos listos para realizar consultas al servidor MySQL.

Disear el formulario principal


Aadiremos los componentes visuales y no visuales al formulario principal de la
aplicacin, el cual renombrarmeos as: formAccesoNativoMySQL

TextBox: para introducir el servidor de MySQL Server, el puerto, el


usuario, la contrasea.
txtServidor

txtUsuario

txtContrasena

txtPuerto

ComboBox: desplegable donde se mostrarn los esquemas o bases de


datos del servidor MySQL Server al que nos hemos conectado. lsBD

TextBox con Multiline=True: para introducir consulta SQL que se


ejecutar. txtSQL

RadioButton: para elegir entre consulta SQL que devuelve registros


(SELECT) o consulta SQL que no devuelve registros (INSERT, DELETE,
UPDATE, DROP, CREATE, ALTER).
opDatos

opNoDatos

Button: para conectar con servidor, para abrir base de datos y para
ejecutar consulta SQL introducida.
btConectar
btUsarEsquema
btEjecutar

DataGridView: para mostrar los registros resultantes de una consulta


SQL. DataGridView1

StatusStrip: barra de estado para mostrar algunos datos adicionales


(nmero de tablas de la base de datos elegida, nmero de registros de la
consulta SQL ejecutada y (usuario, servidor y base de datos a la que
estamos conectados).
bePanelNumTablas

bePanelNumRegistros

bePanel2.Text

ToolTip: para mostrar cuadro de ayuda rpida de los elementos del


formulario.

El cdigo principal del formulario:


A continuacin mostramos el cdigo fuente necesario para la operacin del
formulario, donde definimos las variables y principales funciones a utilizar en la
aplicacin:
Como primeras instrucciones de la clase donde definimos el formulario,
realizaremos la declaracin de las variables que utilizaremos para el desarrollo
del presente ejercicio.

En primer lugar declararemos una variable de tipo MySqlConnection al


principio de la clase del formulario. Ser la que contenga la conexin con
el servidor MySQL Server y ser usada en los distintos mtodos que
requieran de conexin:

Friend conexion As MySqlConnection

Luego declaramos las variables y constantes donde definiremos algunos


permetros necesarios para la operacin del software:

Friend Autor as String = (Escribe aqu tu nombre)


Friend FechaDesarrollo as String = (Escribe aqu la fecha de hoy)

A continuacin definimos las funciones principales que utilizaremos para


acceso a la base de datos.

Funcin conectarServidorMySQL para conectar con un servidor MySQL


Server de forma nativa, esta funcin usar la variable declarada al
principio de la clase, llamada conexion, la inicializar con "New
MySqlConnection" y establecer los valores de conexin con
"ConnectionString". Una vez establecidos realizar la conexin con el
mtodo "Open":

Private Sub conectarServidorMySQL()


Try
'establece el controlador de errores e inicializa la
'cadena de conexin
conexion = New MySqlConnection()
conexion.ConnectionString =
"server=" & txtServidor.Text & ";" &
"user id=" & txtUsuario.Text & ";" &
"password=" & txtContrasena.Text & ";" &
"port=" & txtPuerto.Text & ";" &
"database=" & lsBD.Text & ";"
'establece la conexin con el servidor y la base de datos
conexion.Open()
'verifica si hay base de datos seleccionada y obtiene el numero
'que representa la cantidad de tablas existentes en esa BD
'actualizando las celdas correspondientes en el formulario
If lsBD.Text <> "" Then
bePanelNumTablas.Text = CStr(numeroTablas())
End If
bePanel2.Text = "Conectado a servidor " &
txtServidor.Text
Catch ex As Exception
'en caso de presentarse algn error muestra el mensaje alusivo
MsgBox("Error al conectar al servidor MySQL " &
vbCrLf & vbCrLf & ex.Message,
MsgBoxStyle.OkOnly + MsgBoxStyle.Critical)
End Try
End Sub

Funcin numeroRegistrosConsulta que obtiene el nmero de registros


de una consulta dada en una variable de tipo MySqlDataReader.
Pasndole como parmetro un MySqlDataReader, lo recorrer y
obtendr el nmero de registros:

Private Function numeroRegistrosConsulta( _


ByVal dr As MySqlDataReader) As Integer
'Realiza un conteo registro por registro para determinar la
'cantidad total de registros existentes en una tabla
Dim numeroRegistros As Integer = 0
Do While dr.Read
numeroRegistros = numeroRegistros + 1
Loop
numeroRegistrosConsulta = numeroRegistros
End Function

Funcin numeroTablas que obtiene el nmero de tablas de un esquema


(base de datos) de MySQL Server, usando la consulta SQL "SHOW
TABLES".
Esta funcin usa la clase MySqlCommand para componer el comando
SQL "SHOW TABLES" y la clase "MySqlDataReader" para guardar el
resultado de la ejecucin de la consulta SQL con "ExecuteReader". En
el "MySqlDataReader" quedar almacenado el resultado de la consulta
SQL. Para obtener el nmero de tablas usaremos la funcin
anterior numeroRegistrosConsulta:

Private Function numeroTablas() As Integer


'con el comando SQL SHOW TABLES el SGBD devuelve una tabla
'en la que cada registro los datos de cada una de las tablas
'existentes en la BD
Dim consultaSQL As MySqlCommand =
New MySqlCommand("show tables", conexion)
Dim dr As MySqlDataReader = consultaSQL.ExecuteReader()
'luego contamos los registros de la tabla resultante y esto nos permite
'determinar cuntas tablas existen en la B.D.
numeroTablas = numeroRegistrosConsulta(dr)
dr.Close()
End Function

Funcin esquemasMySQL que obtiene el listado de las bases de datos


que se encuentran en el servidor de MySQL, usando la consulta SQL
"SHOW DATABASES".
Esta funcin usa la clase MySqlCommand para componer el comando
SQL "SHOW DATABASES" y la clase "MySqlDataReader" para guardar
el resultado de la ejecucin de la consulta SQL con "ExecuteReader".
En el "MySqlDataReader" quedar almacenada una tabla resultante
que contiene los nombres de todas las bases de datos. Para obtener el
nombre de cada B.D. y mostrarlo en el listado de seleccin (ComboBox
lsBD) usamos un bucle que recorre toda la tabla y adiciona por cada
registro el nombre de B.D. a dicho listado utilizando el mtodo Add()
del objeto tipo List.
Private Function esquemasMySQL() As List(Of String)
Dim listaEsquemas As List(Of String)
listaEsquemas = New List(Of String)
Dim consultaSQL As MySqlCommand =
New MySqlCommand("SHOW DATABASES", conexion)
Dim dr As MySqlDataReader = consultaSQL.ExecuteReader
Do While dr.Read
listaEsquemas.Add(dr.Item("Database"))
Loop
esquemasMySQL = listaEsquemas
End Function

El cdigo de los componentes del formulario:


A continuacin mostramos el cdigo fuente necesario para la operacin del
formulario, donde definimos los siguientes botones:

El botn "btConectar" tendr el siguiente cdigo en el evento "Click":

Private Sub btConectar_Click(sender As System.Object,


e As System.EventArgs) Handles btConectar.Click
'llamamos la funcin encargada de realizar la conexin con el servidor y
'con la base de datos
conectarServidorMySQL()
Dim lista As List(Of String)
Dim i As Integer
'Actualizamos el contenido del combo de seleccin para que nos muestre
'solamente las Bases de datos que correspondan al servidor y usuario
'elegido
'Para empezar blanqueamos el listado actual.
lsBD.Items.Clear()
If lsBD.Text <> "" Then
bePanelNumTablas.Text =
"| N tablas: " & CStr(numeroTablas())
End If
'con la instruccin esquemasMySQL obtenemos el listado con
'el nombre de todas las bases de datos instaladas en el servidor
'luego mediante un bucle insertamos cada nombre de BD en el combo Box.
lista = esquemasMySQL()
For i = 0 To lista.Count - 1
lsBD.Items.Add(lista.Item(i).ToString)
Next
End Sub

El botn "btUsarEsquema" en su evento Click tendr el siguiente


cdigo:

Private Sub btUsarEsquema_Click(sender As System.Object,


e As System.EventArgs) Handles btUsarEsquema.Click
'Establecemos la conexin con el esquema de B.D. elegida en el Combo Box
'Este proceso se realiza nicamente cuando hay una B.D. seleccionada
If lsBD.Text <> "" Then
Try
'antes de abrir una nueva conexin con B.D. nos aseguramos de
'cerrar la anterior para que esta no quede ocupando memoria
If conexion.State = ConnectionState.Open Then
conexion.Close()
End If
'construimos la cadena de conexin concatenando los parmetros
conexion.ConnectionString =
"server=" & txtServidor.Text & ";" &
"user id=" & txtUsuario.Text & ";" &
"password=" & txtContrasena.Text & ";" &
"port=" & txtPuerto.Text & ";" &
"database=" & lsBD.Text & ";"

conexion.Open()
'actualiza la barra de estado mostrando los resultados
If lsBD.Text <> "" Then
bePanelNumTablas.Text =
"| N tablas: " & CStr(numeroTablas())
End If
bePanel2.Text = "Conectado | " &
txtServidor.Text & "@" &
lsBD.Text & "@" & txtUsuario.Text
Catch ex As Exception
'en caso de error en los pasos previos, muestra el mensaje
MsgBox("Error al conectar al servidor MySQL " &
vbCrLf & vbCrLf & ex.Message)
End Try
Else
MsgBox("Debe seleccionar el esquema " &
"(base de datos) a usar.",
MsgBoxStyle.OkOnly + MsgBoxStyle.Information)
lsBD.Focus()
End If
End Sub

El botn "btEjecutar" tendr el siguiente cdigo en su evento "Click":


Private Sub btEjecutar_Click(sender As System.Object,
e As System.EventArgs) Handles btEjecutar.Click
Dim consultaSQL As MySqlCommand = New MySqlCommand(txtSQL.Text, conexion)
'En caso de estar elegida la Consulta SQL que devuelve registros (SELECT)
If opDatos.Checked Then
'_________________________(escriba aqu lo que hacen estas instrucciones)
Dim ds As DataSet = New DataSet()
Dim DataAdapter1 As MySqlDataAdapter =
New MySqlDataAdapter()
Try
'_____________________(escriba aqu lo que hacen estas
DataAdapter1.SelectCommand = consultaSQL
DataAdapter1.Fill(ds, "Tabla")
'_____________________(escriba aqu lo que hacen estas
DataGridView1.DataSource = ds
DataGridView1.DataMember = "Tabla"
'_____________________(escriba aqu lo que hacen estas
bePanelNumRegistros.Text = "| N registros: " &
CStr(ds.Tables(0).Rows.Count)
Catch ex As MySqlException
'_____________________(escriba aqu lo que hacen estas
MsgBox("Error al ejecutar consulta SQL: " &
vbCrLf & vbCrLf & ex.ErrorCode & " " &
ex.Message,
MsgBoxStyle.OkOnly + MsgBoxStyle.Critical)
End Try
End If

instrucciones)

instrucciones)

instrucciones)

instrucciones)

'En caso de estar elegida la Consulta SQL que no devuelve registros


'(INSERT, DELETE, UPDATE, CREATE, DROP)
If opNoDatos.Checked Then
Dim numRegistrosAfectados As Integer
Dim comandoSQL As New MySqlCommand
Try
'_____________________(escriba aqu lo que hacen estas instrucciones)
comandoSQL.Connection = conexion

comandoSQL.CommandText = txtSQL.Text
'_____________________(escriba aqu lo que hacen estas instrucciones)
numRegistrosAfectados = comandoSQL.ExecuteNonQuery()
'_____________________(escriba aqu lo que hacen estas instrucciones)
bePanelNumRegistros.Text = "| N registros afectados: " &
CStr(numRegistrosAfectados)
'_____________________(escriba aqu lo que hacen estas instrucciones)
MsgBox("Consulta SQL ejecutada correctamente en " &
"servidor MySQL. Nmero de registros afectados: " &
CInt(numRegistrosAfectados),
MsgBoxStyle.OkOnly + MsgBoxStyle.Information)
Catch ex As MySqlException
MsgBox("Error al ejecutar consulta SQL: " &
vbCrLf & vbCrLf & ex.ErrorCode & " " &
ex.Message,
MsgBoxStyle.OkOnly + MsgBoxStyle.Critical)
End Try
End If
End Sub

A manera de repaso, los siguientes segmentos de cdigo que forman parte de


la subrutina anterior hacen las siguientes acciones:

Con este cdigo ejecutamos una consulta que NO devuelve datos (de
tipo INSERT, CREATE, DROP, DELETE, UPDATE):
Dim numRegistrosAfectados As Integer
Dim comandoSQL As New MySqlCommand
Try
comandoSQL.Connection = conexion
comandoSQL.CommandText = txtSQL.Text
numRegistrosAfectados = comandoSQL.ExecuteNonQuery()
bePanelNumRegistros.Text = "| N registros afectados: " &
CStr(numRegistrosAfectados)

El cdigo para ejecutar una consulta SQL que S devuelve registros


(SELECT) y que, adems, enlazamos con un componente visual para
mostrar el resultado al usuario en un DataGridView:
Dim ds As DataSet = New DataSet()
Dim DataAdapter1 As MySqlDataAdapter =
New MySqlDataAdapter()
Try
DataAdapter1.SelectCommand = consultaSQL
DataAdapter1.Fill(ds, "Tabla")
DataGridView1.DataSource = ds
DataGridView1.DataMember = "Tabla"

Vous aimerez peut-être aussi