Mostrando las entradas con la etiqueta mysql. Mostrar todas las entradas
Mostrando las entradas con la etiqueta mysql. Mostrar todas las entradas

domingo, junio 24, 2007

Conectando MySQL desde Mono::C#

Para lo que viene a continuación me basé en los tutoriales existentes en:

http://www.monohispano.es/index.php/Tutoriales
http://www.mono-project.com/Using_Databases


Pero durante la compilación, que aparece indicada como
mcs TestExample.cs -r:System.Data.dll -r:/ruta/a/MySql.Data.dll

Surgía el siguiente error

[Task:File=/home/s/Projects/Monos/prueba7/prueba7/Main.cs, Line=3, Column=2, Type=Error, Description=The type or namespace name `Data.MySqlClient' could not be found. Are you missing a using directive or an assembly reference?(CS0246)

Después de trastear mucho, y de cambiar de lugar la bendita MySql.Data.dll, descubrí que el error se repetía con los drivers de SQLite y Firebird. El problema estaba en otro lado.


En el principio de los tiempos...

El driver necesita un password real para conectar, de modo que cambiamos el password por defecto de MySQL:

s@zion:~$ mysqladmin -u root password mariscos

Creamos una base como la que figura en el tutorial:

s@zion:~$ mysql -u root -p

Enter password: mariscos


Welcome to the MySQL monitor. Commands end with ; or \g.

Your MySQL connection id is 10


mysql> create database prueba;

Query OK, 1 row affected (0.00 sec)


mysql> use prueba;

Database changed


mysql> create table employee (

-> firstname varchar(32),

-> lastname varchar(32)

-> );

Query OK, 0 rows affected (0.00 sec)


mysql> show tables;

+------------------+

| Tables_in_prueba |

+------------------+

| employee |

+------------------+

1 row in set (0.00 sec)


mysql> INSERT INTO employee VALUES ('coso','cosa');

Query OK, 1 row affected (0.02 sec)


mysql> select * from employee;

+-----------+----------+

| firstname | lastname |

+-----------+----------+

| coso | cosa |

+-----------+----------+

1 row in set (0.00 sec)


Instalamos los paquetes necesarios:

s@zion:~$ sudo apt-get install libfbclient1 libgecko2.0-cil libgtksourceview2.0-cil liblog4net1.2-cil libmono-accessibility2.0-cil libmono-bytefx0.7.6.2-cil libmono-cecil0.4-cil libmono-data-tds1.0-cil libmono-npgsql2.0-cil libmono-peapi1.0-cil libmono-relaxng1.0-cil libmono-security1.0-cil libmono-sharpzip0.84-cil libmono-system-data1.0-cil libmono-system-runtime1.0-cil libmono-system-runtime2.0-cil libmono-system-web1.0-cil libmono-winforms2.0-cil libmono1.0-cil mono mono-mcs monodevelop monodevelop-query libmono-microsoft-build2.0-cil libmono-peapi2.0-cil mono-gmcs


Este último paquete (mono-gmcs) es el runtime v2. En el tutorial les faltó mencionar este componente.

Para quienes quieran copiar / pegar, aquí en el Pastebin de Lugmen he dejado el código.



Copiado y pegado el código en un archivo, por ejemplo Main.cs, nos queda instalar el driver de la base de datos. Estos son los paquetes:
  • Firebird: libmono-firebirdsql1.7-cil
  • SQLite: libmono-sqlite2.0-cil y
  • Oracle: libmono-oracle2.0-cil

En el caso de Mysql lo tenemos que bajar aparte (¿WTF?) desde

http://dev.mysql.com/downloads/connector/net/5.0.html

Descomprimimos el archivo mysql-connector-net-5.0.7-noinstall.zip, y buscamos en la carpeta /Driver/bin/net-2.0/release/ el archivo MySql.Data.dll

Lo insertamos manualmente en el Global Assembly Cache (GAC), que es el mggfñmfalgo importante creo...

s@zion:~$ sudo gacutil -i MySql.Data.dll


También copiamos MySql.Data.dll en la carpeta donde reside el código



¡Mírame, mama, mamá! ¡estoy compilando!

Prestar atención, que no es igual al tutorial:

s@zion:~$ gmcs Main.cs -r:System.Data -r:MySql.Data.dll


Listo. Ahora lo ejecutamos como

s@zion:~$ ./Main.exe


o también:

s@zion:~$ mono Main.exe

Name: coso cosa


Charán!!!!

Eso es todo. Ahora lo interesante sería presentar los datos con GTK# o alguna librería gráfica.