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

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

Sommaire

Résumé

Objets DataSet , un élément essentiel de l'accès aux données dans le Microsoft .NET Framework, sont des objets en mémoire qui peuvent contenir des tables, vues, et relations. Cet article montre comment prendre un DataSet qui contient des données (qui sont chargées à partir d'une base de données), modifiez cet données et puis renvoyer à la base de données pour mettre à jour de l'original source.

Configuration requise

La liste suivante met en évidence le matériel recommandé, logiciel, infrastructure de réseau et les service packs dont vous avez besoin :
  • Microsoft Windows 2000 Professionnel, Windows 2000 Server, Windows 2000 Advanced Server ou Windows NT 4.0 Server
  • Microsoft SQL Server version 7.0 ou 2000 ou Microsoft Data Engine (MSDE) avec l'exemple de base de données PUBS installé
  • Microsoft Visual Studio .NET
  • Les autorisations appropriées et les valeurs correctes pour connexion à votre ordinateur qui exécute SQL Server
Cet article suppose que vous êtes familiarisé avec les éléments suivants rubriques :
  • Terminologie de base de données
  • Langage SQL (SQL)

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

Cette section montre comment utiliser l'objet DataSet pour mettre à jour des données dans une base de données. Il est important de se rappeler que vous pouvez également utiliser un objet SqlCommand pour insérer, mettre à jour et supprimer des données dans une base de données directement.

Pour vous aider à comprendre cet article, cliquez sur l'article numéro ci-dessous pour afficher l'article correspondant dans la Base de connaissances Microsoft :
301216 Comment faire pour remplir un objet DataSet à partir d'une base de données à l'aide de Visual Basic .NET
Les sujets couverts dans 301216 inclure la récupération de données à partir d'une base de données et dans un groupe de données, et comment le groupe de données est séparée et distincte de la base de données.

Une fois que le groupe de données est chargé, vous pouvez modifier les données et le groupe de données de suivi des modifications. 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 et se compose d'une collection de tables, relations et contraintes.

Pour mettre à jour un groupe de données et renvoyer ces mises à jour à la base de données, procédez comme suit :
  1. Ouvrez Microsoft Visual Studio .NET.
  2. Créer une nouvelle Application Console dans Visual Basic .NET. Par par défaut, Visual Studio crée un Module statique 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 Imports sur les espaces de noms System, SystemDataet System.Data.SqlClient afin que vous n'êtes pas obligé de qualifier des déclarations à partir de ces espaces de noms ultérieurement dans votre code. Vous devez utiliser ces avant les instructions Pour toute autre déclaration.
    Imports System
    Imports System.Data
    Imports System.Data.SqlClient
    					
  4. Avant de pouvoir modifier les données et soumettre les modifications en différé à la base de données, vous devez charger les informations dans le groupe de données. Pour la procédure détaillée, voir la rubrique301216. Pour éviter les doubles emplois, le code dans cette étape n'est pas présenté en détail.

    La chaîne de connexion dans les éléments suivants points à un SQL Server qui se trouve sur l'ordinateur local de code (ou de la ordinateur où le code est en cours d'exécution). Remplacez cette chaîne par vos propres paramètres, si nécessaire. Pour résumer, une connexion est créée et ensuite les données adaptateur est créé, qui est utilisé pour remplir le DataSet avec des données.

    Remarque : Dans l'exemple de code qui s'affiche dans cet article, vous devez modifier UID =Nom d'utilisateur et Mot de passe =MotDePasseFort les valeurs appropriées. Assurez-vous que l'ID utilisateur a la autorisations appropriées pour effectuer cette opération sur la base de données.
    Dim sConnectionString As String
    
    
    ' Modify the following code to correctly connect to your SQL Server.
    sConnectionString = "Password=StrongPassword;User ID=UserName;" & _
                        "Initial Catalog=pubs;" & _
                        "Data Source=(local)"
    
    Dim objConn As New SqlConnection(sConnectionString)
    objConn.Open()
    
    ' Create an instance of a DataAdapter.
    Dim daAuthors As _
        New SqlDataAdapter("Select * From Authors", objConn)
    
    ' Create an instance of a DataSet, and retrieve data from the Authors table.
    Dim dsPubs As New DataSet("Pubs")
    daAuthors.FillSchema(dsPubs, SchemaType.Source, "Authors")
    daAuthors.Fill(dsPubs, "Authors")
    					
  5. Maintenant que les données sont chargées, vous pouvez le modifier. Il n'y a de nombreuses façons d'ajouter une ligne (ou enregistrement). Cet exemple de code utilise une étape trois procédure :
      • Obtenir un nouvel objet DataRow du DataTable.
      • Définir les valeurs des champs DataRow comme nécessaire.
      • Placer ce nouvel objet dans la méthode Add de la collection DataTable.Rows .

    Collez le code suivant après le code à l'étape 4 :
    '*****************
    'BEGIN ADD CODE 
    ' Create a new instance of a DataTable.
    Dim tblAuthors As DataTable
    tblAuthors = dsPubs.Tables("Authors")
    
    Dim drCurrent As DataRow
    ' Obtain a new DataRow object from the DataTable.
    drCurrent = tblAuthors.NewRow()
    
    ' Set the DataRow field values as necessary.
    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
    
    'Pass that new object into the Add method of the DataTable.Rows collection.
    tblAuthors.Rows.Add(drCurrent)
    MsgBox("Add was successful.")
    
    'END ADD CODE 
    					
  6. Pour modifier des lignes existantes, obtenir l'objet DataRow approprié et ensuite fournir de nouvelles valeurs pour une ou plusieurs colonnes. Vous doit d'abord trouver la bonne ligne, qui est beaucoup plus facile car vous avez chargé le schéma de la table, ainsi que les données (l'appel à FillSchema à l'étape 4). Avec le schéma en place, la table qui sait colonne est sa clé primaire, et la méthode Find de la collection Rows n'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 qui DataRow, vous pouvez modifier les colonnes. Vous n'êtes pas obligé d'encapsuler le modifications dans la méthode BeginEdit et EndEdit, mais cela simplifie le travail que le groupe de données doit effectuer et permet le groupe de données effectuer des vérifications de validation en une seule fois lors de l'appel de la méthode EndEdit . Après l'ajout de code, collez le code suivant :
    '*****************
    'BEGIN EDIT CODE 
    
    drCurrent = tblAuthors.Rows.Find("213-46-8915")
    drCurrent.BeginEdit()
    drCurrent("phone") = "342" & drCurrent("phone").ToString.Substring(3)
    drCurrent.EndEdit()
    MsgBox("Record edited successfully")
    
    'END EDIT CODE  
    					
  7. Pour mettre à jour la base de données d'origine avec toutes ces modifications, passer le groupe de données dans la méthode de mise à jour de l'objet DataAdapter .

    Toutefois, avant d'appeler Update, vous devez définir les propriétés InsertCommand, UpdateCommandet DeleteCommand de l'objet DataAdapter . Vous pouvez écrire SQL et remplir ces trois manuellement propriétés avec des objets SqlCommand correspondants, mais vous peuvent également utiliser Visual Studio .NET pour générer Ces trois commandes automatiquement.

    Pour générer les commandes requises lorsqu'ils sont nécessaires, vous devez créer une instance de l'objet SqlCommandBuilder et utiliser le DataAdapter dans le constructeur. Si vous souhaitez utiliser cette méthode, qui est illustré dans l'exemple de code suivant, vous devez disposer des informations de clé primaire disponible pour votre table. Pour accéder aux informations de clé primaire, appelez FillSchemaet puis définissez la propriété MissingSchemaAction de votre DataAdapterAddWithKeyou définissez manuellement la clé primaire dans votre code. Coller le code suivant après le code de modification :
    '*****************
    'BEGIN SEND CHANGES TO SQL SERVER 
    
    Dim objCommandBuilder As New SqlCommandBuilder(daAuthors)
    daAuthors.Update(dsPubs, "Authors")
    MsgBox("SQL Server updated successfully" & chr(13) & "Check Server explorer to see changes")
    
    ' END SEND CHANGES TO SQL SERVER
    					
  8. Pour supprimer complètement 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 au lieu de cela juste suppriment la ligne à partir de la collection. La méthode Delete renvoie la suppression à la base de données source. Coller le code suivant après le code d'envoyer les modifications apportées à SQL SERVER :
    '*****************
    'BEGIN DELETE CODE
    
    drCurrent = tblAuthors.Rows.Find("993-21-3427")
    drCurrent.Delete()
    MsgBox("Record deleted successfully")
    
    'END DELETE CODE
    					
  9. Envoyer les modifications apportées à SQL Server pour supprimer l'enregistrement qui vous avez ajouté précédemment. Collez le code suivant après le code de suppression :
    '*****************
    ' CLEAN UP SQL SERVER
    daAuthors.Update(dsPubs, "Authors")
    MsgBox("SQL Server updated successfully" & Chr(13) & Chr(13) & "Check Server Explorer to see changes")
    					
  10. Enregistrez votre projet.
  11. Dans le menu Déboguer , cliquez sur Démarrer pour exécuter le projet. Notez que plusieurs boîtes de message s'affiche, qui indiquent la progression du code et vous permettent de passer en revue en cours état des données de mesure de l'exécution de code.

Intégralité du code

Imports System
Imports System.Data
Imports System.Data.SqlClient

Module Module1

    Sub Main()
        Dim sConnectionString As String
        ' Modify the following code to correctly connect to your SQL Server.
        sConnectionString = "Password=StrongPassword;User ID=UserName;" & _
                            "Initial Catalog=pubs;" & _
                            "Data Source=(local)"

        Dim objConn As New SqlConnection(sConnectionString)
        objConn.Open()

        ' Create an instance of a DataAdapter.
        Dim daAuthors As _
            New SqlDataAdapter("Select * From Authors", objConn)

        ' Create an instance of a DataSet, and retrieve data from the Authors table.
        Dim dsPubs As New DataSet("Pubs")
        daAuthors.FillSchema(dsPubs, SchemaType.Source, "Authors")
        daAuthors.Fill(dsPubs, "Authors")

        '*****************
        'BEGIN ADD CODE 
        ' Create a new instance of a DataTable
        Dim tblAuthors As DataTable
        tblAuthors = dsPubs.Tables("Authors")

        Dim drCurrent As DataRow
        ' Obtain a new DataRow object from the DataTable.
        drCurrent = tblAuthors.NewRow()

        ' Set the DataRow field values as necessary.
        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

        'Pass that new object into the Add method of the DataTable.Rows collection.
        tblAuthors.Rows.Add(drCurrent)
        MsgBox("Add was successful.")

        'END ADD CODE    
        '*****************
        'BEGIN EDIT CODE

        drCurrent = tblAuthors.Rows.Find("213-46-8915")
        drCurrent.BeginEdit()
        drCurrent("phone") = "342" & drCurrent("phone").ToString.Substring(3)
        drCurrent.EndEdit()
        MsgBox("Record edited successfully")

        'END EDIT CODE   
        '*****************
        'BEGIN SEND CHANGES TO SQL SERVER

        Dim objCommandBuilder As New SqlCommandBuilder(daAuthors)
        daAuthors.Update(dsPubs, "Authors")
        MsgBox("SQL Server updated successfully" & chr(13) & "Check Server explorer to see changes")

        ' END SEND CHANGES TO SQL SERVER 
        '*****************
        'BEGIN DELETE CODE 

        drCurrent = tblAuthors.Rows.Find("993-21-3427")
        drCurrent.Delete()
        MsgBox("Record deleted successfully")

        'END DELETE CODE 
        '*****************
        ' CLEAN UP SQL SERVER
        daAuthors.Update(dsPubs, "Authors")
        MsgBox("SQL Server updated successfully" & Chr(13) & Chr(13) & "Check Server Explorer to see changes")
    End Sub

End Module
				

Références

Pour plus d'informations sur l'utilisation de ADO.NET, les objets DataSet et SQL, consultez les sites Web de Microsoft aux adresses suivantes :
http://msdn2.Microsoft.com/en-us/library/ms810293.aspx

ADO.NET for the ADO Programmer
http://msdn2.Microsoft.com/en-us/library/ms973217.aspx

MSDN Online .NET Developer Center
http://msdn.Microsoft.com/NET

Propriétés

Numéro d'article: 301248 - Dernière mise à jour: jeudi 27 décembre 2012 - Version: 9.0
Les informations contenues dans cet article s'appliquent au(x) produit(s) suivant(s):
  • Microsoft Visual Basic .NET 2002 Initiation
  • Microsoft Visual Basic .NET 2003 Initiation
Mots-clés : 
kbhowtomaster kbmt KB301248 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: 301248
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