Cómo conectarse a una base de datos MySQL con C# en Winforms y XAMPP

XAMPP es una solución de servidor web local multiplataforma open source y gratuita, creada y enpaquetada por Apache Friends, consistiendo básicamente de un servidor HTTP Apache, MariaDB Database e interpretes para scripts en lenguajes de programación como PHP y PERL.

Si usas XAMPP para el desarrollo de páginas web etc, sabes lo fácil que es crear y manipular bases de datos con el módulo integrado de PHPMyAdmin. Tambien encontrarás fácil trabajar con esta en PHP, pero si tienes tambien conocimiento en .NET puedes trabajar tambien con ella. MySQL ofrece un conector bastante sencillo que te permite ejecutar consultas a una base de datos alojada en PHPMyAdmin desde tu ventana en Winforms.

En este articulo, te mostraremos como acceder a una base de datos creada en PHPMyAdmin usando Winforms en C# fácilmente.

Requisitos

Implementación

Llevar esta tarea a cabo es más fácil de lo que piensas, para lograrlo sigue estos pasos:

  • Agrega la referencia al conector de MySQL desde tu proyecto.
  • Crea tu base de datos (ignora esto si ya tienes una) en MySQL con PHPMyAdmin.
  • Comienza a ejecutar consultas.

Agregar referencia al conector de MySQL al proyecto

Para iniciar, necesitarás instalar el conector de MySQL y .NET instalado en tu sistema pues necesitas agregar una referencia a la DLL luego. Puedes escoger una de las ultimas versiones en el sitio web de MySQL aquí.

Install on your system mysql connector extension

Puedes escoger entre una instalación completa y típica:

Installation

Luego de la instalación, procede a crear una ventana vacía en Winforms como siempre lo haces. Ahora agrega la referencia al conector de MySQL en tu proyecto. Localiza el explorador de solución en la parte superior derecha de Visual Studio cuando tu proyecto este abierto, da click derecho en Referencias y luego en Agregar referencias en el menú contextual:

References .net C#

En el menú que aparecerá, navega a Extensiones y selecciona la casilla de MySql.Data (MySql.Data.dlly oprime en OK:

MySQL data .net C# reference

Ahora, será posible ejecutar consultas a tu base de datos en MySQL con C#.

Creando una base de datos de prueba en PHPMyAdmin (en localhost)

Como mencionamos anteriormente, asumimos que ya tienes conocimiento en consultas de MySQL, que tienes instalado Xampp y sabes como acceder a PHPMyAdmin.

Lo primero que tienes que hacer, es abrir el panel de control de Xampp y activar los servicios de apache y mysql:

Xampp menu

Luego navega a phpmyadmin accediendo a la URL  http://localhost/phpmyadmin y finalmente accediendo al area de bases de datos.

Crea la base de datos (en este ejemplo nuestra base de datos será test) y crearemos una base de datos llamada user.

PHPMyAdmin mySql table

Nota

Recuerda activar la opción autoincrementable al campo ID, de otra manera necesitarás insertar un ID por ti mismo en cada inserción de datos.

Ahora que tu base de datos "test" contiene al menos una tabla "user", podemos ejecutar consultas.

Usando C# para conectar y ejecutar consultas

Ahora viene la parte divertidas ! Escribiremos algo de código para interactuar con la base de datos. Primero, no olvides agregar la referencia a la clase de MySqlClient en tu código:

using MySql.Data.MySqlClient;

Ahora puedes entender como funciona la conexión y cómo ejecutar una consulta usando el siguiente snippet:

// La siguiente linea es la que provee la conexión entre C# y MySQL.
// Debes cambiar el nombre de usuario, contrasenia y nombre de base de datos
// de acuerdo a tus datos
// Puedes ignorar la opción de base de datos (database) si quieres acceder a todas
// 127.0.0.1 es de localhost y el puerto predeterminado para conectar
string connectionString = "datasource=127.0.0.1;port=3306;username=root;password=;database=test;";
// Tu consulta en SQL
string query = "SELECT * FROM user";

// Prepara la conexión
MySqlConnection databaseConnection = new MySqlConnection(connectionString);
MySqlCommand commandDatabase = new MySqlCommand(query, databaseConnection);
commandDatabase.CommandTimeout = 60;
MySqlDataReader reader;

// A consultar !
try
{
    // Abre la base de datos
    databaseConnection.Open();

    // Ejecuta la consultas
    reader = commandDatabase.ExecuteReader();

    // Hasta el momento todo bien, es decir datos obtenidos

    // IMPORTANTE :#
    // Si tu consulta retorna un resultado, usa el siguiente proceso para obtener datos
    
    if (reader.HasRows)
    {
        while (reader.Read())
        {
            // En nuestra base de datos, el array contiene:  ID 0, FIRST_NAME 1,LAST_NAME 2, ADDRESS 3
            // Hacer algo con cada fila obtenida
            string[] row = { reader.GetString(0), reader.GetString(1), reader.GetString(2), reader.GetString(3) };
        }
    }
    else
    {
        Console.WriteLine("No se encontraron datos.");
    }

    // Cerrar la conexión
    databaseConnection.Close();
}
catch (Exception ex)
{
    // Mostrar cualquier excepción
    MessageBox.Show(ex.Message);
}

Y eso es todo! Básicamente, solo necesitas cambiar la consulta y comenzar a probar. Puedes leer más acerca de la cadena de conexión y todas las propiedades disponibles aquí.

Ejemplos básicos de consultas

En estos ejemplos te mostraremos como ejecutar las tareas más básicas en MySQL (CRUD):

Form insertion

Nota que usaremos un elemento listView con 4 columnas (al igual que en nuestra base de datos), 3 cajas de texto y 2 botones.

Crear

En el siguiente snippet, insertaremos un usuario a la tabla user de la base de datos test:

private void SaveUser()
{
    string connectionString = "datasource=127.0.0.1;port=3306;username=root;password=;database=test;";
    string query = "INSERT INTO user(`id`, `first_name`, `last_name`, `address`) VALUES (NULL, '"+textBox1.Text+ "', '" + textBox2.Text + "', '" + textBox3.Text + "')";
    // Que puede ser traducido con un valor a:
    // INSERT INTO user(`id`, `first_name`, `last_name`, `address`) VALUES (NULL, 'Bruce', 'Wayne', 'Wayne Manor')
    
    MySqlConnection databaseConnection = new MySqlConnection(connectionString);
    MySqlCommand commandDatabase = new MySqlCommand(query, databaseConnection);
    commandDatabase.CommandTimeout = 60;
    
    try
    {
        databaseConnection.Open();
        MySqlDataReader myReader = commandDatabase.ExecuteReader();
        
        MessageBox.Show("Usuario insertado satisfactoriamente");
   
        databaseConnection.Close();
    }
    catch (Exception ex)
    {
        // Mostrar cualquier error
        MessageBox.Show(ex.Message);
    }
}

Mostrar (obtener datos)

En el siguiente snippet, listaremos todos los usuarios en la base de datos dentro del elemento listView (si disponible, sino en la consola):

private void listUsers()
{
    string connectionString = "datasource=127.0.0.1;port=3306;username=root;password=;database=test;";
    // Seleccionar todo
    string query = "SELECT * FROM user";

    MySqlConnection databaseConnection = new MySqlConnection(connectionString);
    MySqlCommand commandDatabase = new MySqlCommand(query, databaseConnection);
    commandDatabase.CommandTimeout = 60;
    MySqlDataReader reader;

    try
    {
        databaseConnection.Open();
        reader = commandDatabase.ExecuteReader();
         

        // Si se encontraron datos
        if (reader.HasRows)
        {
            while (reader.Read())
            {
                //                   ID                              First name                  Last Name                    Address
                Console.WriteLine(reader.GetString(0) + " - " + reader.GetString(1) + " - " + reader.GetString(2) + " - " + reader.GetString(3));
                // Ejemplo para mostrar en el listView1 :
                //string[] row = { reader.GetString(0), reader.GetString(1), reader.GetString(2), reader.GetString(3) };
                //var listViewItem = new ListViewItem(row);
                //listView1.Items.Add(listViewItem);
            }
        }
        else
        {
            Console.WriteLine("No se encontro nada");
        }

        databaseConnection.Close();
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message);
    }
}

Actualizar

Actualizar datos de la fila con ID x:

private void updateUser()
{
    string connectionString = "datasource=127.0.0.1;port=3306;username=root;password=;database=test;";
    // Actualizar la fila user con ID 1
    string query = "UPDATE `user` SET `first_name`='Willy',`last_name`='Wonka',`address`='Chocolate factory' WHERE id = 1";

    MySqlConnection databaseConnection = new MySqlConnection(connectionString);
    MySqlCommand commandDatabase = new MySqlCommand(query, databaseConnection);
    commandDatabase.CommandTimeout = 60;
    MySqlDataReader reader;

    try
    {
        databaseConnection.Open();
        reader = commandDatabase.ExecuteReader();
        
        // Actualizado satisfactoriamente

        databaseConnection.Close();
    }
    catch (Exception ex)
    {
        // Ops, quizás el ID no existe
        MessageBox.Show(ex.Message);
    }
}

Eliminar

Elimina una fila con ID (x):

private void deleteUser()
{
    string connectionString = "datasource=127.0.0.1;port=3306;username=root;password=;database=test;";
    // Borrar la fila con ID 1
    string query = "DELETE FROM `user` WHERE id = 1";

    MySqlConnection databaseConnection = new MySqlConnection(connectionString);
    MySqlCommand commandDatabase = new MySqlCommand(query, databaseConnection);
    commandDatabase.CommandTimeout = 60;
    MySqlDataReader reader;

    try
    {
        databaseConnection.Open();
        reader = commandDatabase.ExecuteReader();
        
        // Eliminado satisfactoriamente

        databaseConnection.Close();
    }
    catch (Exception ex)
    {
        // Ops, quizás el id no existe
        MessageBox.Show(ex.Message);
    }
}

Que te diviertas !

Esto podría ser de tu interes

Conviertete en un programador más sociable