miércoles, 2 de enero de 2013

Mejor forma de conectar a MySql desde C#

Me propuse a escribir esto porque muchas veces tratamos de usar archivos, el los cuales hay que hacer la conexión, abrirlos, tratarlos, y cerrar la conexión, de momento aquí solo me limitare a hablar sobre cuando uno hace la conexión a mysql desde una aplicación C#, pero se aplica para toda metodología que trate con archivos externos, recursos de red, etc., que de seguro mas de uno lo hecho mas de una vez, entonces cual es la forma que nos enseñan en la escuela o vemos el los post o foros?, me atrevo a decir que es esta:

Aclaro: usado el motor MySql y legunaje de programación C#

En este ejemplo es cuando lees datos

// se crea la cadena de conexion con las credenciales necesarias
string CadenadeConexion="Server=localhost;Database=base1;UID=user;
Password=root";
// se crea una nueva conexion hacia el gestor de base de datos
MySqlConnection conexion=new MySqlConnection(CadenadeConexion);
// se abre la conexion
conexion.Open();
// se crea un comando
MySqlCommand cm=new MySqlCommand();
// se establece el comando
cm.CommandText="Select * from tabla";
// se crea un adaptador
MySqlAdapter ad=new MySqlAdapter();
// se crea una tabla que recibira los datos
DataTable ds=new DataTable();
// se llena la tabla
ad.Fill(ds);
// se cierra la conexion
conexion.Close();

Este es un tipico ejemplo sobre como trabajar con Mysql y C#, entonces los inconvenientes son los siguientes:

1.-Para comenzar que se pueden generar excepciones que el codigo anterior no puede manejar, lo recomendable es poner un try y catch, ya que este cachara la excepcion, tambien es conveniente imprimir la exception para saber donde fue.

2.-En algunos casos hay que mantener abierta la conexion para ejecutar varias consultas y cerrar la conexion al final esto consume mas recursos de los necesarios.

3.-Puede que tengas un boton de salir y este al mismo tiempo cierre la conexion, si esto ocurre algunas veces dan click en cerrar ventana y se queda abierta la conexion.

  *la mas importante*
4.-El CLR libera automaticamente la memoria para almacenar objetos que ya que ya no son necesarios y la liberacion de memoria no es DETERMINISTICA y estos se liberan cuando el CLR decide realizar que elementos no son utilizados, entonces cuando utilizamos conexiones a la base y utilizamos variables, guardamos valores y todo esto, se liberan hasta que el recolector del CLR lo decida.

hay otra forma de hacer esto y teniendo menos problemas a continuacion pongo el codigo:

string ConString = @"Server=" + se + ";Database=" + da + ";UID=" + us + ";Password=" + pa;
using (MySqlConnection cn = new MySqlConnection(ConString))
{
try
{
cn.Open();
 }catch{}
// comandos y ejecuciones
}

Esta es la forma que recomendable ya que con el uso de la directiva USING todos los elementos que se utilicen dentro y creados ahi se liberaran cuando termina y salga del using.

Ventajas:

1.- Se liberan los objetos utilizados cuando termina las instrucciones de using y sale.

2.- Solo se utilizaran los recursos necesarios cuando se ejecuten.

3.- En el uso de archivos, conexiones a red, bases, etc. es recomendable, ya que estos servicios siempre estan corriendo y sus recursos son limitados y se requiere una administracion optima.

Espero que le sirva saludos.

No hay comentarios:

Publicar un comentario