Crear una aplicación con C# y Firebird Portable

¿Cuántas veces hemos batallado tratando de hacer un instalador sencillo para una aplicación de escritorio que se conecte con una base de datos en MySql o en Sql? Muchas veces se complica hacerlo ya que necesitas instalar el servidor de base de datos en la máquina que quieras correr la aplicación.

Para evitar esto, existen opciones que son bases de datos portables, en las que solo agregas la base de datos y el conector al instalador y no tienes que batallar con instalar el servidor de base de datos por separado. Una de estas opciones es Firebird. Firebird es una base de datos relacional que cuenta con muchas características de ANSI Sql, y es multiplataforma.

En este tutorial veremos cómo conectar una aplicación en C# a Firebird. Como la idea es mostrar como conectar a la base de datos, no dedicaré tiempo a hacer una interfaz de usuario, sino que simplemente haré una base de datos sencilla e imprimiré los resultados a pantalla.

Lo primero que hay que hacer es descargar e instalar:

-El conector para C# ( http://www.firebirdsql.org/en/net-provider/ ).

-La base de datos embebida ( http://www.firebirdsql.org/en/firebird-2-5-1/ ). Seleccionamos XX-bit Embedded (XX es 32 o 64 bits dependiendo del procesador que tengas).

-(Opcional) Puedes descargar FlameRobin (http://www.flamerobin.org/ ) que servirá de administrador para crear la base de datos de una manera fácil y rápida. (Fuera del scope del tutorial)

Creando el proyecto en C#

Vamos a crear una nueva aplicación de consola de C# la cual llamaremos FirebirdTest, y agregamos una carpeta que llamaremos lib.

 Abrimos el archivo Zip de la base de datos embebida que descargamos previamente, y extraemos los archivos fbembed.dll, icudt30.dll, icuin30.dll y icuuc30.dll a la carpeta lib de nuestro proyecto.

 En el proyecto agrega la referencia al conector de C# (/Program Files/FirebirdClient-FirebirdSql.Data.FirebirdClient.dll), y agregamos la referencia en la clase donde lo queremos utilizar.

using FirebirdSql.Data.FirebirdClient;

 Creando la conexión

Para crear la conexión podemos usar la clase FbConnectionStringBuilder para hacer el código más fácil de leer. Sólo la propiedad ‘Database’ y ‘ServerType’ son obligatorias. En nuestro caso, ServerType es FbServerType.Embedded ya que no queremos instalar el servidor como parte de la distribución de nuestro programa. En Database ponemos el path y el nombre de la base de datos que queremos agregar. La estructura de carpetas que definamos ahí ya debe de existir, y una vez creada la base de datos, el programa va a lanzar una excepción cada que la quieras sobreescribir.

private void CreateConnectionString()

{

connectionString.ServerType = FbServerType.Embedded;

connectionString.Database = "\\database\\TestDb.fdb";

connectionString.UserID = "jmag";

connectionString.Password = "password";

connectionString.Charset = "UTF8";

connectionString.Dialect = 3;

}

Creando la base de datos

private void CreateDatabase()

{

FbConnection.CreateDatabase(connectionString.ToString());

}

Creando una tabla

private void CreateTable()

{

string tableSql = "CREATE TABLE catalog (id INTEGER NOT NULL,”+

“name VARCHAR(100), PRIMARY KEY (id))";

connection.Open();

try

{

FbCommand fbCommand = new FbCommand(tableSql, connection);

fbCommand.ExecuteNonQuery();

}

catch (Exception e)

{

System.Console.WriteLine(e.Message);

}

finally

{

if (connection.State == System.Data.ConnectionState.Open)

connection.Close();

}

}

Insertando datos

private void InsertData()

{

string insertSql = "INSERT INTO catalog VALUES (1, 'Wilson')";

connection.Open();

try

{

FbCommand fbCommand = new FbCommand(insertSql, connection);

fbCommand.ExecuteNonQuery();

}

catch (Exception e)

{

System.Console.WriteLine(e.Message);

}

finally

{

if (connection.State == System.Data.ConnectionState.Open)

connection.Close();

}

}

Haciendo un query a la base de datos

privatevoid ReadData()

{

string insertSql = "Select id, name FROM catalog";

connection.Open();

try

{

FbCommand fbCommand = new FbCommand(insertSql, connection);

FbDataReader reader= fbCommand.ExecuteReader();

while (reader.Read())

{

System.Console.WriteLine("ID: " + reader.GetInt16(0) + " Name: " + reader.GetString(1));

}

System.Console.ReadLine();

}

catch (Exception e)

{

System.Console.WriteLine(e.Message);

}

finally

{

if (connection.State == System.Data.ConnectionState.Open)

connection.Close();

}

}

Constructor

Finalmente, en el constructor del programa inicializamos.

private FbConnectionStringBuilder connectionString = new FbConnectionStringBuilder();

private FbConnection connection;

public Program()

{

CreateConnectionString();

connection= new FbConnection(connectionString.ToString());

}

Test y Distribución del programa

Para poder distruibuir el programa, tienes que incluir en la instalación la base de datos que creaste y las librerias fbembed.dll, icudt30.dll, icuin30.dll y icuuc30.dll, las cuales deben de estar en el mismo path que el archivo ejecutable de tu programa, por lo que, para poder testear el programa, debes de copiar estas librerías a la carpeta /bin que se crea al compilar la solución. (Visual Studio lo hará automáticamente si las agregas como referencias)

Resultado

Pudimos conectar C# a una base de datos embebida de Firebird, lo cuál nos facilitará la vida a la hora de distribuir una aplicación de escritorio. Hay que tomar en cuenta que esta forma de distribución de Firebird solo acepta UN usuario a la vez.


2 Responses

  1. Douglas dice:

    MUCHISIMAS GRACIAS, he buscado desde hace dos dias esto, ya iba a darme por vencido pensando que lo ultimo que queda es usar mysql, pero esto es increible para mi aplicacion.

    de verdad gracias :) Saludos desde Guatemala

  2. Miguel Angel dice:

    porque no puedo poner el commandstring builder y eso que ya agregue el dll a la referencia del proyecto

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos necesarios están marcados *

*

Puedes usar las siguientes etiquetas y atributos HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

© VB-MUNDO – Visual Basic y mucho más
CyberChimps