Aller au contenu principal

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
attention

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

OutilVersionLienDescription
.NET SDK6.0+dotnet.microsoft.comFramework de développement
PostgreSQLToute versionpostgres-dockerBase 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

remarque

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}");
}
}
attention

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 using pour 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