VB.NET + Firebird : Primi esempi di utilizzo


Scritto da Giovanni Bernardo in data 23 marzo 2009

Come promesso, in questo articolo spiegherò come poter utilizzare Firebird da VB.NET, un’accoppiata perfetta dal momento che sia Firebird che Visual Basic .NET (versione express) sono totalmente Free! L’articolo precedente ci è servito per capire come si crea e gestisce un database con Firebird.

Cominciamo dunque a scaricare tutto ciò di cui abbiamo bisogno. Ci serve innanzitutto il provider .NET per Firebird, che ci permetterà di sviluppare e testare le applicazioni. Tale installazione non sarà necessaria sui computer che utilizzeranno la nostra applicazione. Di questa installazione, una volta finito il programma, ci servirà un’unica DLL che andrà distribuita insieme all’eseguibile. Da questa pagina è possibile scaricare il provider .NET.

NOTA
Come vedrete  (almeno alla data attuale, in cui scrivo), ci sono varie versioni, scartando la beta, che non ho provato, l’unica che a me funziona correttamente è la 1.7.2, ed è con questa che illustro questo articolo.

Installiamo dunque il provider, alla fine dell’installazione, in C:\Programmi, ci sarà una cartella dal nome FirebirdNETProvider1.7, in questa cartella il file che ci interessa è FirebirdSql.Data.Firebird.dll, tale DLL andrà distribuita insieme al programma e si dovrà trovare nello stesso percorso in cui si trova l’eseguibile.

Ci manca ancora qualcosa: la versione embed di Firebird, che possiamo scaricare da questa pagina cliccando sull’immagine reclamizzante l’ultima versione (2.1.1 alla data in cui scrivo) , nella sezione Win32 (o win64 se avete Vista a 64Bit) scarichiamo quindi il file avente la parola “EMBED” alla fine del nome del file. Questo è un file .zip e al suo interno sono contenute le DLL che permettono a Firebird di eseguire il suo lavoro, la DLL principale è fbembed.dll ma per esperienza personale è meglio copiare tutte le DLL qui presenti nello stesso percorso dell’eseguibile e distribuirle insieme all’applicazione, onde evitare alcuni strani errori (capita spesso che, copiando unicamente fbembed.dll, viene restituito l’errore impossibile caricare la DLL ‘fbembed’, che è molto strano dal momento che la DLL c’è, il problema si risolve copiando anche le altre librerie a collegamento dinamico).

Per cui ricapitolando: abbiamo installato il provider .NET di Firebird e sappiamo da dove recuperare la libreria  chiamata FirebirdSql.Data.Firebird.dll, abbiamo scaricato la versione embed di Firebird, l’abbiamo estratta e quindi abbiamo a portata di mano tutte le dll della versione embed che ci servono.

Cominciamo quindi a scrivere un semplice programmino che sfrutti Firebird. In questa sede ovviamente descriverò soltanto i passaggi principali che permettono di integrare Firebird nella nostra applicazione vb.net tralasciando tutto il resto. E’ comunque possibile, per gli utenti registrati, scaricare il progetto completo e funzionante alla fine dell’articolo.

Quando avviamo un nuovo progetto che dovrà sfruttare Firebird, dobbiamo innanzitutto ricordarci di aggiungere il riferimento al provider .NET, questo lo si fa cliccando su Progetto -> Aggiungi riferimento:

vbnet_firebird_00

Appare quindi la finestra con tutti i riferimenti che è possibile referenziare, cerchiamo quello di Firebird, (Firebird .NET Data Provider) selezioniamolo e clicchiamo su OK:

vbnet_firebird_01

NOTA
Come detto in precedenza, almeno io personalmente mi ritrovo il riferimento a Firebird .NET Data Provider soltanto se installo la versione 1.7.2 (che in vb.net viene indicata come 1.7.1.0 … altro mistero!). Se qualcuno ha chiaro il motivo di tale stranezza, può farlo presente mandando una email o lasciando un commento alla fine dell’articolo.

Arrivati a questo punto, con la direttiva Imports, importiamo lo spazio dei nomi di Firebird:

Imports FirebirdSql.Data.Firebird

Avremo così a disposizione tutti gli oggetti che ci permettono di effettuare connessione, query ecc ai database: FBConnection, FBCommand,FBDataAdapter ecc ecc. Per chi ha già utilizzato oledb, i nomi di queste proprietà risulteranno molto familiari, eseguono difatti le stesse identiche funzioni ma su database Firebird, per cui potrete notare l’estrema semplicità di utilizzo.

Altro punto importante: la stringa di connessione. La stringa di connessione di Firebird è forse la più semplice in assoluto:

Dim Str_Co As String = "Database=RUBRICA.FDB;ServerType=1"

Basta difatti specificare ServerType=1, se non diamo il percorso del database è implicito che si trovi nello stesso percorso dell’eseguibile.

Nota
Su Windows Vista, alcuni utenti riscontrano un errore quando provano ad effettuare la connessione, per ovviare al problema, bisogna inserire anche nome utente e password alla stringa di connessione, come specificato nel commento #5 in fondo all’articolo (grazie all’utente Cosmo per la gradita segnalazione).

Altro punto essenziale per il funzionamento dell’applicazione: dovete copiare tutte le DLL dette prima (FirebirdSql.Data.Firebird.dll e tutte quelle della versione embed) nella cartella bin/debug (se lavorate in modalità debug) oppure bin/release per il progetto finito e compilato, diversamente l’applicazione non funzionerà! Da notare che quando distribuirete l’applicazione, dovrete distribuire anche le DLL che, fortunatamente!, non dovranno essere registrate con regsvr32! Per cui basterà soltanto copiarle nello stesso percorso dell’applicazione e basta!

Nel progetto finito potrete notare alcune pratiche di buona programmazione che un software serio dovrebbe avere. Cito soltanto alcuni esempi:

  • Avendo limitato nel database nome e cognome a 50 caratteri ed e-mail a 100 caratteri, di conseguenza anche le textbox relative saranno limitate (tramite la proprietà MaxLength).
  • Avendo una DataGridView che visualizza i dati, l’utente si aspetta che accada qualcosa quando si effettua il doppio click su una riga, per cui ho intercettato l’evento doppioclick sulla DataGridView associandogli la stessa sub definita per il tasto edit (vedi sub chiamata Edit, alla quale sono collegati due eventi).
  • Ho utilizzato lo stesso form sia per l’inserimento di nuove persone che per la loro modifica, le funzioni cambiano in base ad un indice numerico pubblico, se tale indice assume valore -1, il form saprà che dovrà comportarsi da form di inserimento, se il valore assunto è differente da -1 allora il form si comporterà da form di modifica, e l’indice rappresenta in pratica l’id del record nel database. Eventuali errori di query verranno segnalati da un messagebox, utile durante il debug.
  • La disattivazione dei tasti Modifica ed Elimina se nel database non ci sono record.
  • La corretta disposizione dei TabIndex che consentono di navigare tra i pulsanti utilizzando il tasto TAB sulla tastiera (a qualche inesperto questo può far sorridere, ma tenete conto che in ambito produttivo i professionisti molto difficilmente utilizzano il mouse per spostarsi sul tastino successivo mentre stanno inserendo dati in una schermata).

applicazione_firebirdvbnet_00

applicazione_firebirdvbnet_01

Ci sono numerose altre cose che vanno sicuramente migliorate, come la verifica della presenza del database, del corretto inserimento dell’indirizzo email, un about-box, funzioni di stampa ecc, oltreché un ampliamento del database, ma questo non è slo copo di questo tutorial, che ha la sola funzione di dare il “LA” all’avvio dello sviluppo di applicazioni vb.net che sfruttano database Firebird. Il codice comunque è abbondantemente commentato e il suo funzionamento dovrebbe apparire abbastanza semplice anche a chi si avvicina la prima volta allo sviluppo di applicazioni su database. Sottolineo soltanto che in questa applicazione, non essendo sicuramente un’applicazione in cui il database è condiviso con altri utenti che possono fare modifiche in contemporanea, si lavora in modalità disconnessa, ovvero i dati vengono prelevati dal database tramite un adattatore dati e dall’adattatore dati passano in una tabella dati, la quale viene associata alla datagridview, stesso identico discorso per la modalità modifica.

Ricordo che per scaricare il sorgente di esempio bisogna essere registrati, non costa nulla!

Nel sorgente, nella cartella bin/debug NON sono contenute le DLL che dicevo prima, che consentono il funzionamento del database Firebird, per cui seguite le istruzioni dette prima per recuperarle e inserirle in questa cartella. NON è contenuto nemmeno il database di esempio rubrica.fdb, che potete scaricare dall’articolo precedente. Ho fatto così perchè i files ci sono già in giro, basta un minimo di assemblaggio (che dovrete comunque imparare a fare), e per rendere più leggero il download (62Kb attuali contro gli inutili 2Mb e rotti se era compreso di tutto).

Download: Progetto VB NET Rubrica Firebird (383)

Articoli che potrebbero interessarti:

L'articolo ti è piaciuto o ti è stato utile per risolvere un problema? Supporta e mantieni in vita questo sito, ci basta soltanto un caffè o una birra

  1. #1 da Francesco il 11 aprile 2009

    Buongiorno, è un articolo interessantissimo visto che sono ai primi passi sia con firebird che con VbExpress 2008, ma seguendo tutte le istruzioni sopramensionate compreso la copia delle DLL embed il programma rubrica nella compilazione non evince problemi, ma quando lo eseguo mi solleva un’eccezione alla riga di istruzione “Adattatore.Fill(Tabella)” e cioè :

    ***************************************
    System.NullReferenceException non è stata gestita
    Message=”Riferimento a un oggetto non impostato su un’istanza di oggetto.”
    Source=”FirebirdSql.Data.Firebird”
    [...]

    *********************
    Vi sarei grato se mi aiutaste a capire un pò di più.
    Grazie e auguri di Buona Pasqua

    Saluti
    Francesco

  2. #2 da Gianni il 12 aprile 2009

    x Francesco:
    Hai incluso anche il database? Ovvero il file rubrica.mdb che si trova all’articolo precedente?
    Ci hai messo dei dati dentro?
    Auguri!

  3. #3 da Francesco il 13 aprile 2009

    Grazie ancora, ho fatto tutto come da istruzioni, il database anche l’ho messo nella cartella e gli ho inserito un record manualmente con una INSERT, ma nulla da fare.

  4. #4 da Gianni il 13 aprile 2009

    x Francesco:
    Senti… io ho ricontrollato tutto…. a me funziona senza dare errori… Non è che per sbaglio hai cancellato qualche riga? Perchè in effetti quell’eccezione li viene restituita generalmente quando un oggetto non viene dichiarato… Al limite mandami per email il codice che stai usando tu, con database e tutto il resto.
    gianni at settorezero.com

  5. #5 da Cosmo il 24 ottobre 2009

    Ho appena letto questo articolo l’ho trovato molto interessante complimenti Gianni :) ho eseguito il sorgente ed ho trovato anche io un errore simile a quello di Francesco mi solleva un’eccezione alla riga di istruzione “Adattatore.Fill(Tabella)” :

    ***************************************
    System.NotImplementedException: Trusted Auth isn’t supported on Embedded Firebird.
    in FirebirdSql.Data.Client.Native.FesDatabase.AttachWithTrustedAuth(DatabaseParameterBuffer dpb, String dataSource, Int32 port, String database)
    ***************************************

    Ho risolto modificando la stringa di connessione in cui mancavano le credenziali d’accesso come sotto:

    Public Str_Co As String = “Database=RUBRICA.FDB;ServerType=1;username=sysdba;password=masterkey;”

    Saluti Cosmo

  6. #7 da Cosmo il 27 ottobre 2009

    Si sto usando vista

  7. #8 da Marco Rossi il 15 novembre 2009

    Salve, sto ora iniziando a studiare i DB ed in particolare FireBird che è free. Complimenti e grazie per i Tuoi articoli, molto interessanti ma soprattutto semplici ed efficaci. Io finora ho sviluppato per hobby qualcosa su Delphi4 con BDE e tabelle DBF. Avresti qualche articolo che parla di Delphi e Firebird ? Grazie ancora e buon lavoro.

    • #9 da Giovanni Bernardo il 15 novembre 2009

      Ciao e grazie.
      Non ho mai programmato con Delphi, per cui non ti so dare risposta. Penso che comunque il primo punto di partenza per avere le tue risposte siano il sito ufficiale di Firebird e quello delle Faq, con google ho trovato questo:

      http://www.firebirdfaq.org/faq8/

      Se riesci nel tuo intento, facci sapere, possiamo scrivere due righe di esempio per altri utenti che potrebbero avere la tua richiesta.

    • #10 da Giovanni Bernardo il 15 novembre 2009

      Guarda qui, ci sono alcune informazioni che possono esserti utili:
      https://forum.lithium.it/forum/viewtopic.php?f=13&t=14372

      (se usi firefox può darti problemi con il certificato di sicurezza, aggiungi un’eccezione e vai avanti: il motivo è spiegato nella pagina che puoi raggiungere togliendo la “s” dall’ https).

      Leggo che Delphi ha già incluso IBX che è un componente per Interbase (Ricordo che Firebird deriva da Interbase), quindi con quello ti dovrebbe già funzionare. Comunque se riesci a creare un esempio funzionante, e se vuoi, possiamo anche includerlo qui sul sito, a nome tuo ovviamente.

(non verrà pubblicata)
  1. Ancora nessun trackback

Fusion theme by digitalnature | Articoli (RSS) e Commenti (RSS) ^