Anexsoft | Blog y dictado de cursos de Tecnología

En este encontrarás tutoriales de tecnología como PHP, ASP.NET MVC, Front-End, entre otros y cursos exigentes de modalidad online que te ayudarán a crecer profesionalmente.

Ejemplo de SQLite con .NET y CSharp
Actualizado hace 16 días y leído 3,197 veces
Calificación: 10.00 / 10

Ejemplo de SQLite con .NET y CSharp

Anexsoft

Bien señores, pues el título lo dice todo, vamos a implementar un proyecto consola para crear una base de datos SQLite y realizar una consulta SELECT.

 

¿Qué es SQLite?

Es una base de datos que usualmente la usamos para aplicativos pequeños y no queremos depender de un motor de base de datos más grande. Por ejemplo, imagínate que tienes una aplicación de celular y necesitas guardar información de lo que realiza tu usuario, tener una REST Api y todo lo demás conlleva mayor tiempo, costo y esfuerzo. Si es algo pequeño lo más óptimo es usar SQLite ya que, este va a crear un archivo con extensión .sqlite en nuestro proyecto y esta será nuestra base de datos.

NOTA: SQLite no solo aplica para desarrollo mobile, por ejemplo, podríamos hacer una pequeña web personal para nosotros o una app de escritorio, etc.

 

¿Qué es lo primero que debo hacer?

Debemos agregar la referencia desde el nugget, el package es el siguiente:

System.Data.SQLite

Con esto ya podemos realizar consultas SQL usando SQLite.

 

Nuestro DbContext

public class DbContext
{
    private const string DBName = "database.sqlite";
    private const string SQLScript = @"..\..\Util\database.sql";
    private static bool IsDbRecentlyCreated = false;

    public static void Up()
    {
        // Crea la base de datos y registra usuario solo una vez
        if (!File.Exists(Path.GetFullPath(DBName)))
        {
            SQLiteConnection.CreateFile(DBName);
            IsDbRecentlyCreated = true;
        }

        using (var ctx = GetInstance())
        {
            if (IsDbRecentlyCreated)
            {
                using (var reader = new StreamReader(Path.GetFullPath(SQLScript)))
                {
                    var query = "";
                    var line = "";
                    while ((line = reader.ReadLine()) != null)
                    {
                        query += line;
                    }

                    using (var command = new SQLiteCommand(query, ctx))
                    {
                        command.ExecuteNonQuery();
                    }
                }

                for (var i = 1; i <= 100; i++)
                {
                    var query = "INSERT INTO Users (name, lastname, birthday) VALUES (?, ?, ?)";

                    using (var command = new SQLiteCommand(query, ctx))
                    {
                        command.Parameters.Add(new SQLiteParameter("name", "Name " + i));
                        command.Parameters.Add(new SQLiteParameter("lastname", "Lastname " + i));

                        var rnd = new Random();
                        command.Parameters.Add(new SQLiteParameter("birthday", DateTime.Today.AddYears(-rnd.Next(1, 50))));

                        command.ExecuteNonQuery();
                    }
                }
            }
        }
    }

    public static SQLiteConnection GetInstance()
    {
        var db = new SQLiteConnection(
            string.Format("Data Source={0};Version=3;", DBName)
        );

        db.Open();

        return db;
    }
}

La siguiente clase lo que haces:

  • Método Up: este método solo se ejecuta una sola vez a pesar que lo llamemos mil veces.
    • Genera la base de datos
    • Lee un archivo .sql de nuestra carpeta Util\Database.sql para crear nuestra tabla.
    • Inserta  usuarios
  • Método GetInstance: abre una cadena de conexión con nuestra DB.

Luego tendríamos que crear nuestra demás clases, para nuestro ejemplop práctico cree un UserService

public class UserService
{
    public static IEnumerable<User> GetAll()
    {
        var result = new List<User>();

        using (var ctx = DbContext.GetInstance())
        {
            var query = "SELECT * FROM Users";

            using (var command = new SQLiteCommand(query, ctx))
            {
                using (var reader = command.ExecuteReader())
                {
                    while (reader.Read())
                    {
                        result.Add(new User {
                            Id = Convert.ToInt32(reader["id"].ToString()),
                            Name = reader["Name"].ToString(),
                            Lastname = reader["Lastname"].ToString(),
                            Birthday = Convert.ToDateTime(reader["Birthday"]),
                        });
                    }
                }
            }
        }

        return result;
    }
}

Definitivamente usar SQLCommand es demasiado aburrido, yo prefiero mil veces un ORM.

 

Ejecutando nuestro ejemplo

Finalmente debemos ejecutar nuestro método Up de la clase DbContext para que cree la base de datos y luego mostraremos en la consola todo los usuarios registrados.

DbContext.Up();

foreach(var user in UserService.GetAll())
{
    Console.WriteLine(
        string.Format("#{0}: - {1}, {2} - Age: {3}", user.Id, user.Name, user.Lastname, (DateTime.Today.Year - user.Birthday.Year))
    );
}

Console.Read();

Lo que ha pasado es lo siguiente:

  • Se generó en nuestra carpeta BIN un archivo llamado database.sqlite, ese es nuestra base de datos.
  • Si volvemos a ejecutar el proyecto y el archivo ya existe no volverá a generar la base de datos.
  • Si todo salió bien el sistema debería ejecutar un listado de todo los usuarios registrados.

 

Recomendación

Este ejemplo es a manera de estudio, lo mejor sería crear la base de datos desde DB Browser SQLite y tener el archivo creado. Ya nuestro aplicativo se encargaría de ejecutar solo consultas.

Les comparto el ejemplo en mi repositorio de GitHub.

¡Adquiera ya!

  • Software de Portafolio Profesional hecho en ASP.NET MVC 5 C#

    Software de Portafolio Profesional hecho en ASP.NET MVC 5 C#
  • Software de Venta e Inventario hecho en PHP y Codeigniter

    Software de Venta e Inventario hecho en PHP y Codeigniter
  • Código de fuente de Red Social desarrollada en ASP.NET MVC

    Código de fuente de Red Social desarrollada en ASP.NET MVC

Últimas publicaciones

Encuesta

¿Sobre qué te gustaría que se hable más?

Síguenos

Estudia con nosotros y crece profesionalmente

Nuestros cursos han sido hecho en base a lo que demanda el mercado hoy en día.
La experiencia obtenida es la de un ambiente laboral.

Anexsoft
© 2017 Anexsoft, blog y cursos online de TI.