Bases de données
Manipuler une base de données avec Powershell.
Objectifs
À la fin de ce chapitre, vous serez capable de :
- Décrire les 3 étapes d’accès à une base de données (connexion, commande, récupération).
- Identifier les classes principales utilisées côté PowerShell/.NET.
- Lire et adapter un exemple de script pour exécuter une requête SQL.
Pour accéder à une base de données, il y a 3 étapes : la connexion, la commande et la récupération du résultat de la requête.
Pour ce faire on utilise les classes SqlConnection, SqlCommand, SqlDataAdapter du namespace .NET.
Namespace .NET
Les exemples ci-dessous utilisent System.Data.SqlClient (namespace historique, toujours fonctionnel sous Windows PowerShell 5.1). Pour les projets modernes avec PowerShell 7+ / .NET 6+, préférer Microsoft.Data.SqlClient qui reçoit les mises à jour de sécurité actives.

Pour plus de détails : Doc MS SQLClient
Connexion à une base de donnée
Pour pouvoir connecter une base de données, il faut plusieurs informations : l'url, le nom et l'utilisateur de la base ainsi que le mot de passe.
L'ouverture de la connexion à la base :
# Informations pour la connexion à la base de données
# Cette base est locale, il est cependant possible de donner une adresse IP ou un URL
$sqlServer = "localhost\SQLEXPRESS"
# Le nom de la base créée dans SQLExpress
$sqlDBName = "dbTestPS"
# Le login et pwd, toujours contrôler que l'utilisateur a bien les droits sur la base de données
$user = "sa"
$pwd = ".etm1-"
# Connexion à la base de données
$sqlConnection = New-Object System.Data.SqlClient.SqlConnection
$sqlConnection.ConnectionString = "Server = $sqlServer; Database = $sqlDBName; Integrated Security = True; User ID = $user; Password = $pwd;"
# ouvrir la connexion avec la base, toujours ouvrir et fermer la connexion
$sqlConnection.Open()Création de la commande
Il faut noter que la requête est définie dans une variable, donc un objet et qu'elle est utilisée pour la création de la commande.
Dans l'exemple, on fait une recherche sur les surnoms débutant avec les lettres DU.
Toutes les requêtes SQL sont possibles :
# La requete sql que l’on veut effectué sur la table, ici la recherche des surnoms qui commencent par les lettres DU
$sqlQuery = "SELECT * FROM [db.TestPS].[dbo].[Table_1] WHERE surname like 'DU%'"
# Lorsque la connexion est ouverte, on peut créer la commande pour la requête sur la base
$sqlCmd = New-Object System.Data.SqlClient.SqlCommand($sqlQuery,$sqlConnection)Récupération du résultat
Pour avoir les données résultant de la requêtes, on utilise la commande définie précédemment ainsi qu'une variable, qui peut contenir un nombre important d'informations !
On n'oublie pas la fermeture de la connexion :
# Pour récupérer les informations en retour
# La commande SqlDataAdapter permet mettre les résultats en mémoire sous forme de tables, ce qui est plus facile à manipuler
$sqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter($sqlCmd)
$dataSet = New-Object System.Data.DataSet
# Le résultat sera contenu dans la variable $dataSet. Le résultat sera retourné sous forme de tables. Dans notre cas, il y a une seule table
$sqlAdapter.Fill($dataSet)
# Fermeture de la connexion à la base
$sqlConnection.Close()- 5.- Créer une DB contenant une table avec nom, prénom et surnom, qui sont les 2 premiers caractères du nom et prénom. Écrire un script avec 1 paramètre d'entrée pour les 2 premières lettres de la recherche sur le surnom et qui affichage le résultat selon l'exemple ci-dessous.

Résumé
- L’accès à une base passe par une connexion, une commande SQL, puis la récupération des résultats.
- Les classes .NET (connexion/commande/adaptateur) structurent l’exécution.
- La fermeture de la connexion fait partie du « bon réflexe ».
