Mono con MySQL

Hace un tiempo, di mis primeros pasos en Mono, con el desarrollo de unos programas muy básicos en Mono, que no iban mucho más allá del Hola Mundo.

Con dar unos pasos más en mi intrusión con Mono, en esta ocasión desarrollaré una aplicación básica, capaz de hacer altas y bajas en una base de datos MySQL.

  • Descargar la librería dinámica para conectarnos a MySQL. Descargar MySql.dll.
  • Descomprimir e instalar, mejor dicho, agregar el assemblie a la caché global de ensamblados:

[CODE]
$ tar -xvzf mysql.tar.gz
README
MySql.Data.dll
$ cat README
Descomprimir la .dll en alguna carpeta y correr el siguiente comando:
$ gacutil -i MySql.Data.dll
Y linkear desde monodevelop deacuerdo al tutorial en http://antoniomtz.org

$ sudo gacutil -i MySql.Data.dll
MySql.Data installed into the gac (/usr/lib/mono/gac)
$
[/CODE]

  • Crear un nuevo proyecto GTK# y agregar en las referencias del mismo (clic derecho sobre Referencias, Editar referencias):
    • El paquete System.Data
    • El ensamblado MySqlData.dll

  • En el código, importar ambos paquetes:


[CSHARP]
// Main.cs created with MonoDevelop
// User: luciano
//
using System;
using Gtk;
using System.Data;
using MySql.Data.MySqlClient;
[/CSHARP]

  • Crear una pequeña tabla en una base de datos MySQL y desarrollar la GUI para una pequeña aplicación desde la cual se realicen altas y bajas a la tabla:


[MYSQL]
CREATE TABLE `usuarios` (
`id` int(10) NOT NULL,
`nombre` varchar(150) NOT NULL,
`apellidos` varchar(200) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
[/MYSQL]

  • Antes de ver el código completo, veamos los aspectos principales:
    • Conexión con la base de datos

    • [CSHARP]
      IDbConnection conn;
      conn = new MySqlConnection("Server=localhost;" +
      "Database=test;" +
      "User ID=usuario;" +
      "Password=contrasena;" +
      "Pooling=false"
      );
      conn.Open();
      ...
      conn.Close()
      [/CSHARP]

    • Lectura de base de datos

    • [CSHARP]
      IDbCommand comando = conn.CreateCommand();

      string strSQL = "SELECT id, nombre, apellidos FROM usuarios;";
      comando.CommandText = strSQL;
      IDataReader dr = comando.ExecuteReader();

      while (dr.Read())
      {
      //dr["id"]
      //dr["nombre"].ToString()
      //dr["apellidos"].ToString())
      }
      dr.Close();
      [/CSHARP]

    • Altas y bajas

    • [CSHARP]
      IDbCommand comando = conn.CreateCommand();

      string strSQL = "DELETE FROM ..."
      string strSQL = "INSERT INTO ..."
      comando.CommandText = strSQL;
      comando.ExecuteNonQuery();
      [/CSHARP]

  • Para finalizar, el código completo de la aplicación:


[CSHARP]
using System;
using Gtk;
using System.Data;
using MySql.Data.MySqlClient;

public partial class MainWindow: Gtk.Window
{
IDbConnection conn;

public MainWindow (): base (Gtk.WindowType.Toplevel)
{
Build ();

conn = new MySqlConnection("Server=localhost;" +
"Database=test;" +
"User ID=usuario;" +
"Password=contrasena;" +
"Pooling=false"
);

treeview.AppendColumn("Id", new Gtk.CellRendererText(), "text", 0);
treeview.AppendColumn("Nombre", new Gtk.CellRendererText(), "text", 1);
treeview.AppendColumn("Apellido", new Gtk.CellRendererText(), "text", 2);

treeview_load();
}

protected void treeview_load()
{
conn.Open();

Gtk.ListStore liststoreUsuarios = new Gtk.ListStore (typeof(int), typeof(string), typeof(string));

treeview.Model = liststoreUsuarios;
IDbCommand comando = conn.CreateCommand();

string strSQL = "SELECT id, nombre, apellidos FROM usuarios;";
comando.CommandText = strSQL;
IDataReader dr = comando.ExecuteReader();

while (dr.Read())
{
liststoreUsuarios.AppendValues(dr["id"], dr["nombre"].ToString(), dr["apellidos"].ToString());
}
dr.Close();
conn.Close();

}

protected void OnDeleteEvent (object sender, DeleteEventArgs a)
{
Application.Quit ();
a.RetVal = true;
}

protected virtual void buttonAgregar_clic (object sender, System.EventArgs e)
{
IDbCommand comando = conn.CreateCommand();

conn.Open();

string strSQL = "INSERT INTO usuarios VALUES (" + textId.Text + ",'" + textNombre.Text + "','" + textApellidos.Text + "')";
comando.CommandText = strSQL;
comando.ExecuteNonQuery();
conn.Close();

treeview_load();
}

protected virtual void OnTreeviewCursorChanged (object sender, System.EventArgs e)
{
Gtk.TreeModel modelo;
Gtk.TreeIter iterSelected;

if ( treeview.Selection.GetSelected(out modelo, out iterSelected) )
{
textIdEliminar.Text = (string) modelo.GetValue(iterSelected,0).ToString();
}

}

protected virtual void OnButtonEliminarClicked (object sender, System.EventArgs e)
{
IDbCommand comando = conn.CreateCommand();

conn.Open();

string strSQL = "DELETE FROM usuarios WHERE id = " + textIdEliminar.Text ;
comando.CommandText = strSQL;
comando.ExecuteNonQuery();
conn.Close();

treeview_load();
}

}
[/CSHARP]

Basado en la publicación original de Noticias, Eventos y mucho mas de SOFTWARE LIBRE

3 comentario en este artículoDeje el suyo
  1. Gracias! Me ha sido de gran ayuda.

    Pero has olvidado un pequeño detalle: Poner el código stetic que genera
    la interfaz (Recursos->gui.stetic), sin él da algunos errores al compilar.

    No obstante, muchas gracias

  2. saves me sirvio mucho gracias

  3. una pregunta, como hiciste para agradandar el treeview? por mas que le doy sigue saliendo igual de chico

Deje su comentario

Por favor, ingrese su nombre

Por favor, ingrese un correo-e válido

Por favor, ingrese su mensaje

luauf.com 2014

WordPressx411W567p429X67