Como mostrar datos de Mysql con VS2008 y C#

Esta duda me llego de un visitante y como no he posteado nada se me ocurrió hacer de mi respuesta un post.
Como no tengo un servidor me instalare una maquina virtual con XP y allí montare mi servidor de Apache, Mysql y Php mediante Appserv (click en los enlaces). 
Tengo una base de datos en mysql llamada empresa; en empresa tengo una tabla que se llama empleados. 

Vamos ahora a crear la aplicación que será windows forms que personalmente voy a llamar empleados. 
Creamos la conexión mediante el asistente de conexiones como lo mostré en un post pasado (ver post), en la ventana de la conexión rellenamos con todos los datos necesarios.

Explorador de servidores


En mi caso el servidor de mysql tiene el nombre de host “cad” el usuario es peter, para fines demostrativos no uso contraseña pero es importante para seguridad de nuestra base de datos. Y por ultimo mi base de datos es empresa como se muestra en la imagen.

agregarconexion

Es importante que al usuario de la base de datos (peter) se le concedan permisos sobre el host % (signo de porcentaje) y significa que el usuario peter tiene permiso para acceder al servidor mysql desde cualquier sitio o host. Para saber más de esto aconsejo leer el siguiente articulo Definir los host de conexión de los usuarios a MySQL. Si no hacemos lo de agregar permisos simplemente no podremos acceder desde otra maquina mediante visual studio al servidor mysql.
Una vez creada la conexión con el asistente de conexiones de VS2008 aparecerá en el lado izquierdo en el “Explorador de servidores”. En el lado del “explorador de soluciones” voy a crear una carpeta donde pondré los datasets y agregare un dataset llamado “dsempleados”.

exploradorsoluciones

Del lado del explorador de servidores arrastramos la tabla empleados a la ventana “vista de diseño” del dataset, creado el dataset elimina la parte que dice “empleadosTableAdapter”.


dsempleados
 

dataadapterempleados

 

También una nueva clase a nuestro proyecto y lo llamamos “empleado” en esa clase vamos a crear la conexión con la base de datos así como las operaciones sobre la tabla.

agregaritem

 

Ahora mediante using importamos el namespace para mysql y System.Data de la siguiente manera: 

using MySql.Data.MySqlClient;
using MySql.Data;


Acontinuacion de class empleado { agregamos lo siguiente:


MySqlConnection objcon;
public empleado()//constructor de la clase
{

    objcon = new MySqlConnection("server=cad;user id=peter;database=empresa");
}


La cadena de conexión puedes obtenerla seleccionado la base de datos en el lado del explorador de servidores y en el lado derecho aparecerán las propiedades y allí dice “connection string”.

 

dbempresaproperties

 



A continuación creamos un método llamado “muestra” y se le pasa por referencia una variable (ds) del tipo dataset (dataset.dsempleado). Agregamos el siguiente código:
try
{
MySqlCommand objcmd = objcon.CreateCommand();

objcmd.CommandType = CommandType.Text;
objcmd.CommandText = "select * from empleados";
MySqlDataAdapter objda = new MySqlDataAdapter();
objda.SelectCommand = objcmd;
objda.Fill(ds, ds.empleados.TableName);
}
catch (Exception ex) { 

}
finally { objcon.Close(); } //cierra la conexion

En la línea después de la llave del try se crea un objeto del tipo MysqlCommand que ejecutará las sentencias sql, después se especifica que tipo de comando va almacenar: para este caso es de tipo texto objcmd.CommandType = CommandType.Text pero también puede ser un procedimiento almacenado. La propiedad CommandText asigna la sentencia sql a ejecutar.

El MysqlDataAdapter representa un conjunto de comando de datos y una conexión a la base de datos que son usados para llenar un dataset y actualizar una BD MySql; se crea entonces un objeto llamado “objda” y mediante SelectCommand se selecciona los registros en la fuente de datos y mediante fill se adhieren los datos al dataset.

En las ultimas dos líneas se cacha una excepción en caso de ocurrir y finally cierra la conexión a la base de datos. Hasta aquí termina la clase “empleado”; para este ejemplo sólo se ejecuta una sentencia select pero también podemos agregar más métodos o funciones para insertar, actualizar o eliminar registros.

Ahora en el Form1 en vista de diseño agregamos un panel y fijamos su propiedad “Dock” a “Bottom”, a continuación en el panel agregamos un datagridview como se muestra la imagen.

datagridviewaform1

Damos doble click y nos va llevar al codigo, agregamos la el namespace de nuestro dataset mediante using:
using empleados.datasets;

Vamos a crear un método llamado “CargaEmpleados()” y agregamos el siguiente código:

empleado objempleado = new empleado();
dsempleado ds = new dsempleado();
objempleado.muestra(ref ds);
this.dataGridView1.DataSource = ds;
this.dataGridView1.DataMember = ds.empleados.TableName;

En las dos primeras líneas creamos un objeto de tipo empleado (objempleado) y dsempleado (ds), a continuación pasamos por referencia nuestro dataset ds para que sea llenado mediante el método muestra que creamos en la clase empleado. La propiedad DataSourse va obtener de “ds” los datos que se van a mostrar en el datagridview. Con la propiedad DataMember se muestran finalmente los datos en el datagridview mediante el objeto ds.empleados.TableName; como solo tenemos una sola tabla no es necesario especificar el nombre de la tabla o el indice. Ahora solo en el Form_Load de nuestro formulario agregamos nuestro método “CargaEmpleados()”.

Nuestro ejemplo esta listo para ser ejecutado y debe mostrarnos inmediatamente al iniciar el programa los datos en el datagridview.

cargadatos

 

Dejo el código.
Clase empleado.cs


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

 

using MySql.Data;
namespace empleados
{
    class empleado
    {
        MySqlConnection objcon;

        public empleado()
        {
            objcon = new MySqlConnection("server=cad;user id=peter;database=empresa");
        }
        public void muestra (ref datasets.dsempleado ds)
        {

            try
            {
                MySqlCommand objcmd = objcon.CreateCommand();
                objcmd.CommandType = CommandType.Text;
                objcmd.CommandText = "select * from empleados";
                MySqlDataAdapter objda = new MySqlDataAdapter();

                objda.SelectCommand = objcmd;
                objda.Fill(ds, ds.empleados.TableName);
            }
            catch (Exception ex) { }
            finally { objcon.Close();  } //cierra la conexion

        }
    }
}

 
Form1.cs

using System;
using System.Collections.Generic;
using System.ComponentModel;

using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using empleados.datasets;
namespace empleados
{
    public partial class Form1 : Form

    {
       
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            CargaEmpleados();
        }

        private void CargaEmpleados()
        {

            empleado objempleado = new empleado();       
            dsempleado ds = new dsempleado();
            objempleado.muestra(ref ds);
            this.dataGridView1.DataSource = ds;
           this.dataGridView1.DataMember = ds.empleados.TableName;
           

        }
    }
}

Tengo más imagenes colgadas en zooomr para ver más a detalle esta pequeña aplicación y su desarrollo.
Cualquier duda o comentario a pedro.rojas at gmail.com

Comentarios

De antemano gracias la ayuda: Tengo una tabla de especies vegetales en donde la descripción es de tipo text (no string porque me resulta muy pequeño) Cuando muestro en la Grilla, este campo aparece Byte[].Fx Hay alguna manera de mostrar el texto? uso mysql 5.1 y trabajo en visual studio 2005 (espero no me discriminen por trabajar en windows:)

Añadir nuevo comentario