Conectarse a una Base de Datos SQLite con MonoTouch (ADO.NET)

El conectarse a SQLite con MonoTouch no es muy complejo, además si eres un programador con alguna trayectoria en el acceso de Base de Datos con .NET y, te será fácil de realizarlo.
En el presente post voy a mostrarles como se hace el acceso en 2 formas distintas, el primer acceso a través de un DataReader y el segundo a través de un DataAdapter.

El primer paso para la conexión es agregar las librerías de acceso a datos proporcionadas por MonoTouch:

using Mono.Data.Sqlite;
using System.Data;

La primera librería nos ofrece las clases y objetos necesarios para realizar la conexión a SQLite, mientras la segunda librería nos ofrece lo necesario para trabajar con ADO.NET. 

Luego crearemos una clase llamada Championship que tendrá la siguiente estructura:

using System;
namespace iScoreBoardLibrary
{   
     //public class Customer : CSObject
     public class Championship
     {
        public int championshipId {get; set;} 
        public string championshipName {get; set;}
        public string championshipHost {get; set;}
        public DateTime championshipStartDate {get; set;}
        public DateTime championshipEndDate {get; set;}
        public string championshipDescription {get; set;}
        public string championshipHistory {get; set;}

         //Constructor
         public Championship ()
         {
         }
     }
}

Creación de la Base de Datos SQLite



Para crear la base de Datos SQLite, lo más fácil es bajarnos un gestor para este, los 2 que recomiendo son SQLite Studio y SQLite DataBase Browser. Para efectos prácticos del post usaremos SQLite Studio. Nuestro primer paso es crear una base de datos nueva (icono del folder) con el nombre iScoreBoard:
El siguiente paso es crear una tabla llamada Championship, que tenga los mismos campos que nuestra clase Championship:
Como punto a tomar en cuenta, es que para la clave principal el tipo de dato debe de ser INTEGER y no INT, si deseamos que sea auto-numérico.
Luego agregamos algunos datos de prueba.

DataReader

Como un poco de teoría voy a poner la definición de un DataReader:
“En ADO.NET, un DataReader es un amplia categoría de objetos usados generalmente para leer datos de manera secuencial de una fuente de datos. Un DataReader provee una manera eficiente de acceder a los datos, parseando un Flujo de Datos Tabulares desde SQL Server o desde otra base de datos que tenga un conector con .NET. Un DataReader es usualmente un método de un objeto Command que contiene la consulta SQL con la cual se consultara la fuente de datos, la conexión con la BD y opcionalmente algunos parámetros de consulta.”.
Bueno, vayamos al código, que es como sigue:

              connection = new SqliteConnection ("Data Source=iScoreBoard.sql");
              List _Championships = new List ();
           
              //Read a Table from Data Base with DataAdapter
              using (var cmd = connection.CreateCommand()) {
                   connection.Open ();
                   cmd.CommandText = "select championshipId, championshipName from Championship";
                   using (var reader = cmd.ExecuteReader()) {
                        while (reader.Read()) {
                            Championship c = new Championship ();
                            c.championshipName = (string)reader ["championshipName"];
                            _Championships.Add (c);
                        }
                   }
                   connection.Close ();
              }

Analizando el código vemos que en la primera sentencia tenemos, la conexión a la Base de Datos de nombre “iScoreBoard” que tiene la terminación .sql (En algunos casos si no funciona con .sql, podemos probar con .db ó .db3), luego procedemos a crear un comando llamado cmd que será quien ejecute la consulta. Por ultimo creamos un DataReader que se llamara reader e iteraremos a través de los datos con un ciclo While.

DataAdapter

La conexión con un DataAdapter es un poco más corta, pero a la vez es un poco más lenta en lo referente a performance, pero cuando se trata de tablas pequeñas no es muy sustancial a nuestra percepción la mejor de performance. El código es como sigue:
              adapter = new SqliteDataAdapter ();
              championshipsTable= new DataTable("Championship");

              //Read a Table from Data Base with a DataAdapter
              using (var cmd=connection.CreateCommand()) {
                   connection.Open ();
                   cmd.CommandText = "select championshipId, championshipName from Championship";
                   adapter.SelectCommand = cmd;
                   adapter.Fill (championshipsTable);
                   connection.Close ();
              }
Para ese caso es mucho más sencillo, simplemente se abre la conexión, luego se define la consulta SQL a realizarse y se asigna al “adapter”, el comando, para que se haga el llenado de la tabla a través del método Fill.
Suerte.

Publicar un comentario