COMMENT FAIRE : Mettre à jour une base de données à partir d'un objet DataSet à l'aide de Visual C# .NET

Traductions disponibles Traductions disponibles
Numéro d'article: 307587 - Voir les produits auxquels s'applique cet article
Ancien nº de publication de cet article : F307587
Agrandir tout | Réduire tout

Sommaire

Résumé

Cet article décrit étape par étape comment prendre un objet DataSet qui contient des données (chargées à partir d?une base de données), modifier ces données, puis les renvoyer à la base de données pour mettre à jour la source d?origine.

Les objets DataSet jouent un rôle clé pour l'accès aux données dans Microsoft .NET Framework. Ils sont en mémoire et peuvent contenir des tables, des vues et des relations.

Conditions requises

La liste suivante indique le matériel, les logiciels, l'infrastructure réseau recommandés et les Service Packs dont vous avez besoin :
  • Microsoft Windows 2000 Professionnel, Microsoft Windows 2000 Server, Microsoft Windows 2000 Advanced Server ou Microsoft Windows NT 4.0 Server
  • Microsoft SQL Server version 7.0, Microsoft SQL Server 2000, ou Microsoft Data Engine (MSDE), avec l'exemple de base de données PUBS installée
  • Microsoft Visual Studio .NET
Cet article suppose que vous connaissez les sujets suivants :
  • Terminologie des bases de données
  • Langage SQL (Structured Query Language)

Procédure de mise à jour d?une base de données à partir d?un objet DataSet

Cette section décrit comment utiliser un objet DataSet pour mettre à jour des données dans une base de données. Il est important de garder à l'esprit qu?il est également possible d?utiliser un objet SqlCommand pour insérer, mettre à jour et supprimer directement des données dans une base de données.

Pour vous aider à comprendre cet article, cliquez sur le numéro ci-dessous pour afficher l'article correspondant dans la Base de connaissances Microsoft :
  • 314145 PROCÉDURE : Remplir un objet DataSet à partir d'une base de données à l'aide de Visual C# .NET
Certaines des rubriques de l?article 314145 expliquent comment extraire des données d?une base de données pour les placer dans un objet DataSet, et montrent en quoi l?objet DataSet se distingue de la base de données.

Une fois l'objet DataSet chargé, vous pouvez modifier les données. Ces modifications seront répercutées sur l'objet DataSet. L'objet DataSet peut être considéré comme un cache en mémoire des données qui est récupéré à partir d'une base de données. L'objet DataSet se compose de tables, relations et contraintes.

Pour mettre à jour un objet DataSet et renvoyer les mises à jour à la base de données, procédez comme suit :
  1. Ouvrez Microsoft Visual Studio .NET.
  2. Créez une nouvelle application de console dans Visual C# .NET. Visual Studio crée une classe statique par défaut et une procédure Main() vide.
  3. Assurez-vous que le projet contient une référence aux espaces de noms System et System.Data. Utilisez l'instruction using sur les espaces de noms System, System.Data et System.Data.SqlClient, afin de ne pas avoir à rédiger de déclaration à partir de ces espaces de noms ultérieurement dans votre code. Vous devez placer ces instructions avant toute autre déclaration.
    using System;
    using System.Data;
    using System.Data.SqlClient;
  4. Pour pouvoir modifier les données et soumettre les modifications à la base de données, vous devez charger les informations dans l?objet DataSet. Pour obtenir les détails de la procédure, reportez-vous à l'article 314145 . Pour éviter les redondances, le code correspondant à cette étape n?est pas présenté en détails.

    La chaîne de connexion utilisée dans le code suivant pointe vers un serveur SQL Server situé sur l?ordinateur local (ou sur l?ordinateur où s?exécute le code), qui a un mot de passe vide pour le compte 'sa'. Remplacez cette chaîne par vos propres paramètres, si nécessaire. En résumé, une connexion est créée, puis un adaptateur de données est créé, qui permet de remplir l?objet DataSet avec des données.
    string sConnectionString;
    
    // Modifiez le code suivant pour vous connecter correctement à votre serveur SQL Server.
    sConnectionString = "Password=;User ID=sa;"
    	+ "Initial Catalog=pubs;"
    	+ "Data Source=(local)";
    
    SqlConnection objConn
    	= new SqlConnection(sConnectionString);
    objConn.Open();
    
    // Crée une instance d?objet DataAdapter.
    SqlDataAdapter daAuthors 
    	= new SqlDataAdapter("Select * From Authors", objConn);
    
    // Crée une instance d?objet DataSet et extrait les données de la table Authors (Auteurs).
    DataSet dsPubs = new DataSet("Pubs");
    daAuthors.FillSchema(dsPubs,SchemaType.Source, "Authors");
    daAuthors.Fill(dsPubs,"Authors");
  5. Maintenant que les données sont chargées, vous pouvez les modifier. Il existe de nombreuses méthodes permettant d?ajouter une ligne (ou un enregistrement). L?exemple de code suivant suit une procédure à trois étapes :
      • Obtenir un nouvel objet DataRow à partir de DataTable.
      • Définir les valeurs des champs DataRow comme il convient.
      • Placer ce nouvel objet dans la méthode Add de la collection DataTable.Rows.

    Collez le code suivant à la suite du code de l?étape 4:
    //****************
    // DÉBUT DU CODE D'AJOUT
    // Crée une nouvelle instance d?objet DataTable.
    DataTable tblAuthors;
    tblAuthors = dsPubs.Tables["Authors"];
    
    DataRow drCurrent;
    // Obtient un nouvel objet DataRow à partir de l?objet DataTable.
    drCurrent = tblAuthors.NewRow()
    
    // Définit les valeurs des champs DataRow comme nécessaire.
    drCurrent("au_id") = "993-21-3427"
    drCurrent("au_fname") = "George"
    drCurrent("au_lname") = "Johnson"
    drCurrent("phone") = "800 226-0752"
    drCurrent("address") = "1956 Arlington Pl."
    drCurrent("city") = "Winnipeg"
    drCurrent("state") = "MB"
    drCurrent("contract") = 1
    
    // Place ce nouvel objet dans la méthode Add de l'objet DataTable.
    tblAuthors.Rows.Add(drCurrent)
    Console.WriteLine("Ajout terminé. Appuyez sur n'importe quelle touche pour continuer !!");
    Console.ReadLine();
    
    // FIN DU CODE D?AJOUT
  6. Collez le code suivant à la suite du code de l?étape 4: Pour modifier des lignes existantes, vous devez obtenir l?objet DataRow approprié, puis fournir de nouvelles valeurs dans une ou plusieurs colonnes. En premier lieu, vous devez trouver la ligne correcte, opération qui est grandement facilité de par le chargement du schéma de la table en plus des données (appel de FillSchema à l?étape 4). Lorsque le schéma est en place, l?ordinateur sait quelle colonne représente la clé primaire de la table, et la méthode Find de la collection Rows est disponible.

    La méthode Find renvoie l?objet DataRow avec une valeur spécifique pour sa clé primaire (dans le cas présent, au_id). Une fois que vous disposez de cet objet DataRow, vous pouvez en modifier les colonnes. Il ne vous est pas nécessaire de placer les modifications entre BeginEdit et EndEdit, mais cela simplifie la tâche que doit effectuer l?objet DataSet et permet à cet objet de réaliser toutes les vérifications de validation à la fois lorsque EndEdit est appelé. Collez le code suivant à la suite du code d?ajout :
    //*****************
    // DÉBUT DU CODE DE MODIFICATION
    
    drCurrent = tblAuthors.Rows.Find("213-46-8915");
    drCurrent.BeginEdit();
    drCurrent["phone"] = "342" + drCurrent["phone"].ToString().Substring(3);
    drCurrent.EndEdit();
    Console.WriteLine("Enregistrement modifié. Appuyez sur n'importe quelle touche pour continuer !!");
    Console.ReadLine();
    
    // FIN DU CODE DE MODIFICATION  
  7. Collez le code suivant à la suite du code de l?étape 4: Pour mettre à jour la base de données d?origine avec toutes ces modifications, placez l?objet DataSet dans la méthode Update de l?objet DataAdapter.

    Toutefois, avant d?appeler la méthode Update, vous devez définir les propriétés InsertCommand, UpdateCommand et DeleteCommand de l?objet DataAdapter. Vous pouvez écrire directement le code SQL et remplir ces trois propriétés avec les objets SqlCommand correspondants, mais vous pouvez également utiliser Visual Studio .NET pour générer automatiquement ces trois commandes.

    Pour générer les commandes requises lorsque vous en avez besoin, vous devez créer une instance de l?objet SqlCommandBuilder et utiliser l?objet DataAdapter dans le constructeur. Pour utiliser cette méthode, illustrée dans l?exemple de code qui suit, vous devez disposer des informations de clé primaire de votre table. Pour accéder aux informations de clé primaire, appelez FillSchema, puis définissez la propriété MissingSchemaAction de votre objet DataAdapter sur AddWithKey, ou définissez manuellement la clé primaire dans le code. Collez le code suivant à la suite du code de modification :
    //*****************
    // DÉBUT DE L?ENVOI DES MODIFICATIONS AU SERVEUR SQL SERVER
    
    SqlCommandBuilder objCommandBuilder = new SqlCommandBuilder(daAuthors);
    daAuthors.Update(dsPubs, "Authors");
    Console.WriteLine("Mise à jour SQL Server terminée. Utilisez l'explorateur du serveur pour voir les modifications");
    Console.ReadLine();
    
    // FIN DE L?ENVOI DES MODIFICATIONS AU SERVEUR SQL SERVER
  8. Collez le code suivant à la suite du code de l?étape 4: Pour supprimer entièrement une ligne, utilisez la méthode Delete de l?objet DataRow. Notez que la collection Rows contient deux méthodes, Remove et RemoveAt, qui semblent supprimer la ligne, mais qui en fait la suppriment uniquement de la collection. Seule la méthode Delete renvoie la suppression à la base de données source. Collez le code suivant à la suite du code d?envoi des modifications au serveur SQL Server :
    //*****************
    // DÉBUT DU CODE DE SUPPRESSION 
    
    drCurrent = tblAuthors.Rows.Find("993-21-3427");
    drCurrent.Delete();
    Console.WriteLine("Enregistrement supprimé. Appuyez sur n'importe quelle touche pour continuer !");
    Console.ReadLine();
    
    // FIN DU CODE DE SUPPRESSION 
  9. Collez le code suivant à la suite du code de l?étape 4: Envoyez les modifications au serveur SQL Server pour supprimer l?enregistrement que vous avez ajouté précédemment. Collez le code suivant à la suite du code de SUPPRESSION :
    //*****************
    // NETTOYAGE DE SQL SERVER
    daAuthors.Update(dsPubs, "Authors");
    Console.WriteLine("Mise à jour SQL Server terminée. Utilisez l'explorateur du serveur pour voir les modifications");
    Console.ReadLine();
  10. Collez le code suivant à la suite du code de l?étape 4: Enregistrez votre projet.
  11. Collez le code suivant à la suite du code de l?étape 4: Dans le menu Déboguer, cliquez sur Démarrer pour exécuter le projet. Notez que plusieurs boîtes de messages apparaissent. Elles indiquent l?avancement de l?exécution du code et vous permettent de vérifier l?état des données tout au long de cette exécution.

Liste de code complète

using System;
using System.Data;
using System.Data.SqlClient;

namespace PopulateDataSet
{

    /// <summary>
    /// Description récapitulative pour Class1.
    /// </summary>
    class Class1
    {
        static void Main(string[] args)
        {
            string sConnectionString;

            // Modifiez la chaîne suivante pour vous connecter correctement à votre serveur SQL Server.
            sConnectionString = "Password=;User ID=sa;"
                + "Initial Catalog=pubs;"
                + "Data Source=(local)";

            SqlConnection objConn
                = new SqlConnection(sConnectionString);
            objConn.Open();

            // Crée une instance d?objet DataAdapter.
            SqlDataAdapter daAuthors 
                = new SqlDataAdapter("Select * From Authors", objConn);

            // Crée une instance d?objet DataSet et extrait
            // les données à partir de la table Authors.
            DataSet dsPubs = new DataSet("Pubs");
            daAuthors.FillSchema(dsPubs,SchemaType.Source, "Authors");
            daAuthors.Fill(dsPubs,"Authors");
            //****************
            // DÉBUT DU CODE D?AJOUT 
            // Crée une nouvelle instance d?objet DataTable.
            DataTable tblAuthors;
            tblAuthors = dsPubs.Tables["Authors"];

            DataRow drCurrent;
            // Obtient un nouvel objet DataRow à partir de l?objet DataTable.
            drCurrent = tblAuthors.NewRow()

            // Définit les valeurs des champs DataRow comme nécessaire.
            drCurrent("au_id") = "993-21-3427"
            drCurrent("au_fname") = "George"
            drCurrent("au_lname") = "Johnson"
            drCurrent("phone") = "800 226-0752"
            drCurrent("address") = "1956 Arlington Pl."
            drCurrent("city") = "Winnipeg"
            drCurrent("state") = "MB"
            drCurrent("contract") = 1

            // Place ce nouvel objet dans la méthode Add de l'objet DataTable.
            tblAuthors.Rows.Add(drCurrent)
            Console.WriteLine("Ajout terminé. Appuyez sur n'importe quelle touche pour continuer !!");
            Console.ReadLine();

            // FIN DU CODE D?AJOUT  
            //*****************
            // DÉBUT DU CODE DE MODIFICATION

            drCurrent = tblAuthors.Rows.Find("213-46-8915");
            drCurrent.BeginEdit();
            drCurrent["phone"] = "342" + drCurrent["phone"].ToString().Substring(3);
            drCurrent.EndEdit();
            Console.WriteLine("Enregistrement modifié. Appuyez sur n'importe quelle touche pour continuer !!");
            Console.ReadLine();
			
            // FIN DU CODE DE MODIFICATION  
            //*****************
            // DÉBUT DE L?ENVOI DES MODIFICATIONS AU SERVEUR SQL SERVER

            SqlCommandBuilder objCommandBuilder = new SqlCommandBuilder(daAuthors);
            daAuthors.Update(dsPubs, "Authors");
            Console.WriteLine("Mise à jour SQL Server terminée. Utilisez l'explorateur du serveur pour voir les modifications");
            Console.ReadLine();
			
            // FIN DE L?ENVOI DES MODIFICATIONS AU SERVEUR SQL SERVER
            //*****************
            // DÉBUT DU CODE DE SUPPRESSION 

            drCurrent = tblAuthors.Rows.Find("993-21-3427");
            drCurrent.Delete();
            Console.WriteLine("Enregistrement supprimé. Appuyez sur n'importe quelle touche pour continuer !");
            Console.ReadLine();
       
            // FIN DU CODE DE SUPPRESSION 
            //*****************
            // NETTOYAGE DE SQL SERVER
            daAuthors.Update(dsPubs, "Authors");
            Console.WriteLine("Mise à jour SQL Server terminée. Utilisez l'explorateur du serveur pour voir les modifications");
            Console.ReadLine();         	
			
        }
    }
}

Références

Pour plus d'informations sur l'utilisation de ADO.NET, les objets DataSet et SQL, consultez les sites Web de Microsoft (en anglais) aux adresses suivantes :
Diving into Data Access (colonne MSDN Voices)
http://msdn.microsoft.com/columns/
ADO.NET for the ADO Programmer (en anglais)
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/ dndotnet/html/adonetprogmsdn.asp
Centre de développement .NET MSDN Online
http://msdn.microsoft.com/net

Propriétés

Numéro d'article: 307587 - Dernière mise à jour: jeudi 11 janvier 2007 - Version: 3.0
Les informations contenues dans cet article s'appliquent au(x) produit(s) suivant(s):
  • Microsoft Visual C# .NET 2002 Initiation
Mots-clés : 
kbgrpdsvbdb kbhowto kbhowtomaster kbsqlclient kbsystemdata KB307587
L'INFORMATION CONTENUE DANS CE DOCUMENT EST FOURNIE PAR MICROSOFT SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE. L'UTILISATEUR ASSUME LE RISQUE DE L'UTILISATION DU CONTENU DE CE DOCUMENT. CE DOCUMENT NE PEUT ETRE REVENDU OU CEDE EN ECHANGE D'UN QUELCONQUE PROFIT.

Envoyer des commentaires

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com