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.
- Desarrollar aplicación C# para acceso a MySQL Server de forma nativa con ADO.NET Driver for MySQL (Connector/NET).
- AjpdSoft Acceso MySQL con ADO.NET en C# en funcionamiento.
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:
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):
Ejecutaremos el fichero mysql-connector-net-6.6.4.msi descargado:
Pulsaremos en «Ejecutar» en la ventana de Advertencia de seguridad de Abrir archivo:
Se iniciará el asistente de instalación de MySQL Connector Net 6.6.4, pulsaremos «Next»:
Pulsaremos en «Custom» para realizar una instalación personalizada:
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:
Pulsaremos «Install» para iniciar la instalación definitiva de MySQL Connector Net:
Tras la instalación de MySQL Connector Net 6.6.4, el asistente nos indicará que la instalación ha finalizado. Pulsaremos «Finish»:
- 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»:
Añadiremos una referencia a la librería de MySQL ADO.NET (Connector/NET), para ello pulsaremos en el menú «Proyecto» – «Agregar referencia»:
Buscaremos el fichero «MySql.Data.dll» en la carpeta de instalación de 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:
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;
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:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 |
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("https://www.proyectoa.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):
Seleccionaremos el catálogo (esquema o base de datos) que usaremos en «Usar el esquema (BD)»:
Pulsaremos en «2 Usar el esquema», si todo es correcto la aplicación obtendrá todas las tablas del esquema seleccionado:
Seleccionaremos la tabla que usaremos para la consulta SQL y pulsaremos «3 Select (SQL) de la tabla»:
Introduciremos la consulta SQL que queramos (o dejaremos la de defecto «select * from nombre_tabla), marcaremos «Devuelve datos» y pulsaremos «Ejecutar»:
Si la consulta SQL es correcta la aplicación mostrará el resultado en el grid de datos:
Para ejecutar una consulta SQL de actualización de datos (update, delete, insert, drop, create) marcaremos el «No devuelve datos»:
Para este tipo de consultas SQL la aplicación devolverá el número de registros afectados: