C# y la base de datos mySQL
En este simple ejemplo voy a cargar en una aplicación de Windows Forms en un combobox los datos de una base de datos en mySQL.
El ejemplo está hecho en C#. Estoy adjuntando a este artículo el código utilizado. Se usó Visual Studio 2008.
Para bajarse el ejemplo haga click en el siguiente link:
Download ejemplo. y luego en la página del link haga click en el botón c# como indica la figura:
Para este ejemplo, es necesario tener instalado mySQL. La versión utilizada fue la 5.0. Si bien hay miles de herramientas para crear tablas en mySQL, usé la línea de comandos para no perder mucho tiempo instalando sus utilidades.
Si deseamos crear una aplicación en C# que se conecte a mySQL, es necesario bajarse los conectores de mySQL.
Pueden googlear y buscar mySQL C# connector y bajarse los conectores. En mi caso lo bajé de este link (el sitio web de mySQL tiene un delfín ridículo con cara del retrasado de Flipper):
http://dev.mysql.com/downloads/connector/net/6.2.html
En mi caso, mi base de datos se llama:
DB1, el usuario se llama root y el pwd root.
En mi base de datos DB1, tengo una tabla llamada empleados con la columna nombre.
Para crear una base de datos llamada DB1 en mysql:
Create database db1;
Para crear una tabla en mySQL el código que use fue el siguiente:
Create table empleados(nombre char(20);
Para insertar datos;
Insert into empleados values("Juan");
Insert into empleados values("Jose");
Los valores Juan y Jose serán cargados y mi formulario de C#.
Estoy usando un archivo de Configuración AppConfig con los siguientes datos de conexión a mySQL:
"SERVER=localhost ;DATABASE=db1;UID=root; PASSWORD=root";
El resto es agregar la referencia mySQL a mi aplicación y agregar luego el uso de MySQL:
using MySql.Data.MySqlClient;
El código sería como sigue:
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;
using System.Configuration;
namespace WindowsFormsApplication2
{
public
partial
class
Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private
void Form1_Load(object sender, EventArgs e)
{
}
private
void button1_Click(object sender, EventArgs e)
{
string MyConString = ConfigurationManager.ConnectionStrings["connectionStringName"].ToString();
MySqlConnection connection = new
MySqlConnection(MyConString);
MySqlCommand command = connection.CreateCommand();
MySqlDataReader Reader; command.CommandText = "select nombre from empleados";
connection.Open();
Reader = command.ExecuteReader();
while (Reader.Read())
{
comboBox1.Items.Add(Reader["nombre"].ToString());
}
connection.Close();
}
}
}
Hola , de donde dices puedo descargarme el código de tu ejemplo.??
ResponderEliminarSaludos.
Dice download ejemplo.
ResponderEliminarGracias.
Gracias por el aporte! :)
ResponderEliminargracias me ha servido mucho.
ResponderEliminarTienes algun codigo para llenar tablas?
saludos
Generalmente llamo a procedimientos almacenados.
ResponderEliminarLe estoy pasando datos de 4 textboxes a este ejemplo. En este ejemplo estoy usando SQL Server, pero recuerdo que para mysql era casi identico.
MySqlCommand cmd = new SqlCommand("insertardatos", cnn);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("@nombre", SqlDbType.Char,20);
cmd.Parameters.Add("@apellido", SqlDbType.Char,20);
cmd.Parameters.Add("@edad", SqlDbType.Int);
cmd.Parameters.Add("@ID", SqlDbType.Int);
cmd.Parameters["@nombre"].Value = textBox1.Text;
cmd.Parameters["@apellido"].Value =textBox2.Text;
cmd.Parameters["@edad"].Value=Convert.ToInt32(textBox3.Text);
cmd.Parameters["@ID"].Value = Convert.ToInt32(textBox4.Text);
cnn.Open();
cmd.ExecuteNonQuery();
MessageBox.Show("Los datos fueron insertados correctamente");
HOLA ME SALE ESTE ERROR "Unable to connect to any of the specified MySQL hosts."
ResponderEliminarDime, te puedes conectar a esa base de datos ?.
ResponderEliminarVerificaste que funciona ?.
Me puedes pasar tus datos de conexión ?
veras la base de datos la tengo instalado en ubuntu y si funciona ya le cree una base de datos y una tabla para probar e inserte un par de registros.....
ResponderEliminarconnStr = "Server=192.168.10.135;Database=sistemafac;Uid=root;Pwd=12345;Port=3306";
Bien, uno ver si hay firewalls que bloqueen el puerto 3306. Has podido conectarte desde el sistema operativo Windows a Linux ?
ResponderEliminarsi tengo ping desde windows a mi maquina virtual Ubuntu donde esta la base de datos............hice una prueba con mono developer y si tengo conexion desde ubuntu.......
ResponderEliminarY al hacer debug, se arruina en la linea de connSrt verdad ? o en que linea se detiene tu codigo ?
ResponderEliminaren la linea connection.Open(); ahi me sale Unable to connect to any of the specified MySQL hosts.
ResponderEliminarProba poniendo en mayúsculas las palabras clave:
ResponderEliminar"SERVER=192.168.10.135 ;DATABASE=db1;UID=root; PASSWORD=1234";
Probá con y sin el puerto.
Si no da eso, no se me ocurre nada más. Me rindo. Tal vez reescribir la conexión porque al hacer copy paste de un lado hay un caracter basura invisible.
YA ME SALIOOOOOOOOOOO QUE BIEN ..................BUENO PARA TODOS LOS QUE VISITAN ESTE POST QUE ME HA SERVIDO MUCHO AHI LES VA LA FALLA ................EN MySQL QUITAR EL CHECK DE CONEXIONES DISABLE TCP/IP LUEGO EN EL USUARIO ROOT O EN CUALQUIERA AGREGAR LA IP DE LA MAQUINA REMOTA DE DONDE SE ESTA ACCEDIENTO AGREGAR TAMBIEN PERMISOS A LOS ESQUEMAS Q SE VAN A MANIPULA TODO ESTO EN EL MySQL-admin.............gracias daniel calbimonte..............
ResponderEliminarRAFAEL ANIBAL PALACIOS LOPEZ
SALUDOS
rafafap@hotmail.com
HOLA TENGO OTRO PROBLEMA YA TENGO CONEXION A MYSQL PERO LAS CONSULTAS SE DEMORAN MUCHO....
ResponderEliminarTrata de usar procedimientos almacenados en mysql.
ResponderEliminarSon tablas de muchos datos o tablas pequeñas ?.
Si son tablas de muchos datos, tienes que comenzar a agregar índices.
son tablas muy pequenas........no se que paso la primera vez q lo conecte estubo muy bien.....
ResponderEliminarEstas cerrando conexiones ?
ResponderEliminarcnn.close() agrega esto en tu código. Y reinicia el mysql para cerrar todas las sesiones abiertas.
ResponderEliminarYA LE PUSE Y SIGUE LENTO......TENDRA ALGO QUE VER LA ESPECIFICACION DEL PUERTO????
ResponderEliminardime, el mysql haciendo consultas ahi, lo sientes lento ?
ResponderEliminardesde el admin de mysql esta muy bien.....
ResponderEliminar