VB .NET - Usando o Banco de dados SQLite - 1


O SQLite é um banco de dados enxuto, fácil de instalar, manter e transportar e, por estes motivos, é indicado para aplicações que não requerem um banco de dados relacional de porte, afinal você não precisa de um "canhão para matar uma mosca" não é mesmo ?

O SQLite 3 é um SGBD(Sistema de Gerenciamento de Bancos de Dados) open source incrivelmente leve, e que funciona sem nenhuma configuração. Além disso, ele não possui um processo servidor, existindo assim apenas um processo responsável por ler e escrever os dados, sendo estas operações feitas diretamente no sistema de arquivos local.

Por se tratar de um SGBD sem um processo servidor, o SQLite 3 é auto contido, podendo assim ser distribuído junto com as aplicações. Na verdade, devido a sua natureza, este é um cenário de uso ideal para ele, principalmente quando a aplicação em questão não requer um SGBD mais robusto.

Para mergulhar fundo no SQLite visite o site oficial : http://www.sqlite.org/

A seguir algumas características do SQLite:

Se você esta entusiasmado com todas essas características lembre-se que ele é indicado apenas para pequenas aplicações.

Então esteja atento a este detalhe.

Neste artigo eu vou mostrar como usar o SQLite em uma aplicação VB .NET usando o VB 2008 Express Edition.

Preparando o terreno...

A primeira coisa a fazer é baixar o SQLite no site : http://www.sqlite.org/

A versão mais atual é a versão :  Version 3.8.8.3 

Para usar com outras versões do Visual Studio veja esse link:  http://system.data.sqlite.org/index.html/doc/trunk/www/downloads.wiki

Mas para o Visual Studio 2008 você tem que baixar uma versão específica que vai depender também do seu Sistema operacional. Assim temos:

  1. sqlite-netFx35-setup-bundle-x64-2008-1.0.96.0.exe  
  2. sqlite-netFx35-setup-bundle-x86-2008-1.0.96.0.exe

Dica: Usando o Nuget você pode facilitar o seu trabalho e baixar o pacote com o connector no seu projeto.  (Veja este artigo  .NET - Apresentando o Nuget - Macoratti.net )

Após estes procedimentos você poderá ver no Visual Studio 2008 SP1 o SQLite como mais uma opção de fonte de dados:

Criando o banco de dados

Vamos usar o SQLite DataBase Browser para criar nosso primeiro banco de dados no SQLite. Abrindo o aplicativo teremos a seguinte tela inicial:

No menu File selecione New DataBase e informe o local e o nome do banco de dados que você deseja criar.

Para este exemplo eu vou criar o banco de dados Macoratti.db na pasta c:\dados;

Na janela Create Table informe o nome da tabela como Cadastro e clique no botão Add;

Na janela Add database field informe o nome do campo e o seu tipo e clique no botão Create;

A estrutura da tabela Cadastro que iremos criar vai ter a seguinte estrutura:

Com isso acabamos de criar o nosso banco de dados no SQLite. (Neste momento podemos incluir alguns dados)

Criando a aplicação VB .NET

Vamos agora criar um novo projeto do tipo Windows Forms Application no VB 2008 Express Edition com o nome CadastroSQLite;

Nosso projeto será bem simples iremos criar uma interface para poder consultar, incluir, alterar e excluir dados de um banco de dados SQLite.

Nota: Eu não estou preocupado com boas práticas nem em usar uma arquitetura em camadas meu objetivo é mostrar como realizar as operações de consulta, inclusão, alteração e exclusão no SQLite. Por isso eu vou usar o código de acesso a dados nos eventos de formulário, prática que em uma aplicação de produção não é recomendada. Considere este exemplo como um protótipo usado apenas para apresentação.

Em todas as operações vamos abrir o banco de dados e em seguida fechar a conexão com o banco de dados.

No formulário padrão form1.vb inclua um componente DataGridView (name=gdvDados) e 4 controles Buttons conforme o leiaute abaixo:

Agora vamos incluir a referência ao provedor ADO .NET para o SQLite;

No menu Project Selecione Add Reference;

Na janela Adicionar Referencia , na aba .NET , selecione a referência System.Data.SQLite e clique em OK;

Agora já podemos usar o namespace System.Data.SQLite em nosso projeto. Defina a seguir os seguintes namespaces no formulário form1.vb:

Imports System.Data.SQLite
Imports System.Data
Imports System.IO

No início do formulário devemos definir as seguintes variáveis:

Dim sConnectionString As String
Public
id As Integer = -1

A primeira refere-se a string de conexão e a segunda é usada para obter o a identificação (id) do registro selecionado no DataGridView. Esta identificação é obtida no evento CellClick do DataGridView conforme o código abaixo:

Private Sub gdvDados_CellClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles gdvDados.CellClick
        If gdvDados.SelectedRows.Count > 0 Then
            Dim linhaAtual As DataGridViewRow = gdvDados.SelectedRows(0)
            id = Convert.ToInt32(linhaAtual.Cells(0).Value)
        End If
    End Sub

Como eu vou usar dados do tipo BLOB eu vou usar funções de suporte a este recurso. Para isso vamos criar a classe Funcoes e definir o seguinte código nesta classe:

Nota: Para criar uma classe selecione no VS 2008 a opção Project -> Add Class e informe o nome da classe;

Imports System.Data.SQLite
Imports System.IO

Public Class Funcoes

    Private Shared Function BlobToImage(ByVal blob)
        Dim mStream As New System.IO.MemoryStream
        Dim pData() As Byte = DirectCast(blob, Byte())
        mStream.Write(pData, 0, Convert.ToInt32(pData.Length))
        Dim bm As Bitmap = New Bitmap(mStream, False)
        mStream.Dispose()
        Return bm
    End Function

    Public Overloads Shared Function ImageToBlob(ByVal id As String, ByVal filePath As String)
        Dim fs As FileStream = New FileStream(filePath, FileMode.Open, FileAccess.Read)
        Dim br As BinaryReader = New BinaryReader(fs)
        Dim bm() As Byte = br.ReadBytes(fs.Length)
        br.Close()
        fs.Close()
       'Cria Parm
        Dim photo() As Byte = bm
        Dim SQLparm As New SQLiteParameter("@image", photo)
        SQLparm.DbType = DbType.Binary
        SQLparm.Value = photo
        Return SQLparm
    End Function

    Public Overloads Shared Function ImageToBlob(ByVal id As String, ByVal image As Image)
        Dim ms As New MemoryStream()
        image.Save(ms, System.Drawing.Imaging.ImageFormat.Png)
       'Cria Parm
        Dim photo() As Byte = ms.ToArray()
        Dim SQLparm As New SQLiteParameter("@image", photo)
        SQLparm.DbType = DbType.Binary
        SQLparm.Value = photo
        Return SQLparm
    End Function
End Class

O formulário form1.vb do nosso protótipo deverá exibir os dados da tabela Cadastro do banco de dados SQLite Macoratti.db. Dessa forma no evento Load do formulário vamos chamar a rotina carregaDados que deverá acessar o banco de dados e exibir os registros:

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        carregadados()
    End Sub

    Private Sub carregadados()
    try
        'define string de conexão com banco de dados SQLite - Macoratti.db criado na pasta c:\dados
        'usando a criptografia
        sConnectionString = "Data Source=c:\dados\Macoratti.db;Version=3;New=True;Compress=True;"
        'abre a conexão
        Dim oConn As New SQLite.SQLiteConnection(sConnectionString)
        oConn.Open()
        'define o comando SQL para retornar todos os dados da tabela Cadastro
        Dim daCadastro As New SQLite.SQLiteDataAdapter("Select id,nome,idade,foto From Cadastro order by id", oConn)
        'define o dataset
        Dim ds As New DataSet("Northwind")
        'define o esquema da tabela
        daCadastro.FillSchema(ds, SchemaType.Source, "Cadastro")
        'preenche o dataset
        daCadastro.Fill(ds, "Cadastro")
        'exibe os dados no datagridview
        gdvDados.DataSource = ds.Tables("Cadastro")
        'fecha a conexao
        oConn.Close()
    Catch ex As Exception
           MsgBox("Erro ao acessar o banco de dados SQLite: " & ex.Message)
    End Try
    End Sub

Neste singelo código, já comentado, eu apenas destaco a string de conexão usada para acessar o SQLite:

sConnectionString = "Data Source=c:\dados\Macoratti.db;Version=3;New=True;Compress=True;"

onde temos :

- Data Source - Indicando o caminho e nome do banco de dados;
- Version - a versão usada, no nosso caso a versão 3;
- Compress - Indica que estamos usando a compactação no banco de dados;

Para mais detalhes sobre esse assunto consulte: http://www.connectionstrings.com/sqlite

Executando o projeto iremos ver o DataGridView exibindo os dados da tabela Cadastro (os dados foram incluídos por mim previamente) conforme a figura abaixo:

Eu sei é apenas VB .NET , mas eu gosto.

Aguarde a segunda parte deste artigo onde irei mostrar como incluir, excluir e alterar dos no SQLite:

VB .NET - Usando o Banco de dados SQLite - 2

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