Utilizzare SQLite con VisualBasic.Net
SQLite 3 è una libreria nella quale è implementato un database engine e può essere integrata facilmente nelle nostre applicazioni. Tra gli utilizzi più comuni per un database di questo tipo, ci sono:
- database dell’applicazione: parliamo comunque di una piccola applicazione, preferibilmente mono-utente;
- cache persistente
- database di parametri di configurazione o impostazioni
- …
La libreria SQLite è utilizzata da grandi compagnie e, tra l’altro, è usata come libreria per la persistenza nelle applicazioni Android. Trai suoi vantaggi principali ci sono:
- è open-source
- non richiede installazione
- supporta le transazioni
- è una libreria di funzioni, non un processo server
D’altro canto però quando siamo di fronte ad applicazioni distribuite o per le quali è necessario un accesso da parte di più utenti in contemporanea, un DBMS come MySQL fa sicuramente più al caso nostro. Dopo questa breve introduzione, passiamo al come cominciare velocemente ad utilizzare questa libreria nelle nostre applicazioni scritte in VisualBasic .Net.
1) Per prima cosa, scarichiamo la libreria. Possiamo farlo attraverso il sito ufficiale, oppure prendiamo le librerie fatte appositamente per .NET: ADO.NET 2.0 Provider for SQLite from sourceforge.
2) Copiamo la DLL System.Data.SQLite.DLL nel progetto e aggiungiamo un riferimento alla libreria
3) Scarichiamo un client GUI per SQLite che ci permetterà di gestire il database in modo semplice e veloce. Io ho utilizzato “SQLite Administrator”
4) Attraverso la GUI creiamo il database Dopo averlo creato, avremo un file che possiamo utilizzare nel nostro progetto. Non ci resta che utilizzarlo e per farlo, ad esempio, possiamo utilizzare questo modulo, scritto da me:
Imports System.Data.SQLite
Module Database
Public DATASOURCE_LOCATION As String = "Data Source=./dati/database.s3db"
#Region "Lettura dal database"
Public Function GetDataTable(ByVal comando As SQLiteCommand) As DataTable
Dim ret As New DataTable()
Dim connessione As SQLiteConnection = Nothing
Dim reader As SQLiteDataReader = Nothing
Try
connessione = New SQLiteConnection(DATASOURCE_LOCATION)
connessione.Open()
comando.Connection = connessione
reader = comando.ExecuteReader()
ret.Load(reader)
reader.Close()
connessione.Close()
Catch ex As Exception
DEBUG.LogSystemException(ex, comando.CommandText)
Finally
Try
If Not reader Is Nothing Then reader.Close()
Catch
End Try
Try
If Not connessione Is Nothing Then connessione.Close()
Catch
End Try
End Try
Return ret
End Function
Public Function GetDataTable(ByVal sql As String) As DataTable
Return Database.GetDataTable(New SQLiteCommand(sql))
End Function
Public Function ExecuteScalar(ByVal comando As SQLiteCommand) As Object
Dim ret As Object = Nothing
Dim connessione As SQLiteConnection = Nothing
Try
connessione = New SQLiteConnection(DATASOURCE_LOCATION)
connessione.Open()
comando.Connection = connessione
ret = comando.ExecuteScalar()
connessione.Close()
Catch ex As Exception
DEBUG.LogSystemException(ex, comando.CommandText)
Finally
Try
If Not connessione Is Nothing Then connessione.Close()
Catch
End Try
End Try
Return ret
End Function
Public Function ExecuteScalar(ByVal sql As String) As String
Return Database.ExecuteScalar(New SQLiteCommand(sql))
End Function
#End Region
#Region "inserimento nel database"
Public Function ExecuteInsertQuery(ByVal comando As SQLiteCommand) As Object
Dim ret As Object = Nothing
Dim connessione As SQLiteConnection = Nothing
Dim transazione As SQLite.SQLiteTransaction = Nothing
Try
connessione = New SQLiteConnection(DATASOURCE_LOCATION)
connessione.Open()
transazione = connessione.BeginTransaction()
comando.Connection = connessione
comando.Transaction = transazione
Dim rowsUpdated As Integer = comando.ExecuteNonQuery()
If rowsUpdated <= 0 Then
transazione.Rollback()
connessione.Close()
Else
' se questa riga dà un eccezione, viene fatto il rollback e chiusa la connessione nel catch
ret = (New SQLite.SQLiteCommand("SELECT last_insert_rowid() AS id", connessione, transazione)).ExecuteScalar()
transazione.Commit()
transazione.Rollback()
End If
Catch ex As Exception
DEBUG.LogSystemException(ex, comando.CommandText)
Finally
Try
If Not transazione Is Nothing Then transazione.Rollback()
Catch
End Try
Try
If Not connessione Is Nothing Then connessione.Close()
Catch
End Try
End Try
Return ret
End Function
Public Function ExecuteInsertQuery(ByVal sql As String) As Object
Return Database.ExecuteInsertQuery(New SQLiteCommand(sql))
End Function
#End Region
#Region "Query di aggiornamento"
Public Function ExecuteNonQuery(ByVal comando As SQLiteCommand) As Integer
Dim rowsUpdated As Integer = 0
Dim connessione As SQLiteConnection = Nothing
Try
connessione = New SQLiteConnection(DATASOURCE_LOCATION)
connessione.Open()
comando.Connection = connessione
rowsUpdated = comando.ExecuteNonQuery()
connessione.Close()
Catch ex As Exception
Try
If Not connessione Is Nothing Then connessione.Close()
Catch
End Try
End Try
Return rowsUpdated
End Function
Public Function ExecuteNonQuery(ByVal sql As String) As Integer
Return Database.ExecuteNonQuery(New SQLiteCommand(sql))
End Function
#End Region
End Module
L’ articolo e il codice sono ispirati a quelli reperibili all’indirizzo: http://www.mikeduncan.com/sqlite-on-dotnet-in-3-mins/, a cui consiglio di dare un’occhiata per ulteriori approfondimenti.

![Contattami su Facebook [Faceboook]](/per_blog/immagini_blog/facebook.jpg)
![Seguimi su Twitter [Twitter]](/per_blog/immagini_blog/twitter.jpg)
![Feed RSS [Feed RSS]](/per_blog/immagini_blog/rss.jpg)
![Vedi le mie foto su Flickr [Flickr]](/per_blog/immagini_blog/flickr.jpg)

Ciao Nicola, volevo porgerLe una domanda riguardante la connessione a SqLite, è possibile effettuare una connessione SqLite in VB.Net protetta da password o criptata ?? oppure se esiste un sistema per non far leggere il contenuto del file in modalità txt ? Grazie per l’attenzione, le porgo siccome siamo sotto Natale, Buon Natale passato e un felice anno nuovo.
Ciao Nicola, ti scrivo per chiederVi aiuto,
Io uso molto sqlite in vb.net, ma non riesco a creare una connessione su un db sqlite protetto da password , per caso potresti darmi una mano, di come devo connettermi a un db sqlite protetto, con apertura e chiusura connessione ?
Grazie per la disponobilità, in attesa di un vostro immediato riscontro , colgo l’occasione per porgerVi distinti saluti.