sábado, 22 de enero de 2011

C# y la base de datos mySQL


network monitoring

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();
}
}
}

 


 


 


 


 


 


 


 

People who read this post also read :



22 comentarios:

  1. Hola , de donde dices puedo descargarme el código de tu ejemplo.??
    Saludos.

    ResponderEliminar
  2. gracias me ha servido mucho.
    Tienes algun codigo para llenar tablas?
    saludos

    ResponderEliminar
  3. Generalmente llamo a procedimientos almacenados.
    Le 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");

    ResponderEliminar
  4. HOLA ME SALE ESTE ERROR "Unable to connect to any of the specified MySQL hosts."

    ResponderEliminar
  5. Dime, te puedes conectar a esa base de datos ?.
    Verificaste que funciona ?.
    Me puedes pasar tus datos de conexión ?

    ResponderEliminar
  6. 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.....
    connStr = "Server=192.168.10.135;Database=sistemafac;Uid=root;Pwd=12345;Port=3306";

    ResponderEliminar
  7. Bien, uno ver si hay firewalls que bloqueen el puerto 3306. Has podido conectarte desde el sistema operativo Windows a Linux ?

    ResponderEliminar
  8. si 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.......

    ResponderEliminar
  9. Y al hacer debug, se arruina en la linea de connSrt verdad ? o en que linea se detiene tu codigo ?

    ResponderEliminar
  10. en la linea connection.Open(); ahi me sale Unable to connect to any of the specified MySQL hosts.

    ResponderEliminar
  11. Proba poniendo en mayúsculas las palabras clave:
    "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.

    ResponderEliminar
  12. 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..............
    RAFAEL ANIBAL PALACIOS LOPEZ
    SALUDOS
    rafafap@hotmail.com

    ResponderEliminar
  13. HOLA TENGO OTRO PROBLEMA YA TENGO CONEXION A MYSQL PERO LAS CONSULTAS SE DEMORAN MUCHO....

    ResponderEliminar
  14. Trata de usar procedimientos almacenados en mysql.
    Son tablas de muchos datos o tablas pequeñas ?.
    Si son tablas de muchos datos, tienes que comenzar a agregar índices.

    ResponderEliminar
  15. son tablas muy pequenas........no se que paso la primera vez q lo conecte estubo muy bien.....

    ResponderEliminar
  16. cnn.close() agrega esto en tu código. Y reinicia el mysql para cerrar todas las sesiones abiertas.

    ResponderEliminar
  17. YA LE PUSE Y SIGUE LENTO......TENDRA ALGO QUE VER LA ESPECIFICACION DEL PUERTO????

    ResponderEliminar
  18. dime, el mysql haciendo consultas ahi, lo sientes lento ?

    ResponderEliminar
  19. desde el admin de mysql esta muy bien.....

    ResponderEliminar