Utilizamos cookies propias y de terceros. [Más información sobre las cookies].
Política de cookies
Proyecto AjpdSoft

· Inicio
· Buscar
· Contactar
· Cookies
· Descargas
· Foros
· Historia
· Nosotros
· Temas
· Top 10
· Trucos
· Tutoriales
· Wiki

CSharp: Desarrollar aplicación C# con acceso nativo a MySQL Server mediante ADO.NET
Visual Studio .NET


Explicamos en este tutorial cómo desarrollar una aplicación con el lenguaje de programación Microsoft Visual C# .Net (de la suite de desarrollo Microsoft Visual Studio .Net 2010). Explicamos cómo realizar una conexión nativa (sin utilizar intermediarios como ODBC ni OLE DB) a un servidor de bases de datos MySQL Server (sea en Linux o en Windows) desde nuestra aplicación Microsoft Visual C# .Net mediante ADO.NET (MySQL Connector Net).



 

Requisitos para desarrollar aplicación con acceso a MySQL nativo usando Visual C# .Net y driver Connector/Net ADO.NET

A continuación indicamos los requisitos necesarios para desarrollar una aplicación, usando el IDE de desarrollo Microsoft Visual C# .Net, que acceda de forma nativa (directa sin intermediarios) al motor de base de datos gratuito MySQL Server:

  • Suite de desarrollo Microsoft Visual Studio .Net 2010: en el siguiente tutorial explicamos cómo instalar este entorno de desarrollo de aplicaciones .Net:

Instalar Microsoft Visual Studio .Net 2010 y desarrollar aplicación con acceso a PostgreSQL.

  • Driver Connector/Net de MySQL: necesitaremos las librerías proporcionadas por MySQL para acceso nativo desde .Net, disponibles en el sitio web oficial de MySQL, en la URL:

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

    En nuestro caso descargaremos la versión 6.6.4 y la plataforma (Select Platform) "Microsoft Windows", descargaremos "Windows (x86, 32-bit), MSI Installer" (mysql-connector-net-6.6.4.msi):

Requisitos para desarrollar aplicación con acceso a MySQL nativo usando Visual C# .Net y driver Connector/Net ADO.NET

Ejecutaremos el fichero mysql-connector-net-6.6.4.msi descargado:

Requisitos para desarrollar aplicación con acceso a MySQL nativo usando Visual C# .Net y driver Connector/Net ADO.NET

    Pulsaremos en "Ejecutar" en la ventana de Advertencia de seguridad de Abrir archivo:

Requisitos para desarrollar aplicación con acceso a MySQL nativo usando Visual C# .Net y driver Connector/Net ADO.NET

Se iniciará el asistente de instalación de MySQL Connector Net 6.6.4, pulsaremos "Next":

Requisitos para desarrollar aplicación con acceso a MySQL nativo usando Visual C# .Net y driver Connector/Net ADO.NET

Pulsaremos en "Custom" para realizar una instalación personalizada:

Requisitos para desarrollar aplicación con acceso a MySQL nativo usando Visual C# .Net y driver Connector/Net ADO.NET

Los componentes a instalar:

  • Entity Framework Support.
  • Core Components.
  • Documentation.
  • Web Providers.
  • Compact Framework Support.
  • Visua Studio Integration.
  • Samples.

Pulsaremos "Nex" para continuar con la instalación de MySQL Connector Net:

Requisitos para desarrollar aplicación con acceso a MySQL nativo usando Visual C# .Net y driver Connector/Net ADO.NET

Pulsaremos "Install" para iniciar la instalación definitiva de MySQL Connector Net:

Requisitos para desarrollar aplicación con acceso a MySQL nativo usando Visual C# .Net y driver Connector/Net ADO.NET

Tras la instalación de MySQL Connector Net 6.6.4, el asistente nos indicará que la instalación ha finalizado. Pulsaremos "Finish":

Requisitos para desarrollar aplicación con acceso a MySQL nativo usando Visual C# .Net y driver Connector/Net ADO.NET

 

  • Servidor con MySQL Server: necesitaremos, obviamente, un equipo con el motor de base de datos MySQL instalado y funcionando. En los siguientes enlaces mostramos algunos ejemplos sobre cómo montar un servidor de MySQL Server en varios sistemas operativos:

Desarrollar aplicación C# para acceso a MySQL Server de forma nativa con ADO.NET Driver for MySQL (Connector/NET)

Abriremos Microsoft Visual Studio .Net 2010, pulsaremos en el menú "Archivo" - "Nuevo proyecto", seleccionaremos "Visual C#", indicaremos un nombre para la solución, por ejemplo "AjpdSoftAccesoMySQLCSharp":

Desarrollar aplicación C# para acceso a MySQL Server de forma nativa con ADO.NET Driver for MySQL (Connector/NET)

Añadiremos una referencia a la librería de MySQL ADO.NET (Connector/NET), para ello pulsaremos en el menú "Proyecto" - "Agregar referencia":

Desarrollar aplicación C# para acceso a MySQL Server de forma nativa con ADO.NET Driver for MySQL (Connector/NET)

Buscaremos el fichero "MySql.Data.dll" en la carepta de instalación de ADO.NET Driver for MySQL (Connector/NET):

Desarrollar aplicación C# para acceso a MySQL Server de forma nativa con ADO.NET Driver for MySQL (Connector/NET)

Añadiremos todos los componentes al formulario de la aplicación C#, usaremos varios TextBox para introducir el servidor, usuario, puerto, contraseña y SQL a ejecutar. Añadiremos ComboBox para mostrar los esquemas (bases de datos) y las tablas y varios Button. Añadiremos también un DataGridView para mostrar el resultado de las consultas SQL:

Desarrollar aplicación C# para acceso a MySQL Server de forma nativa con ADO.NET Driver for MySQL (Connector/NET)

La descarga gratuita del código fuente completo: AjpdSoft Acceso MySQL con ADO.NET en C#.

Añadiremos en el código la cláusula:

using MySql.Data.MySqlClient;

y añadiremos la declaración de la conexión dentro de la clase del formulario:

private MySqlConnection conexionBD;

Desarrollar aplicación C# para acceso a MySQL Server de forma nativa con ADO.NET Driver for MySQL (Connector/NET)

El código C# completo de la aplicación (para los botones de conectar con servidor, usar esquema, añadir select SQL y ejecutar consulta SQL, así como las funciones para obtener las bases de datos de MySQL y las tablas de la base de datos seleccionada se muestra a continuación:

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 MySql.Data.MySqlClient;

namespace AjpdSoftAccesoMySQLCsharp
{
    public partial class formAccesoMySQL : Form
    {
        private MySqlConnection conexionBD;

        private void obtenerBasesDatosMySQL ()
        {
            MySqlDataReader registrosObtenidosMySQL = null;

            MySqlCommand cmd = 
                new MySqlCommand("SHOW DATABASES", conexionBD);
            try
            {
                registrosObtenidosMySQL = cmd.ExecuteReader();
                lsBD.Items.Clear();
                while (registrosObtenidosMySQL.Read())
                {
                    lsBD.Items.Add(registrosObtenidosMySQL.GetString(0));
                }
            }
            catch (MySqlException ex)
            {
                MessageBox.Show("Error al obtener bases de datos de MySQL: " + 
                    ex.Message,"Error al obtener catálogos",
                    MessageBoxButtons.OK,MessageBoxIcon.Error);
            }
            finally
            {
                if (registrosObtenidosMySQL != null) 
                    registrosObtenidosMySQL.Close();
            }
        }

        private void obtenerTablasBDMysql(string bd)
        {
            MySqlDataReader reader = null;

            try
            {
                conexionBD.ChangeDatabase(bd);

                MySqlCommand cmd = new MySqlCommand("SHOW TABLES", conexionBD);
                reader = cmd.ExecuteReader();
                lsTablas.Items.Clear();
                while (reader.Read())
                {
                    lsTablas.Items.Add(reader.GetString(0));
                }
            }
            catch (MySqlException ex)
            {
                MessageBox.Show("Error al obtener la lista de tablas " +
                    "de la BD de MySQL: " + 
                    ex.Message,"Error obtener tablas",
                    MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            finally
            {
                if (reader != null) reader.Close();
            }
        }

        public formAccesoMySQL()
        {
            InitializeComponent();
        }

        private void btConectar_Click(object sender, EventArgs e)
        {
            if (conexionBD != null)
                conexionBD.Close();

            string connStr =
                String.Format("server={0};port={1};user id={2}; password={3}; " + 
                "database=mysql; pooling=false;" +
                "Allow Zero Datetime=False;Convert Zero Datetime=True",
                txtServidor.Text,txtPuerto.Text, txtUsuario.Text, txtContrasena.Text);
            try
            {
                conexionBD = new MySqlConnection(connStr);
                conexionBD.Open();

                obtenerBasesDatosMySQL();
            }
            catch (MySqlException ex)
            {
                MessageBox.Show("Error al conectar al servidor de MySQL: " + 
                    ex.Message, "Error al conectar", 
                    MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void btSelectSQL_Click(object sender, EventArgs e)
        {
            txtSQL.Text = "select * from " + lsTablas.Text;
        }

        private void btUsarEsquema_Click(object sender, EventArgs e)
        {
            obtenerTablasBDMysql(lsBD.Text);
        }

        private void btEjecutar_Click(object sender, EventArgs e)
        {
            if (opDatos.Checked)
            {
                DataTable tabla;
                MySqlDataAdapter datosAdapter;
                MySqlCommandBuilder comandoSQL;

                try
                {
                    tabla = new DataTable();

                    datosAdapter = new MySqlDataAdapter(txtSQL.Text, conexionBD);
                    comandoSQL = new MySqlCommandBuilder(datosAdapter);

                    datosAdapter.Fill(tabla);

                    dbGrid.DataSource = tabla;
                }
                catch (Exception ex)
                {
                    MessageBox.Show("Error al mostrar los datos de la tabla [" +
                        lsTablas.Text + "] de MySQL: " + 
                        ex.Message, "Error ejecutar SQL",
                        MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
            if (opNoDatos.Checked)
            {
                try
                {
                    int numeroRegistrosAfectados = 0;

                    MySqlCommand cmd = new MySqlCommand();
                    cmd.Connection = conexionBD;
                    cmd.CommandText = txtSQL.Text;
                    cmd.Prepare();                
                    numeroRegistrosAfectados = cmd.ExecuteNonQuery();
                    MessageBox.Show("Consulta de modificación de datos " +
                        "ejecutada, número de registros afectados: " +
                        Convert.ToString(numeroRegistrosAfectados) + ".", 
                        "Consulta SQL ejecutada",
                        MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
                catch (Exception ex)
                {
                    MessageBox.Show("Error ejecutar consulta de " +
                        "modificación de datos: " +
                        ex.Message, "Error ejecutar SQL",
                        MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
        }

        private void linkAjpdSoft_LinkClicked(object sender, 
            LinkLabelLinkClickedEventArgs e)
        {
            System.Diagnostics.Process.Start("http://www.ajpdsoft.com");
        }
    }
}

AjpdSoft Acceso MySQL con ADO.NET en C# en funcionamiento

A continuación explicamos cómo funciona AjpdSoft Acceso MySQL con ADO.NET en C#. En primer lugar introduciremos los datos del servidor de MySQL Server al que nos conectaremos:

  • Servidor: ip o nombre DNS (hostname) del servidor con MySQL Server.
  • Puerto: puerto por el que nos conectaremos, por defecto para MySQL 3306.
  • Usuario: usuario de MySQL Server con permisos suficientes.
  • Contraseña: contraseña del usuario anterior.

Tras introducir los datos de conexión pulsaremos en el botón "1 Conectar con servidor", si los datos son correctos y el servidor está disponible, la aplicación obtendrá los catálogos (bases de datos) del servidor de MySQL Server (a los que el usuario tenga permisos):

AjpdSoft Acceso MySQL con ADO.NET en C# en funcionamiento

Seleccionaremos el catálogo (esquema o base de datos) que usaremos en "Usar el esquema (BD)":

AjpdSoft Acceso MySQL con ADO.NET en C# en funcionamiento

Pulsaremos en "2 Usar el esquema", si todo es correcto la aplicación obtendrá todas las tablas del esquema seleccionado:

AjpdSoft Acceso MySQL con ADO.NET en C# en funcionamiento

Seleccionaremos la tabla que usaremos para la consulta SQL y pulsaremos "3 Select (SQL) de la tabla":

AjpdSoft Acceso MySQL con ADO.NET en C# en funcionamiento

Introduciremos la consulta SQL que queramos (o dejaremos la de defecto "select * from nombre_tabla), marcaremos "Devuelve datos" y pulsaremos "Ejecutar":

AjpdSoft Acceso MySQL con ADO.NET en C# en funcionamiento

Si la consulta SQL es correcta la aplicación mostrará el resultado en el grid de datos:

AjpdSoft Acceso MySQL con ADO.NET en C# en funcionamiento

Para ejecutar una consulta SQL de actualización de datos (update, delete, insert, drop, create) marcaremos el "No devuelve datos":

AjpdSoft Acceso MySQL con ADO.NET en C# en funcionamiento

Para este tipo de consultas SQL la aplicación devolverá el número de registros afectados:

AjpdSoft Acceso MySQL con ADO.NET en C# en funcionamiento

 

 

 

Artículos relacionados

  

Créditos

Artículo realizado íntegramente por Alonsojpd miembro fundador del Proyecto AjpdSoft.

Artículo en inglés.


Anuncios


Enviado el Domingo, 02 diciembre a las 20:42:21 por ajpdsoft
Visita nuestro nuevo sitio web con programas y contenidos actualizados: Proyecto A