vendredi 9 janvier 2015

PowerShell et FireBird

Dans cet article, nous allons voir comment utiliser les bases FireBird avec Windows PowerShell et le Data Provider "Ado.net". L'exemple suivant montre comment se connecter sur une base FireBird, et utilisation des instructions Create Table, Insert Into, Select, Update, Delete From et Drop Table.

Installer FireBird


Je cherchais une base de donnée légère et portable pour pouvoir héberger mes données et je suis tombé sur FireBird. Cette base de donnée fait moins de 20Mo, et il est possible de la rendre portable à l'aide d'une petite procédure.

Tout d'abord nous devons installer FireBird. Les sources sont ici "Download_FireBird". Téléchargez la dernière version pour Win64 "SuperServer", puis installez la base de donnée.

Il nous faudra également un connecteur pour pouvoir utiliser FireBird avec PowerShell. Les sources du connecteur sont ici "ADO.NET".

La procédure pour convertir FireBird en version portable est ici "Procédure". Bon d'accord, c'est en anglais. Je vais vous traduire ca rapidement :
- Installez FireBird (si ce n'est pas déjà fait).
- Arrêtez les services de FireBird.
- Copiez le dossier “C:\Program Files\Firebird\Firebird_2_5\” sur votre clé USB par exemple.
- Ouvrez le dossier ou vous avez copié FireBird.
- Supprimez le fichier firebird.conf (Si vous avez apporté des modifications).
- Créez un nouveau batch nommé "Start.bat".
- Editez le fichier "Start.bat", et copiez les deux lignes suivante dedans :
  cd bin
  fbserver.exe -a -p 3050 -database "localhost:..\security2.fdb" –n

- Créez également le batch "Stop.bat".
- Editez le fichier "Stop.bat", et copiez la ligne suivante dedans :
  taskkill /F /IM fbserver.exe /T
Et voila c'est fini ;)

FlameRobin


Bien que cela ne sois pas indispensable pour cet article, vous pouvez également installer FlameRobin pour l'administration graphique de la base. Je vous laisse consulter le site ici "FlameRobin".

Créer une base


Maintenant que FireBird tourne, il est temps de créer une base de donnée. Allez dans le dossier "FireBird\bin", et lancez "iSQL.exe". Tapez la commande suivante :
SQL>CREATE DATABASE 'mypath\JumborDB.fdb' page_size 8192
CON>user 'SYSDBA' password 'masterkey';
N'oubliez pas de remplacer "mypath" par un chemin valide.

Exemple


 
#############################################################
# Prérequis :
#     Installer le connecteur ADO.NET.
#     Créer la base de test "JumborDB" avec iSql.
#############################################################

#Assembly.
[Reflection.Assembly]::LoadFile("C:\Program Files (x86)\FirebirdClient\FirebirdSql.Data.FirebirdClient.dll")

#Chaine de connection.
$Connetion = "User=SYSDBA;Password=masterkey;DataSource=localhost;Port=3050;Database=JumborDB;initial catalog=mypath\\JumborDB.fdb;Dialect=3;Charset=NONE;Role=;Connection lifetime=15;Pooling=true;MinPoolSize=0;MaxPoolSize=50;Packet Size=8192;ServerType=0;"
#N'oubliez pas de remplacer "mypath" par un chemin valide.

Function FB_Query([string] $fbConn, [string] $fbQuery)
 {
   #Etablit la connexion avec la base SQL.
   $firebird = new-object FirebirdSql.Data.FirebirdClient.FbConnection($fbConn)
   $firebird.Open()

   #Exécute et récupère le résultat.
   $DataSet = New-Object System.Data.DataSet
   $Adapter = New-Object FirebirdSql.Data.FirebirdClient.FBDataAdapter($fbQuery, $firebird)
   $Adapter.Fill($DataSet)

   #Ferme la connexion avec la base SQL.
   $firebird.Close()

   #Renvoie le résultat.
   return $DataSet.Tables[0]

   #Close.
   $Adapter.Close
   $DataSet.Close
 }

######################################################################
# Voici la liste de différentes requêtes SQL que vous pouvez essayer.
# Supprimez le # devant la requête SQL que vous souhaitez tester.
######################################################################
#Créer une table.
#$myQuery = "CREATE TABLE Table1 (Colonne1 varchar(20) not null, Colonne2 varchar(20) not null)"
#Ajouter une ligne.
#$myQuery = "INSERT INTO Table1 (Colonne1,Colonne2) VALUES ('Jumbor12','PowerShell')"
#Lire une table.
#$myQuery = "SELECT * FROM Table1"
#Lire une ligne.
#$myQuery = "SELECT * FROM Table1 WHERE Colonne1 = 'Jumbor12'"
#Modifier une valeur.
#$myQuery = "UPDATE Table1 SET Colonne2 = 'PowerShell 2.0' WHERE Colonne2 = 'PowerShell'"
#Supprimer une ligne.
#$myQuery = "DELETE FROM Table1 WHERE Colonne1 = 'Jumbor12'"
#Supprimer une table.
#$myQuery = "DROP TABLE Table1"
######################################################################

#Affiche la requête exécutée.
Write-Host $myQuery

#Exécute la requête.
$rtn = FB_Query $Connetion $myQuery
foreach ($raw in $rtn)
 {
   #Ici j'affiche le retour pour les requêtes de lecture de données.
   Try { Write-Host "Line :" $raw[0] $raw[1] } catch {}
 }
Write-Host "Exécution terminé."

#Fin.