C# - Usando o banco de dados SQLite - I

 Neste artigo vou mostrar como podemos usar o SQLite em uma aplicação Windows Forms realizando as operações CRUD na linguagem C#.


O SQLite é um banco de dados free de domínio público e ao contrário do SQL Server , Oracle ou outro banco de dados comercial ele é um programa independente e não possui um servidor. Ele é uma pequena library escrita em C que outras aplicações podem chamar.

Um banco de dados SQLite é um apenas um arquivo único onde as tabelas os dados, triggers, chaves primárias e estrangeiras estão todas contidas. A sua aplicação lê e escreve no banco de dados pela chamada do SQLite. Quando você realizar um SELECT ou UPDATE o SQLite lê e escreve para este arquivo.

Se você efetuar atualizações em uma transação SQL o SQLite verifica se você possui acesso exclusivo ao arquivo e você pode fazer uma cópia de segurança apenas copiando o arquivo do SQLite.

Em resumo, você pode usar o SQLite como qualquer outro banco de dados mas por trás dos panos você estará usando uma pequena livraria de código a qual esta armazenando seus dados em um arquivo.

Um detalhe, o SQLite esta sob domínio público, e assim qualquer um pode copiar, modificar, publicar, usar, compilar, vender ou distribuir o código original do SQLite para propósitos comerciais ou não comerciais. Não há restrição alguma no SQLite.

O SQLite suporta a maior parte dos recursos da linguagem SQL padrão com algumas limitações. Como o SQLite escreve e lê para um arquivo em um drive as únicas permissões disponíveis são as permissões de leitura e escrita para o próprio arquivo, então não há como usar os comandos GRANT e REVOKE. Para uma relação das limitações visite este link: http://www.sqlite.org/omitted.html

O SQLite dá suporte a transações ACID (Atomic, Consistent, Isolated and Durable). O que significa que uma transação no SQLite irá ocorrer completamente ou não.

Por tudo isso creio que vale a pena considerar a utilização do SQLite quando o cenário for favorável a sua utilização mas lembre-se que ele possui limitações e que isso nem sempre será possível.

O tamanho do SQLite configurado é no máximo de 300 KB por isso ele é indicado para pequenas aplicações (portáveis) especialmente aplicações que não precisam rodar on-line onde os dados são armazenados em um arquivo local e o banco de dados trabalha sem uma conexão com internet.

Você pode obter mais informações e fazer o download do SQLite na página oficial: http://www.sqlite.org/index.html

Neste artigo vou mostrar como criar um banco de dados, SQLite, criar tabela, inserir, atualizar, excluir e acessar dados usando o SQLite.

Recursos Usados:

Criando o projeto no VS Community 2017

Abra no VS community 2017 e no menu File clique em New Project;

A seguir selecione o template Visual C# -> Windows -> Windows Forms Application e informe o nome CShp_MAC e clique em OK;

Agora abra o formulário Form1.cs e inclua os seguintes controles no formulário:

Disponha os controles conforme o leiaute da figura abaixo:

Incluindo a referência ao SQLite no projeto

Para poder trabalhar com o SQLite temos que incluir uma referência a bibliotecas System.Data.SQLite em nosso projeto usando o Nuget.

Para isso clique no menu Tools e a seguir selecione Library Package Manager -> Manage Nuget Packages for Solution...

Selecione o pacote System.Data.SQLite,  marque para instalar no projeto e clique no botão Install:

Criando a classe DalHelper

Vamos incluir no projeto uma classe chamada DalHelper (use o nome a seu gosto) e definir os métodos que vão gerenciar o SQLite.

No menu Project clique em Add Class e informe o nome DalHelper. A seguir inclua o código abaixo nesta classe:

using csharp_Sqlite.Models;
using System;
using System.Data;
using System.Data.SQLite;
namespace csharp_Sqlite
{
    public class DalHelper
    {
        private static SQLiteConnection sqliteConnection;
        public DalHelper()
        { }
        private static SQLiteConnection DbConnection()
        {
            sqliteConnection = new SQLiteConnection("Data Source=c:\\dados\\Cadastro.sqlite; Version=3;");
            sqliteConnection.Open();
            return sqliteConnection;
        }
        public static void CriarBancoSQLite()
        {
            try
            {
                SQLiteConnection.CreateFile(@"c:\dados\Cadastro.sqlite");
            }
            catch
            {
                throw;
            }
        }
        public static void CriarTabelaSQlite()
        {
            try
            {
                using (var cmd = DbConnection().CreateCommand())
                {
                    cmd.CommandText = "CREATE TABLE IF NOT EXISTS Clientes(id int, Nome Varchar(50), email VarChar(80))";
                    cmd.ExecuteNonQuery();
                }
            }
            catch(Exception ex)
            {
                throw ex;
            }
        }

        public static DataTable GetClientes()
        {
            SQLiteDataAdapter da = null;
            DataTable dt = new DataTable();
            try
            {
                using (var cmd = DbConnection().CreateCommand())
                {
                    cmd.CommandText = "SELECT * FROM Clientes";
                    da = new SQLiteDataAdapter(cmd.CommandText, DbConnection());
                    da.Fill(dt);
                    return dt;
                }
            }
            catch(Exception ex)
            {
                throw ex;
            }
        }
        public static DataTable GetCliente(int id)
        {
            SQLiteDataAdapter da = null;
            DataTable dt = new DataTable();
            try
            {
                using (var cmd = DbConnection().CreateCommand())
                {
                    cmd.CommandText = "SELECT * FROM Clientes Where Id=" + id;
                    da = new SQLiteDataAdapter(cmd.CommandText, DbConnection());
                    da.Fill(dt);
                    return dt;
                }
            }
            catch(Exception ex)
            {
                throw ex;
            }
        }
        public static void Add(Cliente cliente)
        {
            try
            {
                using (var cmd = DbConnection().CreateCommand())
                {
                    cmd.CommandText = "INSERT INTO Clientes(id, Nome, email ) values (@id, @nome, @email)";
                    cmd.Parameters.AddWithValue("@Id", cliente.Id);
                    cmd.Parameters.AddWithValue("@Nome", cliente.Nome);
                    cmd.Parameters.AddWithValue("@Email", cliente.Email);
                    cmd.ExecuteNonQuery();
                }
            }
            catch(Exception ex)
            {
                throw ex;
            }
        }
        public static void Update(Cliente cliente)
        {
            try
            {
                using (var cmd = new SQLiteCommand(DbConnection()))
                {
                    if (cliente.Id != null )
                    {
                        cmd.CommandText = "UPDATE Clientes SET Nome=@Nome, Email=@Email WHERE Id=@Id";
                        cmd.Parameters.AddWithValue("@Id", cliente.Id);
                        cmd.Parameters.AddWithValue("@Nome", cliente.Nome);
                        cmd.Parameters.AddWithValue("@Email", cliente.Email);
                        cmd.ExecuteNonQuery();
                    }
                };
            }
            catch(Exception ex)
            {
                throw ex;
            }
        }
        public static void Delete(int Id)
        {
            try
            {
                using (var cmd = new SQLiteCommand(DbConnection()))
                {
                    cmd.CommandText = "DELETE FROM Clientes Where Id=@Id";
                    cmd.Parameters.AddWithValue("@Id", Id);
                    cmd.ExecuteNonQuery();
                }
            }
            catch(Exception ex)
            {
                throw ex;
            }
        }
    }
}

Temos neste código 8 métodos estáticos que realizam as seguintes tarefas:

  1. CriarBancoSQLite() - Crian um banco de dados SQLite com o nome e no local especificado;
  2. CriarTabelaSQlite() - Cria uma tabela no banco de dados SQLite com o nome informado;
  3. DbConnection() - Retorna uma conexão com o banco de dados SQLite;
  4. Add(Cliente cliente) - Inclui um cliente na tabela Clientes;
  5. GetClientes() - Retorna todos os dados da tabela Clientes;
  6. GetCliente(int id) - Retorna um cliente pelo seu ID;
  7. Update(Cliente cliente) - Atualiza os dados de um cliente existente;
  8. Delete(int Id) - Exclui os dados de um cliente existente pelo seu ID;

Estamos usando os recursos da ADO .NET (SQLiteConnection, SQLiteCommand,SQLiteDataAdapter)  e da SQL como as instruções para incluir (INSERT INTO), atualizar (UPDATE Clientes), excluir (DELETE FROM) , criar tabela (CREATE TABLE), selecionar(SELECT).

Fique à vontade para ajustar o código e realizar outras implementações que desejar. Uma sugestão seria alterar os métodos que retornam um DataTable para retornar um objeto Cliente.

Na próxima parte do artigo vamos implementar o código do formulário para realizar as operações no SQLite.

Se dissermos que temos comunhão com ele (Jesus), e andarmos em trevas, mentimos, e não praticamos a verdade.
Mas, se andarmos na luz, como ele na luz está, temos comunhão uns com os outros, e o sangue de Jesus Cristo, seu Filho, nos purifica de todo o pecado.

1 João 1:6,7

Veja os Destaques e novidades do SUPER DVD Visual Basic (sempre atualizado) : clique e confira !

Quer migrar para o VB .NET ?

Quer aprender C# ??

Quer aprender os conceitos da Programação Orientada a objetos ?

Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ?

  Gostou ?   Compartilhe no Facebook   Compartilhe no Twitter

Referências:


José Carlos Macoratti