viernes, 19 de octubre de 2007

Conectarme a MySQL desde aplicación .NET

Tengan un buen día. Debido a un proyecto de desarrollo de un sistema en el que me encuentro con un amigo, el cual consiste en un sistema desarrollado en C# 2005 y utilizando una DB MySQL me vi en la necesidad (y entretenimiento) de investigar como conectarme a MySQL desde una aplicación desarrollada en la plataforma .NET y luego de revisar unas cuantas, encontré una alternativa excelente llamada MySQL Connector/Net que es Open Source (ustedes pueden elegir entre descargar el instalador de la librería, la librería como tal o el proyecto para poder editar el código fuente) que además sigue el modelo de estructura que siguen las librerías de los proveedores que ya trae el .NET Framework como SQLClient (SQL Server), OLEDB (Access y otras DB), etc. En este post vamos a aprender a utilizar esta librería de forma básica haciendo un simple INSERT para dejarlos con esas ganas de seguir investigando y haciendo cosas más complejas.

Empezaré considerando que ya manejan lo que es el servidor de DB MySQL, que poseen conocimientos básicos de algún lenguaje .NET (el ejemplo está en C#) y que ya han trabajado de manera básica con DB.

Primeramente creemos una base de datos en MySQL llamada "test" con una tabla llamada "prueba" con un único campo llamado "estado" del tipo varChar(50) de la siguiente manera (yo estoy usando PHPMyAdmin pero si lo desean pueden usar el prompt window):

NOTA: Haz click en las imágenes para verlas a un tamaño adecuado.



Despues, para este ejemplo vamos a crear un usuario llamado "usuario" con el password "prueba" con privilegios sobre la DB "test" para poder ejecutar un INSERT al menos.

Luego de ello descargamos del siguiente sitio la librería nada más (la dll) de la siguiente dirección:

http://dev.mysql.com/downloads/connector/net/

Desgargamos el que dice "Binaries, no installer" y luego extraemos la dll que está en la carpeta bin y la colocamos en otro lugar, luego creamos un nuevo proyecto de Visual Studio (yo lo haré en C# pero pueden hacerlo en Visual Basic, tambien con C++) y lo que haremos será incluir la dll en nuestro proyecto, para ello nos vamos al explorador de la solución, luego click derecho en agregar referencia, luego nos saldrá un cuadro de diálogo, nos vamos a la pestaña Browse y ahi buscamos la dll en la ubicación en donde la tienen, y de ese modo se agregará al registro de Visual studio y estará ahi disponible para todos los proyectos.


Ahora estamos listos. Voy a comenzar con lo que es la lógica de la aplicación, para ello crearé una clase llamada conexion.cs que contendrá el siguiente código:


using System;
using System.Collections.Generic;
using System.Text;
using MySql.Data.MySqlClient;

namespace mysqlconexion
{
class conexion
{

MySqlConnection enlace = new MySqlConnection("Address=localhost;Database=test;Username=usuario;PASSWORD=prueba");

public void insDatoPrueba(string commentary)
{
String strComando = "INSERT INTO prueba (estado) VALUES ('" + commentary + "');";
MySqlCommand comandito = new MySqlCommand(strComando, enlace);
enlace.Open();
comandito.ExecuteNonQuery();
enlace.Close();
}
}
}

Voy a explicar el siguiente código: Primeramente en la 4ta línea importo un namespace con la palabra "using" y el namespace es el de la librería de MySQL. Luego, en el cuerpo de la clase creo un objeto del tipo MySQLConnection el cual será el canal que se abrirá entre mi aplicación y el servidor MySQL permitiéndome realizar determinadas cosas dependiendo del usuario que la aplicación utilize (en nuestro caso, este usuario podrá ingresar únicamente a la DB test).
Para ello le pasamos ciertos parámetros utilizando el constructor (tambien podemos especificarlos en la propiedad connectionString del objeto) en forma de clave=valor, y podemos ver pares como Address=localhost; ya que estoy usando un servidor local, pero si utilizan un servidor remoto simplemente especifican ahí la URL, Database=test; que es la DB a la que nos conectaremos, Username=usuario;PASSWORD=prueba que son el usuario y contraseña que utilizará el objeto conexion para poder conectarse (valga la redundancia).
Hago un método público llamado insDatoPrueba con un parámetro llamado commentary que será el texto que vamos a insertar y que provendrá del textBox del formulario. Luego creamos lo que es la sentencia SQL que vamos a ejecutar en la DB test agregándole el texto obtenido del textBox. Despues creamos un objeto del tipo MySQLCommand el cual contiene la sentencia SQL que acabamos de crear y los métodos para poder ejecutarla, ya sea una sentencia de consulta o de alteración de datos.
Bueno, luego de llegar a esto, vemos que ya tenemos lo necesario, pero NO ESTAMOS CONECTADOS!!! XD para ello utilizamos el método open() el objeto conexión el cual toma los parámetros especificados en el constructor para intentar conectarse. Luego de esto, ejecutamos el método executeNonQuery() del objeto MySQLCommand el cual ejecuta la consulta que dicho objeto contiene, si esta consulta es INSERT, UPDATE o DELETE, ya que si es SELECT utilizamos una variable del tipo MySQLDataReader para ello, aunque eso se los dejo de tarea. Finalmente utilizamos el método close() del objeto conexion para cerrar el enlace, por cuestiones de seguridad debe ejecutarse siempre este método al finalizar.
Luego nos vamos a crear el formulario, para ello agregamos un botón y un textbox llamados btnInsertar y txtComentario respectivamente. Luego damos doble click al botón para agregar el código para que genere una instancia de la clase conexion y ejecute el método insDatoPrueba() pasándole como parámetro el texto escrito en el textBox, el cual es (este código va dentro del evento onClick de btnInsertar):

conexion obje = new conexion();
obje.insDatoPrueba(this.txtComentario.Text);

Finalmente, ejecuten la aplicación y verán el resultado. Aquí les dejo lo que hice, un archivo .rar el cual contiene el proyecto de Visual Studio, luego para que funcione deberán crear la DB tal como en este ejemplo, descargable >>AQUI<<. Cualquier pregunta no duden en hacerla mediante los comentarios al post.

No hay comentarios: