Inicio Programación SQLite y .NET (Parte 2)

SQLite y .NET (Parte 2)

por sgoliver

En este segundo artículo de la serie (si no leíste la parte 1 te la recomiendo) vamos a ver lo sencillo que resulta utilizar una base de datos SQLite en una aplicación escrita en C# (sería análogo para cualquier lenguaje .NET).

Lo primero que haremos será crear el proyecto en Visual Studio o cualquier otro IDE de desarrollo .NET y añadir a las referencias del proyecto el proveedor ADO.NET 2.0 para SQLite (en el artículo anterior comentamos dónde podíamos conseguir este proveedor). La librería DLL a añadir como referencia, y que habrá que distribuir con nuestra aplicación, será la denominada System.Data.SQLite.DLL que encontraremos dentro del fichero ZIP que descargamos. Una vez referenciado el proveedor para ADO.NET de SQLite ya podemos comenzar a escribir el código de nuestra aplicación. Para ello, deberemos añadir la directiva using correspondiente a la librería que acabamos de añadir:

using System.Data.SQLite;

A partir de este momento el código necesario para acceder y gestionar nuestra base de datos SQLite será completamente análogo al ya tradicional que utilizamos para el acceso a cualquier otro tipo de bases de datos, salvo que los nombres de las clases comenzarán con el prefijo «SQLite». Así, por ejemplo, tendremos a nuestra disposición las siguientes clases:

SQLiteConnection
SQLiteTransaction
SQLiteCommand
SQLiteParameter
SQLiteDataReader

Conexión con la base de datos

La conexión con la base de datos se realizará mediante la clase SQLiteConnection. Para el caso de SQLite, el único parámetro obligatorio de la cadena de conexión será el nombre del fichero de datos:

SQLiteConnection con =
new SQLiteConnection("Data Source=index.bd");

Otros parámetros que pueden especificarse dentro de la cadena de conexión son la contraseña en caso de existir, el timeout por defecto para las operaciones sobre la base de datos, etc. Para ver todos los parámetros que podemos especificar en la conexión con la base de datos SQLite puede consultarse la ayuda proporcionada con el proveedor ADO.NET en el fichero SQLite.NET.chm

Consulta de datos

Para realizar una consulta parametrizada sobre la base de datos haremos uso de las clases SQLiteCommand, SQLiteParameter y SQLiteDataReader. Veamos cómo quedaría un método sencillo de consulta sobre una tabla especificando un parámetro de búsqueda:

public SQLiteDataReader selectClave(int clave)
{
SQLiteConnection con =
new SQLiteConnection("Data Source=basedatos.bd");

SQLiteParameter param = new SQLiteParameter();
param.Value = clave;

string cmdStr =
"SELECT campo2 FROM tabla1 WHERE campo1 = ?;";

SQLiteCommand cmd =
new SQLiteCommand(cmdStr, con);

cmd.Parameters.Add(param);

SQLiteDataReader  reader = cmd.ExecuteReader();

return reader;
}

Inserción de datos

La ejecución de una operación INSERT simple será análoga a la consulta descrita en el apartado anterior, salvo que el método de ejecución será ahora ExecuteNonQuery() ya que no se devolverá ningún valor:

public void insertClave(string campo1, int campo2)
{
SQLiteConnection con =
new SQLiteConnection("Data Source=basedatos.bd");

SQLiteParameter param1 = new SQLiteParameter();
Param1.Value = campo1;

SQLiteParameter param2 = new SQLiteParameter();
Param2.Value = campo2;

string cmdStr =
"INSERT INTO tabla1 (campo1, campo2) VALUES (?,?);";

SQLiteCommand cmd =
new SQLiteCommand(cmdStr, con);

cmd.Parameters.Add(param1);
cmd.Parameters.Add(param2);

SQLiteDataReader reader = cmd.ExecuteNonQuery();

return reader;
}

Si en nuestra tabla existe un campo autonumérico y queremos recuperar su valor después de ejecutar la operación de INSERT, tendremos que modificar la instrucción ejecutada para añadir al final una llamada a la función last_insert_rowid() de SQLite y cambiar el método de ejecución por ExecuteScalar() para recuperar el valor devuelto:

string cmdStr =
"INSERT INTO tabla1 (campo1, campo2) VALUES (?,?);" +
"SELECT last_insert_rowid();";

...

int res = Convert.ToInt32(cmd.ExecuteScalar());

Transacciones en SQLite

Tal y como aconsejan en la ayuda del propio proveedor de ADO.NET para SQLite, en caso de ejecutar varias operaciones sobre una base de datos es recomendable hacerlas dentro de una misma transacción, algo que aumentará muchísimo el rendimiento de la base de datos y por tanto reducirá considerablemente el tiempo necesario para ejecutar las operaciones. Para comenzar una transacción bastará con llamar al método BeginTransaction() del objeto SQLiteConnection una vez creada la conexión, y para finalizar la transacción haciendo COMMIT o ROLLBACK de todas las operaciones llamaremos a los métodos Commit() o Rollback() respectivamente:

SQLiteConnection con =
new SQLiteConnection("Data Source=basedatos.bd");

SQLiteTransaction tran = con.BeginTransaction();

...

tran.Commit();

Espero que este pequeño tutorial de SQLite sobre .NET les sea de ayuda.

También te puede interesar

10 comentarios

xisket 15/07/2009 - 22:52

muy útil, es la primera web donde explica cómo usar sqlite en .net desde 0, gracias!

Responder
Luis Eduardo 28/09/2010 - 20:49

Si amig@, felicitaciones…muy buenos tus apuntes…espero lossigas avanzando…gracias y felicitaciones por tu aporte

Responder
marco 07/05/2011 - 19:37

Oye amigo como hago si quiero hacer una bd en sqlite embebida, que mi propia apliacion la genere.

Responder
Elias 20/12/2011 - 20:53

Hermano me has salvado la vida, si no encuentro tu web y este buen pos, ya me hubiera ido por la linea de Mocosoft Access
Pd. Detalla como agregar la dll nada más, para los que no lo saben

Responder
Leo 12/01/2012 - 16:02

Hola, respecto a como agregar la dll de sqlite, deben hacer lo siguiente:

Descargarla de la siguiente url: http://sqlite.phxsoftware.com/, solo deben descargar el instalador y proceder a instalar.

Luego van a la ficha proyecto y seleccionan la opcion agregar referencia. Una vez ahi, buscan System.Data.Sqlite y le dan aceptar.

En el proyecto, deben colocar using System.Data.SQlite; para usar la libreria, y listo!.

Responder
alfre2 03/04/2012 - 13:05

muy muy bueno, me encantaria saber o tener un ejemplo en asp.net con codigo vb, ya que no soy de usar c#, muchas gracias.

Responder
Jose Luis 18/09/2012 - 19:18

Como conecto SQLite en VB.net 2005 mediante ODBC, lo he intentado de varias formas, Ej:
Using dbConexion As New OdbcConnection(«DSN=dsn;Pwd=pass;»)

Me da este error:

ERROR [HY000] file is encrypted or is not a database (26)

Responder
Octavio 28/10/2013 - 20:12

Muy buen post, lastima que lo encontre despues de ir pegando conocimientos de varios y armar mis propias conclusiones, pero solo falta una cosa con la cual tuve un problema, que debo de incluir para ejecutar mi aplicacion en otro equio windows sin sqlite instalado segun bastaba con llevar el dll en la misma carpeta de la aplicacion pero yo no pude hacerlo tuve que instalar el descargable de la pagina sqlite, pero segun e leido si se puede sin hacer eso solo incluyendo las dll correctas en los lugares correctos.

Responder
Edmundo 20/05/2014 - 21:06

Esta muy claro, pero cuando trato de aplicar este mismo procedimiento a un app store no permite el uso de esta librería, por que?

Responder
Diana 18/09/2014 - 18:55

Hola prodria poner imagenes sobre el procedimiento de este ejercicio es que soy nueva y no estoy familiarizada y me urge saber sobre este tema

Responder

Responder a alfre2

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies, pinche el enlace para mayor información. Aceptar Más Información

Política de Privacidad y Cookies