C# vers PostgreSQL
Introduction
Ce support d'apprentissage vous guidera dans le processus de connexion d'une application C# à une base de données PostgreSQL en utilisant le package Npgsql, le driver .NET le plus populaire pour PostgreSQL.
Objectifs d'apprentissage :
- Créer un projet C# et installer Npgsql
- Se connecter à une base de données PostgreSQL
- Exécuter des requêtes SQL (SELECT, INSERT, etc.)
- Lire et afficher des données depuis la base
Dans ce cours, nous partons du principe que vous avez déjà installé PostgreSQL sur votre machine. Si ce n'est pas le cas, consultez le cours PostgreSQL avec Docker.
Prérequis & Installation
Connaissances préalables
- Notions de base en C#
- Concepts SQL de base (CREATE, INSERT, SELECT)
Outils requis
| Outil | Version | Lien | Description |
|---|---|---|---|
| .NET SDK | 6.0+ | dotnet.microsoft.com | Framework de développement |
| PostgreSQL | Toute version | postgres-docker | Base de données (via Docker ou installation locale) |
| Éditeur de code | - | VS Code, NeoVim, etc. | Pour éditer le code |
Configuration du projet
Création du projet
Créez une nouvelle application console C# :
dotnet new console -n MyPostgresApp
cd MyPostgresApp
Installation du package Npgsql
Npgsql est le driver .NET pour PostgreSQL. Installez-le via NuGet :
dotnet add package Npgsql
Création de la base de données
Ignorez cette étape si vous possédez déjà une base de données créée (par exemple avec un fichier d'initialisation Docker).
Connexion à PostgreSQL
Entrez dans PostgreSQL via le terminal. Remplacez postgres par votre nom d'utilisateur :
psql -h localhost -U postgres
Créer la base et la table
CREATE DATABASE mydatabase;
Accédez à la nouvelle base de données :
\c mydatabase
Créez une table customer :
CREATE TABLE customer (id SERIAL PRIMARY KEY, name VARCHAR(50));
Quittez psql :
\q
Connexion à la base de données
Ouvrez le fichier Program.cs et ajoutez le code suivant :
using System;
using Npgsql;
class Program
{
static void Main()
{
var cs = "Host=localhost;Username=postgres;Password=your_password;Database=mydatabase";
using var con = new NpgsqlConnection(cs);
con.Open();
using var cmd = new NpgsqlCommand("SELECT version()", con);
var version = cmd.ExecuteScalar().ToString();
Console.WriteLine($"Version de PostgreSQL : {version}");
}
}
Remplacez your_password par le mot de passe que vous avez utilisé pour créer la base de données.
Exécuter l'application
dotnet run
Vous devriez voir la version de PostgreSQL s'afficher dans la console.
Ajouter un client (INSERT)
Ajoutez le code suivant dans la méthode Main, après la vérification de version :
using var cmdInsert = new NpgsqlCommand("INSERT INTO customer (name) VALUES ('John Doe')", con);
cmdInsert.ExecuteNonQuery();
Console.WriteLine("Client ajouté avec succès");
Exécutez à nouveau l'application :
dotnet run
Lire le contenu de la table (SELECT)
Ajoutez le code suivant dans la méthode Main :
using var cmdSelect = new NpgsqlCommand("SELECT * FROM customer", con);
using var reader = cmdSelect.ExecuteReader();
Console.WriteLine("\nListe des clients :");
while (reader.Read())
{
Console.WriteLine($"{reader.GetInt32(0)} {reader.GetString(1)}");
}
Exécutez l'application :
dotnet run
Vous devriez voir "1 John Doe" (ou plus si vous avez exécuté plusieurs fois l'insertion).
Code complet
Voici le code Program.cs complet :
using System;
using Npgsql;
class Program
{
static void Main()
{
var cs = "Host=localhost;Username=postgres;Password=your_password;Database=mydatabase";
using var con = new NpgsqlConnection(cs);
con.Open();
// Vérifier la version de PostgreSQL
using var cmdVersion = new NpgsqlCommand("SELECT version()", con);
var version = cmdVersion.ExecuteScalar().ToString();
Console.WriteLine($"Version de PostgreSQL : {version}");
// Ajouter un client
using var cmdInsert = new NpgsqlCommand("INSERT INTO customer (name) VALUES ('John Doe')", con);
cmdInsert.ExecuteNonQuery();
Console.WriteLine("Client ajouté avec succès");
// Lire tous les clients
using var cmdSelect = new NpgsqlCommand("SELECT * FROM customer", con);
using var reader = cmdSelect.ExecuteReader();
Console.WriteLine("\nListe des clients :");
while (reader.Read())
{
Console.WriteLine($"ID: {reader.GetInt32(0)}, Nom: {reader.GetString(1)}");
}
}
}
Bonnes pratiques
- Chaînes de connexion : Ne jamais hardcoder les mots de passe. Utilisez des variables d'environnement ou un fichier de configuration
- Using statements : Toujours utiliser
usingpour les connexions et commandes SQL afin de libérer les ressources - Requêtes paramétrées : Utilisez des paramètres pour éviter les injections SQL :
var cmd = new NpgsqlCommand("INSERT INTO customer (name) VALUES (@name)", con);
cmd.Parameters.AddWithValue("name", "Jane Doe");
cmd.ExecuteNonQuery();
- Gestion des erreurs : Ajoutez des try-catch pour gérer les exceptions de connexion
Aller plus loin
- Entity Framework Core : ORM pour gérer automatiquement les requêtes SQL
- Dapper : Micro-ORM léger et performant
- Transactions : Garantir l'intégrité des données avec
BeginTransaction() - Async/Await : Utilisez les versions asynchrones (
OpenAsync,ExecuteReaderAsync, etc.)
Ressources
- Documentation Npgsql - Documentation officielle du driver .NET
- PostgreSQL Documentation - Documentation complète PostgreSQL
- Learn SQL - Roadmap pour apprendre SQL
- ADO.NET Guide - Fondamentaux de l'accès aux données en .NET