Comment mettre à jour une base de données à partir d'un objet DataSet à l'aide de Visual .NET de C++ ou Visual C++ 2005

Traductions disponibles Traductions disponibles
Numéro d'article: 815660 - Voir les produits auxquels s'applique cet article
Agrandir tout | Réduire tout

Sommaire

Résumé

Cet article étape par étape vous explique comment faire un DataSet qui contient des données (qui sont chargées à partir d'une base de données), comment modifier ces données, puis comment envoyer vers la base de données pour mettre à jour la source d'origine.

objets DataSet , une partie clée d'accès aux données dans Microsoft .NET Framework, sont des objets en mémoire qui peuvent contenir des tables, vues et relations.

Configuration requise

La liste suivante met en évidence le matériel recommandé, logiciel infrastructure réseau et service packs dont vous avez besoin :
  • Une des options suivantes : Microsoft Windows 2000 Professionnel, Microsoft Windows 2000 Server, Microsoft Windows 2000 Advanced Server ou Microsoft Windows NT 4.0 Server
  • Une des options suivantes : Microsoft SQL Server version 7.0, Microsoft SQL Server 2000 ou Microsoft Data Engine (MSDE) avec la base de données exemple PUBS installé avec les autorisations appropriées, UserID et mot de passe de valeurs.
  • Microsoft Visual Studio .NET ou Microsoft Visual Studio 2005
Cet article suppose que vous êtes familiarisé avec les sujets suivants :
  • Terminologie de base de données
  • Structured Query Language (SQL)


Mise à jour une base de données à partir d'un objet DataSet

Cette section explique comment utiliser l'objet DataSet pour mettre à jour les données dans une base de données.

important Vous pouvez également utiliser un objet SqlCommand pour insérer, mettre à jour et supprimer directement des données dans une base de données.

Une fois que le DataSet est chargée, vous pouvez modifier les données. Le DataSet suivra ces modifications. L'objet DataSet peut être considéré comme un cache en mémoire des données extraites à partir d'une base de données. L'objet DataSet regroupe d'une collection de tables, relations et les contraintes.

Pour mettre à jour un DataSet et envoyer les mises à jour vers la base de données, procédez comme suit :
  1. Ouvrez Microsoft Visual Studio .NET ou Microsoft Visual Studio 2005.
  2. Créez une Application C++ gérée dans Visual C++ .NET. Visual Studio crée une fonction main() . Supprimer tout code généré à partir de la fonction main() .
  3. Pour ajouter une référence pour les espaces de noms System et System.Data , ajoutez le code suivant
    #using <System.Dll>
    #using <System.Data.Dll>
    #using <System.Xml.Dll>
  4. Utilisez l'instruction USING sur les espaces de noms System , System.Data et System.Data.SqlClient afin qu'il ne soit pas nécessaire de qualifier les déclarations de ces espaces de noms plus loin dans votre code. Vous devez utiliser ces instructions avant toute autre déclaration.
    using namespace System;
    using namespace System::Data;
    using namespace System::Xml;
    using namespace System::Data::SqlClient;
    
  5. Avant de pouvoir modifier les données et envoyer que le restaure à la base de données, vous devez charger les informations dans le DataSet .

    La chaîne de connexion dans le code suivant pointe vers un serveur SQL Server qui est situé sur l'ordinateur local (ou l'ordinateur sur lequel le code s'exécute). Remplacez cette chaîne par vos propres paramètres.

    Pour résumer, une connexion est créée, et ensuite un adaptateur de données est créé, qui est utilisé pour alimenter le DataSet avec des données.
    SqlConnection  *objConn;
    String *sConnectionString;
    sConnectionString = "Password=StrongPassword;User ID=UserName;Initial Catalog=pubs;Data Source=(local)";
    
    objConn = new SqlConnection(sConnectionString);
    objConn->Open();
            
    // Create an instance of a DataAdapter.
    SqlDataAdapter* daAuthors = new SqlDataAdapter("Select * From Authors", objConn);
    
    // Create an instance of a DataSet, and retrieve data from the Authors table.
    DataSet* dsPubs = new DataSet("Pubs");
    daAuthors->FillSchema(dsPubs,SchemaType::Source, "Authors");
    daAuthors->Fill(dsPubs,"Authors");
    
    Remarque vous devez ajouter l'option compilateur courants langue runtime prise en charge (/ clr:oldSyntax) de Visual C++ 2005 pour compiler avec succès l'exemple de code précédent. Pour ajouter l'option langue exécution prise en charge compilateur courantes dans Visual C++ 2005, procédez comme suit :
    1. Cliquez sur le projet , puis cliquez sur <ProjectName>Propriétés.

      note <ProjectName>est un espace réservé pour le nom du projet.
    2. Développez les propriétés de configuration , puis cliquez sur général .
    3. Cliquez pour sélectionner Common Language Runtime Support, l'ancienne syntaxe (/ clr:oldSyntax) dans le paramètre projet prend en charge du Common Language Runtime dans le volet droit, cliquez sur Appliquer , puis cliquez sur OK .
    Pour plus d'informations sur le common language runtime prennent en charge option de compilateur, reportez-vous au site de Web Microsoft suivant adresse :
    /CLR (Common Language Runtime compilation)
    http://msdn2.microsoft.com/en-us/library/k8d11d4s.aspx
    Ces étapes s'appliquent à l'article entier.
  6. Maintenant que les données sont chargées, vous pouvez le modifier. Il existe plusieurs façons d'ajouter une ligne (ou enregistrement). Cet exemple de code utilise un trois-procédure étape :
    1. Obtenir un nouvel objet de DataRow du DataTable .
    2. Définir les valeurs de champ DataRow si nécessaire.
    3. Passez ce nouvel objet dans la méthode Add de la collection DataTable.Rows .

    Collez le code suivant après le code dans l'étape 5:
    // BEGIN ADD CODE 
    // Create a new instance of a DataTable.
    DataTable* tblAuthors = dsPubs->Tables->Item["Authors"];
    
    
    // Obtain a new DataRow object from the DataTable.
    DataRow* drCurrent = tblAuthors->NewRow();
    
    // Set the DataRow field values as necessary.
    drCurrent->set_Item("au_id",new String("993-21-3427"));
    
    drCurrent->set_Item("au_fname",new String("George"));
    drCurrent->set_Item("au_lname",new String("Johnson"));
    drCurrent->set_Item("phone",new String("800 226-0752"));
    drCurrent->set_Item("address", new String ("1956 Arlington Pl."));
    drCurrent->set_Item("city", new String("Winnipeg"));
    drCurrent->set_Item("state", new String("MB"));
    drCurrent->set_Item("contract",__box(1));
    
    // Pass that new object into the Add method of the DataTable.
    tblAuthors->Rows->Add(drCurrent);
    Console::WriteLine("Add was successful, Click any key to continue!!");
    Console::ReadLine();
    
    // END ADD CODE  
    
  7. Pour modifier les lignes existantes, obtenir l'objet DataRow approprié, puis fournir des nouvelles valeurs pour une ou plusieurs colonnes. Vous devez tout d'abord trouver la ligne concernée, qui est beaucoup plus facile car vous chargé le schéma de la table ainsi que les données (appel à FillSchema dans l'étape 5). Avec le schéma en place, la table sait quelle est la colonne est sa clé primaire et la méthode Find de la collection Rows est disponible.

    La méthode Find renvoie l'objet DataRow avec une valeur spécifique dans sa clé primaire (dans ce cas, au_id). Une fois que vous avez que DataRow , vous pouvez modifier les colonnes. Vous n'avez pas à encapsuler les modifications dans BeginEdit et EndEdit, mais cela simplifie le travail que le DataSet à et permet le DataSet à effectuer ses tests de validation simultanément lorsque EndEdit, est appelée.

    Collez le code suivant après le code dans l'étape 6:
    // BEGIN EDIT CODE 
    
    drCurrent = tblAuthors->Rows->Find(new String("213-46-8915"));
    drCurrent->BeginEdit();
    
    drCurrent->set_Item("phone",String::Concat(S"342",(static_cast<String *>(drCurrent->Item["phone"]))->Substring(3)));
    drCurrent->EndEdit ();
    Console::WriteLine("Record edited successfully, Click any key to continue!!");
    Console::ReadLine();
    
    // END EDIT CODE
    
  8. Pour mettre à jour la base de données d'origine avec toutes ces modifications, passez le DataSet dans la méthode Update de l'objet DataAdapter .

    Toutefois, avant de pouvoir appeler mise à jour , vous devez définir les propriétés InsertCommand , UpdateCommand et DeleteCommand de l'objet DataAdapter . Vous pouvez manuellement écriture SQL et remplir ces trois propriétés des 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 lorsqu'ils sont nécessaires, vous devez créer une instance de l'objet SqlCommandBuilder et utiliser l' objet DataAdapter dans le constructeur. Si vous souhaitez utiliser cette méthode (illustrée dans l'exemple de code qui suit), vous devez posséder principales informations clées disponibles pour votre tableau. Pour accéder aux informations de clé primaires, appelez FillSchema et ensuite définir la propriété MissingSchemaAction de votre objet DataAdapter à AddWithKey ou définir manuellement la clé primaire dans votre code.

    Collez le code suivant après le code d'étape 7.
    // BEGIN SEND CHANGES TO SQL SERVER 
    
    SqlCommandBuilder* objCommandBuilder = new SqlCommandBuilder(daAuthors);
    daAuthors->Update(dsPubs, "Authors");
    Console::WriteLine("SQL Server updated successfully, Check Server explorer to see changes");
    Console::ReadLine();
    
    // END SEND CHANGES TO SQL SERVER 
    
  9. Pour supprimer complètement une ligne, utilisez la méthode Delete de l'objet DataRow .

    note La collection Rows contient deux méthodes, supprimer et RemoveAt , qui semblent supprimer la ligne mais au lieu de cela supprime simplement la ligne à partir de la collection. Uniquement la méthode Delete envoie votre suppression dans la base de données source.

    Collez le code suivant après le code dans l'étape 8:
    //BEGIN DELETE CODE 
    
    drCurrent = tblAuthors->Rows->Find(new String("993-21-3427"));
    drCurrent->Delete();
    Console::WriteLine("Record deleted successfully, Click any key to continue!!"); 
    Console::ReadLine();
    
    //END DELETE CODE  
    
  10. Envoyer les modifications à SQL Server pour supprimer l'enregistrement que vous avez ajouté précédemment.

    Collez le code suivant après le code dans l'étape 9:
    // CLEAN UP SQL SERVER
    daAuthors->Update(dsPubs, "Authors");
    Console::WriteLine("SQL Server updated successfully, Check Server explorer to see changes");
    Console::ReadLine();
    objConn->Close ();
    
  11. Enregistrer votre projet.
  12. Dans le menu Déboguer , cliquez sur Démarrer pour exécuter le projet.

    Notez que plusieurs zones de message s'affiche, indiquer la progression du code qui vous permettent de vérifier l'état actuel des données fur et le code.


Terminer la liste de code

// This is the main project file for VC++ application project 
// generated using an Application Wizard.

#include "stdafx.h"

#using <mscorlib.dll>
#using <System.Dll>
#using <System.Data.Dll>
#using <System.Xml.dll>
#include <tchar.h>

using namespace System;
using namespace System::Xml;
using namespace System::Data;
using namespace System::Data::SqlClient;

// This is the entry point for this application
int _tmain(void)
{
    SqlConnection  *objConn;
    try
    {
        String *sConnectionString;
        sConnectionString = "Password=StrongPassword;User ID=UserName;Initial Catalog=pubs;Data Source=(local)";

        objConn = new SqlConnection(sConnectionString);
        objConn->Open();
        
        // Create an instance of a DataAdapter.
        SqlDataAdapter* daAuthors = new SqlDataAdapter("Select * From Authors", objConn);

        // Create an instance of a DataSet, and retrieve data from the Authors table.
        DataSet* dsPubs = new DataSet("Pubs");
        daAuthors->FillSchema(dsPubs,SchemaType::Source, "Authors");
        daAuthors->Fill(dsPubs,"Authors");

        // BEGIN ADD CODE 
        // Create a new instance of a DataTable.
        DataTable* tblAuthors = dsPubs->Tables->Item["Authors"];


        // Obtain a new DataRow object from the DataTable.
        DataRow* drCurrent = tblAuthors->NewRow();

        // Set the DataRow field values as necessary.
        drCurrent->set_Item("au_id",new String("993-21-3427"));

        drCurrent->set_Item("au_fname",new String("George"));
        drCurrent->set_Item("au_lname",new String("Johnson"));
        drCurrent->set_Item("phone",new String("800 226-0752"));
        drCurrent->set_Item("address", new String ("1956 Arlington Pl."));
        drCurrent->set_Item("city", new String("Winnipeg"));
        drCurrent->set_Item("state", new String("MB"));
        drCurrent->set_Item("contract",__box(1));

        // Pass that new object into the Add method of the DataTable.
        tblAuthors->Rows->Add(drCurrent);
        Console::WriteLine("Add was successful, Click any key to continue!!");
        Console::ReadLine();

        // END ADD CODE  
        
        // BEGIN EDIT CODE 

        drCurrent = tblAuthors->Rows->Find(new String("213-46-8915"));
        drCurrent->BeginEdit();

        drCurrent->set_Item("phone",String::Concat(S"342",(static_cast<String *>(drCurrent->Item["phone"]))->Substring(3)));
        drCurrent->EndEdit ();
        Console::WriteLine("Record edited successfully, Click any key to continue!!");
        Console::ReadLine();

        // END EDIT CODE

        // BEGIN SEND CHANGES TO SQL SERVER 

        SqlCommandBuilder* objCommandBuilder = new SqlCommandBuilder(daAuthors);
        daAuthors->Update(dsPubs, "Authors");
        Console::WriteLine("SQL Server updated successfully, Check Server explorer to see changes");
        Console::ReadLine();

        // END SEND CHANGES TO SQL SERVER 

        //BEGIN DELETE CODE 

        drCurrent = tblAuthors->Rows->Find(new String("993-21-3427"));
        drCurrent->Delete();
        Console::WriteLine("SRecord deleted successfully, Click any key to continue!!"); 
        Console::ReadLine();

        //END DELETE CODE  


        // CLEAN UP SQL SERVER
        daAuthors->Update(dsPubs, "Authors");
        Console::WriteLine("SQL Server updated successfully, Check Server explorer to see changes");
        Console::ReadLine();
    }
    catch (Exception* ex)
    {
        Console::WriteLine (ex->Message );
    }
    __finally
    {
        objConn->Close ();
    }
}


Références

Pour plus d'informations sur l'utilisation d'ADO.NET, objets DataSet et SQL, reportez-vous au adresse aux sites Web de Microsoft aux adresses suivantes :

Propriétés

Numéro d'article: 815660 - Dernière mise à jour: lundi 19 mars 2007 - Version: 5.2
Les informations contenues dans cet article s'appliquent au(x) produit(s) suivant(s):
  • Microsoft Visual C++ 2005 Express Edition
  • Microsoft Visual C++ .NET 2002 Initiation
Mots-clés : 
kbmt kbsystemdata kbsqlclient kbhowtomaster kbhowto KB815660 KbMtfr
Traduction automatique
IMPORTANT : Cet article est issu du système de traduction automatique mis au point par Microsoft (http://support.microsoft.com/gp/mtdetails). Un certain nombre d?articles obtenus par traduction automatique sont en effet mis à votre disposition en complément des articles traduits en langue française par des traducteurs professionnels. Cela vous permet d?avoir accès, dans votre propre langue, à l?ensemble des articles de la base de connaissances rédigés originellement en langue anglaise. Les articles traduits automatiquement ne sont pas toujours parfaits et peuvent comporter des erreurs de vocabulaire, de syntaxe ou de grammaire (probablement semblables aux erreurs que ferait une personne étrangère s?exprimant dans votre langue !). Néanmoins, mis à part ces imperfections, ces articles devraient suffire à vous orienter et à vous aider à résoudre votre problème. Microsoft s?efforce aussi continuellement de faire évoluer son système de traduction automatique.
La version anglaise de cet article est la suivante: 815660
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