Buscar..


Creando CRUD simple usando SQLite en C #

En primer lugar, necesitamos agregar soporte SQLite a nuestra aplicación. Hay dos maneras de hacer eso

  • Descargue DLL que se adapte a su sistema desde la página de descarga de SQLite y luego agregue al proyecto manualmente
  • Añadir la dependencia de SQLite a través de NuGet

Lo haremos de la segunda manera.

Primero abre el menú de NuGet

introduzca la descripción de la imagen aquí

y busque System.Data.SQLite , selecciónelo y presione Instalar

introduzca la descripción de la imagen aquí

La instalación también se puede hacer desde la Consola de Package Manager con

PM> Install-Package System.Data.SQLite

O sólo para las características básicas

PM> Install-Package System.Data.SQLite.Core 

Eso es todo para la descarga, por lo que podemos ir directamente a la codificación.

Primero cree una base de datos SQLite simple con esta tabla y agréguela como un archivo al proyecto

CREATE TABLE User(
  Id INTEGER PRIMARY KEY AUTOINCREMENT,
  FirstName TEXT NOT NULL,
  LastName TEXT NOT NULL
);

Además, no olvide configurar la propiedad Copiar en el directorio de salida del archivo a Copiar si es más nuevo en Copiar siempre , según sus necesidades

introduzca la descripción de la imagen aquí

Cree una clase llamada Usuario, que será la entidad base para nuestra base de datos

private class User
{
    public string FirstName { get; set; }
    public string Lastname { get; set; }
}

Escribiremos dos métodos para la ejecución de consultas, el primero para insertar, actualizar o eliminar de la base de datos

private int ExecuteWrite(string query, Dictionary<string, object> args)
{
    int numberOfRowsAffected;

    //setup the connection to the database
    using (var con = new SQLiteConnection("Data Source=test.db"))
    {
        con.Open();
        
        //open a new command
        using (var cmd = new SQLiteCommand(query, con))
        {
            //set the arguments given in the query
            foreach (var pair in args)
            {
                cmd.Parameters.AddWithValue(pair.Key, pair.Value);
            }

            //execute the query and get the number of row affected
            numberOfRowsAffected = cmd.ExecuteNonQuery();
        }

        return numberOfRowsAffected;
    }
}

y el segundo para leer de la base de datos.

private DataTable Execute(string query)
{
    if (string.IsNullOrEmpty(query.Trim()))
        return null;

    using (var con = new SQLiteConnection("Data Source=test.db"))
    {
        con.Open();
        using (var cmd = new SQLiteCommand(query, con))
        {
            foreach (KeyValuePair<string, object> entry in args)
            {
                cmd.Parameters.AddWithValue(entry.Key, entry.Value);
            }

            var da = new SQLiteDataAdapter(cmd);

            var dt = new DataTable();
            da.Fill(dt);

            da.Dispose();
            return dt;
        }
    }
}

Ahora vamos a entrar en nuestros métodos CRUD

Añadiendo usuario

private int AddUser(User user)
{
    const string query = "INSERT INTO User(FirstName, LastName) VALUES(@firstName, @lastName)";

    //here we are setting the parameter values that will be actually 
    //replaced in the query in Execute method
    var args = new Dictionary<string, object>
    {
        {"@firstName", user.FirstName},
        {"@lastName", user.Lastname}
    };

    return ExecuteWrite(query, args);
}

Usuario de edición

private int EditUser(User user)
{
    const string query = "UPDATE User SET FirstName = @firstName, LastName = @lastName WHERE Id = @id";

    //here we are setting the parameter values that will be actually 
    //replaced in the query in Execute method
    var args = new Dictionary<string, object>
    {
        {"@id", user.Id},
        {"@firstName", user.FirstName},
        {"@lastName", user.Lastname}
    };

    return ExecuteWrite(query, args);
}

Borrando usuario

private int DeleteUser(User user)
{
    const string query = "Delete from User WHERE Id = @id";

    //here we are setting the parameter values that will be actually 
    //replaced in the query in Execute method
    var args = new Dictionary<string, object>
    {
        {"@id", user.Id}
    };

    return ExecuteWrite(query, args);
}

Obtención de usuario por Id

private User GetUserById(int id)
{
    var query = "SELECT * FROM User WHERE Id = @id";

    var args = new Dictionary<string, object>
    {
        {"@id", id}
    };

    DataTable dt = ExecuteRead(query, args);

    if (dt == null || dt.Rows.Count == 0)
    {
        return null;
    }

    var user = new User
    {
        Id = Convert.ToInt32(dt.Rows[0]["Id"]),
        FirstName = Convert.ToString(dt.Rows[0]["FirstName"]),
        Lastname = Convert.ToString(dt.Rows[0]["LastName"])
    };

    return user;
}

Ejecutando consulta

using (SQLiteConnection conn = new SQLiteConnection(@"Data Source=data.db;Pooling=true;FailIfMissing=false"))
{
    conn.Open();
    using (SQLiteCommand cmd = new SQLiteCommand(conn))
    {
       cmd.CommandText = "query";
       using (SqlDataReader dr = cmd.ExecuteReader())
       {
           while(dr.Read())
           {
               //do stuff
           }
       }
    }
}

Nota : si se establece FailIfMissing en true, se crea el archivo data.db si falta. Sin embargo, el archivo estará vacío. Por lo tanto, cualquier tabla requerida debe ser recreada.



Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow