Oct 14 2010

C# / Interagir avec une base de données SQL

Si vous cherchez un moyen de vous connecter à une base de données, je vous conseille plutôt de lire ce tutoriel sur la liaison à une base avec Entity Framework, offrant la possibilité d’interagir sans utiliser de requêtes SQL.
Je laisse juste celui-ci en ligne au cas où.
Pour en savoir plus, lisez la conclusion de ce tutoriel.

Présentation

Aujourd’hui, j’aborde l’interaction avec les base de données depuis votre application .NET : lecture, ajout, modification et suppression de données.

Ce tutoriel est valable pour la plupart pour les projets .NET (WPF, WCF, ASP.NET, Windows Forms…) ayant la possibilité de communiquer directement avec une base de données. (Je ne parlerai donc pas de Windows Phone, Windows 8, Silverlight, nécessitant un intermédiaire supplémentaire comme un webservice…)

Prérequis

Selon le SGBD que vous utilisez, des composants peuvent être à télécharger.

Pour SQL Server, tout est natif.
Voici les liens des composants pour MySQL et Oracle :

Pour les autres, je vous laisse chercher sur le net 😉

Pour commencer…

Nous allons intégrer les références à l’aide des instructions using.

SQL Server

using System.Data.SqlServer;

SQL Server Compact

using System.Data.SqlServerCe;

MySQL

using System.Data.MySqlClient;

Oracle

using Oracle.DataAccess.Client;

REMARQUE :
Si la référence est soulignée en rouge, veillez à ce qu’elle soit bien intégrée à votre projet.
Cliquez-droit sur votre projet, Ajouter une référence puis trouvez la DLL dont vous avez besoin.

Les exemples ci-dessous sont valables avec SQL Server uniquement.
Toutefois, pour un autre SGBD, il vous suffit de prendre l’équivalent en fonction de ce tableau :

SQL Server MySQL Oracle SQL Server Compact Edition
SqlConnection MySqlConnection OracleConnection SqlCeConnection
SqlCommand MySqlCommand OracleCommand SqlCeCommand
SqlDataReader MySqlReader OracleReader SqlCeReader

… et c’est parti !

Connexion à la base de données

Nous imaginons une application qui souhaite se connecter à une base SQL Server contenant une seule table

couleur { id, nom }

On établi la connexion avec un objet SqlConnection, en lui transmettant la chaîne de connexion.

// Préparation de la connexion à la base de données
string connectionString = "Data Source=myServerAddress;Initial Catalog=myDataBase;User Id=myUsername;Password=myPassword;"

SqlConnection connection = new SqlConnection(connectionString);

try
{
     // Connexion à la base de données
     connection.Open();
}
catch (Exception ex)
{
     MessageBox.Show(ex.Message);
     return;
}

Exécuter une requête

On utilise l’objet SqlCommand pour exécuter des requêtes SQL.

// Préparation de la requête SQL à exécuter
SqlCommand command = connection.CreateCommand();
command.CommandText = "SELECT id, nom FROM COULEUR";

Lire des données

Nous allons lister toutes nos couleurs dans une ComboBox.
On se sert d’un SqlDataReader, pour boucler et lire les données.

// Lecture des résultats
SqlDataReader dataReader = command.ExecuteReader();

while (dataReader.Read())
{
     comboBox.Items.Add(dataReader["nom"]);
}

Filtrer les résultats / Passer des paramètres

Pour filtrer les résultats, on peut utiliser le mot-clé WHERE.
Afin d’avoir un code clair et sécurisé, il est recommandé de passer par des paramètres plutôt de que générer la requête en concaténant des chaînes.
On utilise AddWithValue() de la propriété Parameters de notre objet SqlCommand.

command.CommandText = "SELECT * FROM couleur WHERE id = @id";
command.Parameters.AddWithValue("@id", 3);

Créer, modifier ou supprimer des données

On utilise aussi SqlCommand.
Et étant donné que nous n’avons pas nécessité à lire des résultats, on peut utiliser la méthode ExecuteNonQuery().

// Définition de la requête
command.CommandText = "INSERT INTO couleur (id, nom) VALUES (@id, @nom)";
command.Parameters.AddWithValue("@id", 1);
command.Parameters.AddWithValue("@nom", "Violet");

// Exécution de la requête
wCommand.ExecuteNonQuery();
}

Le principe reste le même pour des requêtes UPDATE ou DELETE.

Conclusion

Créez une classe spécifique pour gérer chaque table de votre base de données avec des méthodes pour lire, ajouter, modifier ou supprimer des données. Cela vous permettra de rendre le travail assez propre et vous évitera de vous mélanger les pinceaux.

Enfin, il existe un autre moyen pour interagir avec une base de données, en passant par un ORM. Ce type d’outil vous permet entre autres de générer automatiquement des objets correspondant aux éléments de votre base de données (tables, champs, colonnes…).
Cela vous permet notamment de ne plus avoir à écrire des requêtes SQL et à faciliter la maintenance de votre application.

Pour .NET, Microsoft propose Entity Framework, désormais open-source.
Je vous recommande de lire mon autre tutoriel disponible ici !

Articles similaires:

Lien Permanent pour cet article : http://jbvigneron.fr/2010/10/14/csharp-interagir-avec-une-base-de-donnees-sql/

(3 commentaires)

1 ping

    • hsn on 6 décembre 2017 at 16 h 53 min
    • Répondre

    Bonjour,

    Je suis sur un projet en c# et je trouve que vos explications tres bien merci.

    Mais j’ai une question ou je trouve pas de solution, c’est quelle est la difference entre linqto entity et entity framework?

    merci a vous.

  1. Bonjour hsn,
    Je m’excuse pour la réponse tardive.

    Cet article répondra à ta demande 🙂
    https://stackoverflow.com/questions/3968138/entity-framework-vs-linq-to-entities-vs-linq-to-sql

    • sisi on 21 janvier 2018 at 10 h 47 min
    • Répondre

    bonjour;
    comment remplir un combobox a partir d’une table sqlserver?
    merci d’avance.

  1. […] C# / Interagir avec une base de données SQL – Jean-Baptiste VIGNERON. Si vous cherchez un moyen de vous connecter à une base de données, je vous conseille plutôt de lire ce tutoriel sur la liaison à une base avec Entity Framework, offrant la possibilité d’interagir sans utiliser de requêtes SQL. Je laisse juste celui-ci en ligne au cas où. Pour en savoir plus, lisez la conclusion de ce tutoriel. Aujourd’hui, j’aborde l’interaction avec les base de données depuis votre application .NET : lecture, ajout, modification et suppression de données. […]

Laisser un commentaire

Your email address will not be published.

css.php