SED-P.NET

Accueil du site > Développement .net > Interbase / Firebird > Firebird.net / Requêtes et procédures stockées

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 :

ClefDescription
ServerNom ou ip du serveur hébergeant firebird
Databasefichier et chemin de la base, relatif au serveur
User et PasswordIdentification de l’utilisateur pour l’accès à la base
PoolingActiver le pooling de connection
MinPoolSizeMinimum de connection simultanée
ConnectionLifeTimeDuré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(...)

Répondre à cet article

Creative Commons License
Cette création est mise à disposition sous un contrat Creative Commons .

Articles de cette rubrique


Dernières brèves


A visiter