martes, 8 de octubre de 2013

Cómo usar SQLite con C#

- Introducción

Como la mayoría sabréis, SQLite es un sistema de gestión de bases de datos relaciones, que tiene la particularidad de que no necesita ningún tipo de instalación ni configuración en el sistema donde se ejecuta. Está todo contenido en una pequeña librería.

Es ideal si necesitas que tu programa maneje una pequeña base de datos, pero no quieres (o no puedes) andar instalando o configurando los equipos donde se va a ejecutar.

En este artículo explicaré en cuatro pasos cómo usar SQLite en un programa C#, usando Visual Studio 2010.

- Instalación.

No necesitas instalar nada en la máquina de desarrollo. Sólo tienes que ir a esta página:

http://system.data.sqlite.org/index.html/doc/trunk/www/downloads.wiki

Hay dos tipos de paquetes: fuentes y binarios precompilados. Necesitas descargar el paquete binario adecuado para el sistema donde tu programa va a correr (no donde estás desarrollando). Por ejemplo, si tu programa usará .Net 4.0 en una plataforma Win 32, deberías descargar sqlite-netFx40-binary-bundle-Win32-2010-1.0.88.0

Dentro del fichero verás que vienen varios ejecutables y DLLs. Sólo vas a necesitar la librería System.Data.SQLite.dll, y System.Data.SQLite.Linq.dll si además usas Linq.

Lo más sencillo es crear una carpeta llamada "Externals" o "Librerías" dentro de tu proyecto, y copiar ahí la(s) DLL(s) que necesites. Después, añade una referencia en tu proyecto a la DLL.

En la siguiente imagen puedes ver cómo queda tu proyecto, con el fichero y la referencia al fichero resaltados en amarillo:



- Uso

Ya puedes usar SQLite desde tu programa. Tras añadir la instrucción "using":

using System.Data.SQLite;

... puedes usar las clases de toda la vida. Empezaríamos con:

SQLiteConnection con = new SQLiteConnection("Data Source=prueba.db");
con.Open();

para abrir o crear (si no existe) una base de datos. Para crear una tabla:

SQLiteCommand cmd = new SQLiteCommand();
cmd.Connection = con;

cmd.CommandText = "create table if not exists productos (referencia text, descripcion text, precio real)";
cmd.ExecuteNonQuery();

para introducir datos:

cmd.CommandText = "insert into productos (referencia, descripcion, precio) values ('ref1', 'descripción 1', 10.0) ";
cmd.ExecuteNonQuery();

cmd.CommandText = "insert into productos (referencia, descripcion, precio) values ('ref2', 'descripción 2', 20.0) ";
cmd.ExecuteNonQuery();

Para leer datos ....

 cmd.CommandText = "select * from productos";
SQLiteDataReader dr = cmd.ExecuteReader();

StringBuilder sb = new StringBuilder();
while (dr.Read())
{
        sb.AppendLine(dr[0].ToString() + " " + dr[1].ToString() + " " + dr[2].ToString());
}

 MessageBox.Show(sb.ToString(), "yuju", MessageBoxButton.OK, MessageBoxImage.Information);

En fin, estoy convencido de que coges la idea :) Si quieres, aquí tienes el manual de referencia de la variante de SQL que usa SQLite.