Wie Sie eine Datenbank aus einer DataSet-Objekt mithilfe von Visual C++ .NET oder Visual C++ 2005 aktualisieren

SPRACHE AUSWÄHLEN SPRACHE AUSWÄHLEN
Artikel-ID: 815660 - Produkte anzeigen, auf die sich dieser Artikel bezieht
Alles erweitern | Alles schließen

Auf dieser Seite

Zusammenfassung

Der vorliegende Artikel erläutert ein DataSet zu nutzen, die Daten enthält (die aus einer Datenbank geladen wird), wie Sie die Daten ändern und wie es in der Datenbank zum Aktualisieren der ursprünglichen Quelle gesendet.

DataSet -Objekte, ein wichtiger Bestandteil der Datenzugriff in Microsoft .NET Framework, sind Objekte im Arbeitsspeicher, die Tabellen, Ansichten und Beziehungen enthalten können.

Voraussetzungen

Die folgende Liste führt die empfohlene Hardware, Software, Netzwerkinfrastruktur und Servicepacks, die Sie benötigen:
  • Eine der folgenden: Microsoft Windows 2000 Professional, Microsoft Windows 2000 Server, Microsoft Windows 2000 Advanced Server oder Microsoft Windows NT 4.0 Server
  • Eine der folgenden: Microsoft SQL Server Version 7.0, Microsoft SQL Server 2000 oder Microsoft Data Engine (MSDE) mit der PUBS-Beispieldatenbank installiert mit dem entsprechenden Berechtigungen, Benutzerkennung und Kennwort Werte.
  • Microsoft Visual Studio .NET oder Microsoft Visual Studio 2005
In diesem Artikel wird vorausgesetzt, dass Sie über Erfahrungen auf den folgenden Gebieten verfügen:
  • Datenbankterminologie
  • Structured Query Language (SQL)


Aktualisieren einer Datenbank aus einem DataSet-Objekt

Dieser Abschnitt veranschaulicht, wie das DataSet -Objekt zum Aktualisieren Daten in einer Datenbank verwenden.

wichtig Außerdem können Sie ein SqlCommand -Objekt einfügen, aktualisieren und Löschen von Daten in einer Datenbank direkt.

Nachdem das DataSet geladen wurde, können Sie die Daten ändern. Das DataSet wird diese Änderungen nachverfolgen. Das DataSet -Objekt kann einen Datencache im Speicher betrachtet werden, die aus einer Datenbank abgerufen werden. Das DataSet -Objekt besteht aus einer Auflistung von Tabellen, Beziehungen und Einschränkungen.

Gehen Sie folgendermaßen vor ein DataSet zu aktualisieren und die Updates an die Datenbank senden möchten,
  1. Öffnen Sie Microsoft Visual Studio .NET oder Microsoft Visual Studio 2005.
  2. Erstellen Sie eine neue Verwaltete C++-Anwendung in Visual C++ .NET. Visual Studio erstellt eine Funktion main() . Entfernen Sie alle generierten Code aus der main() -Funktion.
  3. Einen Verweis auf das System und System.Data -Namespace hinzufügen, fügen Sie den folgenden Code
    #using <System.Dll>
    #using <System.Data.Dll>
    #using <System.Xml.Dll>
  4. Verwenden Sie die USING -Anweisung für die System , System.Data und System.Data.SqlClient -Namespaces, damit Sie keine Deklarationen aus diesen Namespaces später im Code vornehmen müssen. Sie müssen diese Anweisungen vor etwaigen sonstigen Deklarationen einsetzen.
    using namespace System;
    using namespace System::Data;
    using namespace System::Xml;
    using namespace System::Data::SqlClient;
    
  5. Bevor Sie die Daten ändern und die Änderungen zurück an die Datenbank senden können, müssen Sie die Informationen in das DataSet geladen werden.

    Die Verbindungszeichenfolge in den folgenden Code verweist auf einen SQL Server, der auf dem lokalen Computer (oder der Computer, auf dem der Code ausgeführt wird) befindet. Ersetzen Sie diese Zeichenfolge durch Ihre eigenen Einstellungen.

    Zusammenfassen, wird eine Verbindung erstellt, und dann ein Datenadapter erstellt, die zum Füllen des Datasets mit Daten verwendet wird.
    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");
    
    Hinweis: Sie müssen die common Language Runtime hinzufügen unterstützen (Compileroption) (/ CLR: oldSyntax) in Visual C++ 2005 um das vorherige Codebeispiel erfolgreich zu kompilieren. Gehen Sie folgendermaßen vor um die common Language Common Language Runtime Unterstützung-Compileroption in Visual C++ 2005 hinzuzufügen:
    1. Klicken Sie auf Projekt und dann auf <ProjectName> Eigenschaften .

      Hinweis: <ProjectName> ist ein Platzhalter für den Namen des Projekts.
    2. Erweitern Sie Konfiguration , und klicken Sie dann auf Allgemein .
    3. Klicken Sie auf Common Language Runtime-Unterstützung, alte Syntax (/ CLR: oldSyntax) in der Common Language Runtime-Unterstützung Projekt Einstellung im rechten Fensterbereich klicken Sie auf Übernehmen und klicken Sie dann auf OK .
    Weitere Informationen über die common Language Runtime unterstützt Compileroption, besuchen Sie die folgenden Microsoft-Website:
    / Clr (Common Language Runtime Compilation)
    http://msdn2.microsoft.com/en-us/library/k8d11d4s.aspx
    Diese Schritte gelten für den gesamten Artikel.
  6. Nach dem Laden der Daten können Sie sie bearbeiten. Es gibt viele Möglichkeiten, eine Zeile (einen Datensatz) hinzuzufügen. Dieses Codebeispiel verwendet eine drei-Schritt-Prozedur:
    1. Rufen Sie ein neues DataRow -Objekt aus der Datentabelle .
    2. Legen Sie die DataRow Feldwerte nach Bedarf.
    3. Übergeben Sie das neue Objekt an die Add -Methode der Auflistung DataTable.Rows .

    Fügen Sie den folgenden Code nach dem Code in Schritt 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. Um vorhandene Zeilen bearbeiten möchten, rufen Sie das entsprechende DataRow -Objekt und dann bereitstellen Sie neue Werte für eine oder mehrere Spalten. Sie müssen zuerst die richtige Zeile finden, die viel einfacher, ist weil Sie das Schema der Tabelle sowie der Daten (durch den Aufruf von FillSchema in Schritt 5) geladen. Mit dem Schema an Stelle die Tabelle weiß, welche Spalte der Primärschlüssel ist und die Find -Methode des Rows -Auflistung ist verfügbar.

    Die Find -Methode gibt das DataRow -Objekt mit einem bestimmten Wert im Primärschlüssel (in diesem Fall Au_id) zurück. Nachdem Sie, die DataRow haben, können Sie die Spalten bearbeiten. Sie müssen die Änderungen in BeginEdit und EndEdit umbrochen, dieses vereinfacht jedoch die Arbeit, die vom DataSet hat zu tun und ermöglicht dem DataSet die Gültigkeitsprüfungen gleichzeitig ausführen, wenn EndEdit aufgerufen wird.

    Fügen Sie den folgenden Code nach dem Code in Schritt 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. Um die ursprüngliche Datenbank mit alle diese Änderungen zu aktualisieren, übergeben Sie das DataSet an die Update -Methode des DataAdapter -Objekt.

    Bevor Sie Update aufrufen können, müssen Sie jedoch die Eigenschaften InsertCommand , UpdateCommand und DeleteCommand des DataAdapter -Objekts festlegen. Sie können manuell SQL schreiben und diese drei Eigenschaften mit entsprechenden SqlCommand -Objekten aufzufüllen, aber Sie können auch Visual Studio .NET verwenden, um diese drei Befehle automatisch generiert.

    Die erforderlichen Befehle generieren, wenn Sie benötigt werden, müssen Sie erstellen eine Instanz der SqlCommandBuilder -Objekt und der DataAdapter im Konstruktor verwenden. Wenn Sie diese Methode (Siehe das Codebeispiel, das folgt) verwenden möchten, die Primärschlüssel-Informationen verfügbar für die Tabelle benötigt. Um auf Primärschlüsselinformationen zuzugreifen, rufen Sie FillSchema , und legen Sie dann auf AddWithKey der MissingSchemaAction -Eigenschaft des Ihre DataAdapter, oder legen Sie den Primärschlüssel manuell im Code.

    Fügen Sie den folgenden Code nach dem Code in Schritt 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. Um eine Zeile vollständig zu löschen, verwenden Sie die Delete -Methode des DataRow -Objekts.

    Hinweis: Die Rows-Auflistung enthält zwei Methoden, Entfernen und RemoveAt , die scheinbar löschen Sie die Zeile jedoch entfernen stattdessen einfach die Zeile aus der Auflistung. Nur die Delete -Methode sendet die Löschung zurück an die Quelldatenbank.

    Fügen Sie den folgenden Code nach dem Code in Schritt 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. Senden Sie die Änderungen an SQL Server, um den zuvor hinzugefügten Datensatz zu entfernen.

    Fügen Sie den folgenden Code nach dem Code in Schritt 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. Speichern Sie Ihr Projekt.
  12. Klicken Sie im Debug auf Starten , um das Projekt auszuführen.

    Beachten Sie, dass mehrere Meldungsfelder angezeigt werden, die den Verarbeitungsfortschritt des Codes anzeigen und Ihnen ermöglichen, den aktuellen Status der Daten während der Verarbeitung zu prüfen.


Vollständige Codeauflistung

// 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 ();
    }
}


Informationsquellen

Weitere Informationen über ADO.NET DataSet-Objekten und SQL finden Sie auf der folgenden Microsoft-Websites:

Eigenschaften

Artikel-ID: 815660 - Geändert am: Montag, 19. März 2007 - Version: 5.2
Die Informationen in diesem Artikel beziehen sich auf:
  • Microsoft Visual C++ 2005 Express Edition
  • Microsoft Visual C++ .NET 2002 Standard Edition
Keywords: 
kbmt kbsystemdata kbsqlclient kbhowtomaster kbhowto KB815660 KbMtde
Maschinell übersetzter Artikel
Wichtig: Dieser Artikel wurde maschinell und nicht von einem Menschen übersetzt. Die Microsoft Knowledge Base ist sehr umfangreich und ihre Inhalte werden ständig ergänzt beziehungsweise überarbeitet. Um Ihnen dennoch alle Inhalte auf Deutsch anbieten zu können, werden viele Artikel nicht von Menschen, sondern von Übersetzungsprogrammen übersetzt, die kontinuierlich optimiert werden. Doch noch sind maschinell übersetzte Texte in der Regel nicht perfekt, insbesondere hinsichtlich Grammatik und des Einsatzes von Fremdwörtern sowie Fachbegriffen. Microsoft übernimmt keine Gewähr für die sprachliche Qualität oder die technische Richtigkeit der Übersetzungen und ist nicht für Probleme haftbar, die direkt oder indirekt durch Übersetzungsfehler oder die Verwendung der übersetzten Inhalte durch Kunden entstehen könnten.
Den englischen Originalartikel können Sie über folgenden Link abrufen: 815660
Microsoft stellt Ihnen die in der Knowledge Base angebotenen Artikel und Informationen als Service-Leistung zur Verfügung. Microsoft übernimmt keinerlei Gewährleistung dafür, dass die angebotenen Artikel und Informationen auch in Ihrer Einsatzumgebung die erwünschten Ergebnisse erzielen. Die Entscheidung darüber, ob und in welcher Form Sie die angebotenen Artikel und Informationen nutzen, liegt daher allein bei Ihnen. Mit Ausnahme der gesetzlichen Haftung für Vorsatz ist jede Haftung von Microsoft im Zusammenhang mit Ihrer Nutzung dieser Artikel oder Informationen ausgeschlossen.

Ihr Feedback an uns

 

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