Firebird.net / Requêtes et procédures stockées
lundi 28 novembre 2005, par Bech ()
Si l’on regarde le code pour utiliser firebird sous dotnet, il ressemble à celui pour SQL Server. La différence est sur l’usage des lettres "fb" pour identifier les types d’objet :
FbConnection,
FbCommand,
FbDataReader ...
Pour rendre cela possible, ne pas oublier de rajouter "Imports FirebirdSql.Data.Firebird" ou "Imports FirebirdSql.Data.FirebirdClient", de copier la dll du provider dans le dossier bin si c’est du asp.net et si vous ne voulez pas installer le provider complet.
rappel :
Namespace Imports FirebirdSql.Data.Firebird pour le client en framework 1.1,
Namespace Imports FirebirdSql.Data.FirebirdClient pour le client en framework 2,
Les exemples suivants en VB.NET proposent d’utiliser une requête ou une procédure selon différents cas à l’aide du provider dotnet pour Firebird.
Chaine de connection / identification de la base
Pour accéder à une base de données firebird vous devez passer par un objet fbConnection. Il est possible d’attribuer une valeur à chaque propriété de cet objet, mais vosu pouvez aussi lui fournir une simple chaine issus par exemple de votre fichier de configuration.
Voici un exemple de chaine :
Server=localhost ; Database=ASPNET_PROFILE.FDB ; User=SYSDBA ; Password=masterkey ; Pooling=true ; MinPoolSize=0 ; ConnectionLifetime=180 ;
Son format est assez simple : clef=valeur ;
description des valeurs :
| Clef | Description |
|---|---|
| Server | Nom ou ip du serveur hébergeant firebird |
| Database | fichier et chemin de la base, relatif au serveur |
| User et Password | Identification de l’utilisateur pour l’accès à la base |
| Pooling | Activer le pooling de connection |
| MinPoolSize | Minimum de connection simultanée |
| ConnectionLifeTime | Durée de vie d’une connection dans le pool |
Description complète des valeurs possibles (blog du créateur du provider)
Création de la base de données
Avant d’utiliser la base, si celle-ci n’existe pas, vous pouvez demander sa création à l’aide du code suivant :
Dim conn As FbConnection = New FbConnection(connectionString)
FbConnection.CreateDatabase(connectionString)
la création se fait en utilisant simplement les informations de la chaine connectionString.
Requêtes type SELECT
Dim myConnection As FbConnection
Dim myCommand As FbCommand
myConnection = New FbConnection("...")
myCommand = New FbCommand("SELECT ... FROM ...", myConnection)
'Paramètres à fournir dans l'ordre...
myCommand.Parameters.Add("@Param1", FbDbType.VarChar).Value = Valeur1
myConnection.Open()
Dim myreader As FbDataReader = myCommand.ExecuteReader
While myreader.Read()
' traiter les données...
End While
myreader.Close()
Requêtes type UPDATE / INSERT ...
Dim myConnection As FbConnection
Dim myCommand As FbCommand
myConnection = New FbConnection("...")
myCommand = New FbCommand("UPDATE ...", myConnection)
myConnection.Open()
myCmmand.ExecuteNonQuery()
Procédures stockées (retourne des données)
Dim myConnection As FbConnection
Dim myCommand As FbCommand
myConnection = New FbConnection("...")
myCommand = New FbCommand("MA_PROC", myConnection)
myCommand.Parameters.Add("@Param1", FbDbType.VarChar).Value = Valeur1
myCommand.CommandType = CommandType.StoredProcedure
myConnection.Open()
Dim myreader As FbDataReader = myCommand.ExecuteReader
Procédures stockées (retourne une seule valeur)
Dim myConnection As FbConnection
Dim myCommand As FbCommand
myConnection = New FbConnection("...")
myCommand = New FbCommand("MA_PROC", myConnection)
myCommand.Parameters.Add("@Param1", FbDbType.VarChar).Value = Valeur1
myCommand.Parameters.Add("@Resultat", FbDbType.Integer, 4).Direction = ParameterDirection.Output
myCommand.CommandType = CommandType.StoredProcedure
myConnection.Open()
myCommand.ExecuteNonQuery()
LeResultat = Convert.ToInt32(myCommand.Parameters("@Resultat").Value)
Créer complètement la base de données depuis un script
J’utilise ce code pour le profile provider pour créer une base à partir d’un script SQL. Il fait appel à l’objet FbBatchExecution qui permet le traitement d’un script SQL en batch. Le fichier schema.txt qui contient le script SQL est embarqué en tant que ressource dans la DLL :
Dim conn As FbConnection = New FbConnection(connectionString)
Dim NameSpc As String = Reflection.Assembly.GetExecutingAssembly().GetName().Name
Dim tempstream As IO.Stream = Reflection.Assembly.GetExecutingAssembly().GetManifestResourceStream(NameSpc + ".schema.txt")
Dim temp As New StreamReader(tempstream)
Dim Script As New FbScript(temp)
Try
FbConnection.CreateDatabase(connectionString)
conn.Open()
Script.Parse()
Dim fbe As New FbBatchExecution(conn)
For Each cmd As String In Script.Results
fbe.SqlStatements.Add(cmd)
Next
fbe.Execute()
conn.Close()
Return True
Catch
Return False
End Try
Il est également possible d’utiliser les ressources avec l’objet Me ce qui est plus simple du coup :
Me.GetType().Assembly.GetManifestResourceStream(...)