SO WIRD'S GEMACHT: Aktualisieren einer Datenbank aus einem DataSet-Objekt mit Visual C# .NET

SPRACHE AUSWÄHLEN SPRACHE AUSWÄHLEN
Artikel-ID: 307587 - Produkte anzeigen, auf die sich dieser Artikel bezieht
Dieser Artikel wurde zuvor veröffentlicht unter D307587
Dieser Artikel ist eine Übersetzung des folgenden englischsprachigen Artikels der Microsoft Knowledge Base:
307587 HOW TO: Update a Database from a DataSet Object Using Visual C# .NET
In Artikel 301248 wird dieses Thema für Microsoft Visual Basic .NET behandelt.
In Artikel 815660 wird dieses Thema für Microsoft Visual C++ .NET behandelt.
Hinweis: Die Verwendung der hier aufgeführten Informationen sowie Makro- oder Programmcodes geschieht auf Ihre eigene Verantwortung. Microsoft stellt Ihnen diese Informationen sowie Makro- und Programmlistings ohne Gewähr auf Richtigkeit, Vollständigkeit und/oder Funktionalität sowie ohne Anspruch auf Support zur Verfügung. Die zur Verfügung gestellten Makro- und Programmierungsbeispiele sollen lediglich exemplarisch die Funktionsweise des Beispiels aufzeigen.

Weitere Informationen zu den von Microsoft angebotenen Supportoptionen finden Sie unter folgender Internetadresse:
http://support.microsoft.com/

Achtung: Die in diesem Artikel aufgeführten Codebeispiele basieren auf den Beispieldatenbanken der englischsprachigen Versionen von Microsoft SQL Server oder Microsoft Access. Sie können diese Beispiele nicht mit den deutschsprachigen Beispieldatenbanken von SQL Server oder Access verwenden. Verwenden Sie entweder die englischsprachigen Versionen dieser Datenbanken, oder passen Sie die Codebeispiele so an, dass sie auf die deutschen Beispieldatenbanken und die deutschsprachigen Datenbankobjekte verweisen.
Bitte beachten Sie: Bei diesem Artikel handelt es sich um eine Übersetzung aus dem Englischen. Es ist möglich, dass nachträgliche Änderungen bzw. Ergänzungen im englischen Originalartikel in dieser Übersetzung nicht berücksichtigt sind. Die in diesem Artikel enthaltenen Informationen basieren auf der/den englischsprachigen Produktversion(en). Die Richtigkeit dieser Informationen in Zusammenhang mit anderssprachigen Produktversionen wurde im Rahmen dieser Übersetzung nicht getestet. Microsoft stellt diese Informationen ohne Gewähr für Richtigkeit bzw. Funktionalität zur Verfügung und übernimmt auch keine Gewährleistung bezüglich der Vollständigkeit oder Richtigkeit der Übersetzung.
Alles erweitern | Alles schließen

Auf dieser Seite

Zusammenfassung

DataSet-Objekte, eine Schlüsselkomponente für den Datenzugriff im Microsoft .NET Framework, sind Objekte im Speicher, die Tabellen, Ansichten und Beziehungen enthalten können. Dieser Artikel beschreibt, wie man in einem DataSet-Objekt die Daten (die aus einer Datenbank geladen werden) ändert und an die Datenbank zurücksendet, um die ursprüngliche Quelle zu aktualisieren.

Voraussetzungen

In der folgenden Liste sind die empfohlene Hardware, Software, Netzwerkinfrastruktur und die erforderlichen Service Packs aufgeführt:
  • Microsoft Windows 2000 Professional, Microsoft Windows 2000 Server, Microsoft Windows 2000 Advanced Server oder Microsoft Windows NT 4.0 Server
  • Microsoft SQL Server Version 7.0, Microsoft SQL Server 2000 oder Microsoft Data Engine (MSDE) mit installierter Beispieldatenbank PUBS
  • Microsoft Visual Studio .NET
Dieser Artikel geht davon aus, dass Sie mit folgenden Themen vertraut sind:
  • Datenbankterminologie
  • Structured Query Language (SQL)

Aktualisieren einer Datenbank aus einem DataSet-Objekt

Dieser Abschnitt beschreibt, wie Sie das DataSet-Objekt zur Aktualisierung von Daten in einer Datenbank verwenden. Denken Sie daran, dass auch ein SqlCommand-Objekt zum direkten Hinzufügen, Aktualisieren und Löschen von Daten in einer Datenbank verwendet werden kann.
Weitere Informationen zum besseren Verständnis finden Sie in folgendem Artikel der Microsoft Knowledge Base:
  • 314145 HOW TO: Populate a DataSet Object from a Database Using Visual C# .NET
Einige der Themen in 314145 behandeln das Abrufen von Daten aus einer Datenbank in ein DataSet-Objekt und erläutern, wie das DataSet-Objekt von der Datenbank getrennt ist und sich von ihr unterscheidet.

Nach dem Laden des DataSet-Objekts können Sie die Daten ändern. Das DataSet-Objekt protokolliert diese Änderungen. Das DataSet-Objekt kann als Cache im Speicher betrachtet werden, der die Daten enthält, die aus einer Datenbank abgerufen wurden. Das DataSet-Objekt besteht aus einer Sammlung von Tabellen, Beziehungen und Einschränkungen.

Gehen Sie folgendermaßen vor, um ein DataSet-Objekt zu aktualisieren und die Änderungen an die Datenbank zurückzusenden:
  1. Öffnen Sie Microsoft Visual Studio .NET.
  2. Erstellen Sie eine neue Konsolenanwendung in Visual C# .NET. Visual Studio erstellt standardmäßig eine statische Klasse und eine leere Main()-Prozedur.
  3. Vergewissern Sie sich, dass das Projekt einen Verweis auf die Namespaces System und System.Data enthält. Verwenden Sie die Anweisung using für die Namespaces System, System.Data und System.Data.SqlClient, damit Sie später keine Deklarationen aus diesen Namespaces in Ihrem Code vornehmen müssen. Diese Anweisungen müssen Sie vor allen anderen Deklarationen verwenden.
    using System;
    using System.Data;
    using System.Data.SqlClient;
  4. Bevor Sie die Daten ändern und die Änderungen an die Datenbank zurückgeben können, müssen Sie die Informationen in das DataSet-Objekt laden. Eine ausführliche Beschreibung der Vorgehensweise finden Sie in 314145. Um Wiederholungen zu vermeiden, wird der Code in diesem Schritt nicht detailliert dargestellt.

    Die Verbindungszeichenfolge im folgenden Code verweist auf einen SQL-Server, der sich auf dem lokalen Computer befindet (oder auf dem Computer, auf dem der Code ausgeführt wird), und ein leeres Kennwort für das Konto 'sa' aufweist. Ersetzen Sie diese Zeichenfolge ggf. durch Ihre eigenen Einstellungen. Es wird also eine Verbindung und dann ein Datenadapter erstellt, der zum Füllen des DataSet-Objekts mit Daten verwendet wird.
    string sConnectionString;
    
    // Modify the following string to correctly connect to your SQL Server.
    sConnectionString = "Password=;User ID=sa;"
    	+ "Initial Catalog=pubs;"
    	+ "Data Source=(local)";
    
    SqlConnection 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");
  5. Nach dem Laden der Daten können Sie sie bearbeiten. Es gibt viele Möglichkeiten, eine Zeile (einen Datensatz) hinzuzufügen. In diesem Codebeispiel wird eine dreistufige Vorgehensweise verwendet:
      • Abrufen eines neuen DataRow-Objekts aus dem DataTable-Objekt
      • Festlegen der Werte des Feldes DataRow je nach Anforderungen
      • Übergabe des neuen Objekts an die Methode Add der Auflistung DataTable.Rows

    Fügen Sie folgenden Code nach dem Code in Schritt 4 ein:
    //****************
    // BEGIN ADD CODE 
    // Create a new instance of a DataTable.
    DataTable tblAuthors;
    tblAuthors = dsPubs.Tables["Authors"];
    
    DataRow drCurrent;
    // 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.
    tblAuthors.Rows.Add(drCurrent);
    Console.WriteLine("Add was successful, Click any key to continue!!");
    Console.ReadLine();
    
    // END ADD CODE  
  6. Fügen Sie folgenden Code nach dem Code in Schritt 4 ein: Wenn Sie vorhandene Zeilen bearbeiten möchten, rufen Sie das entsprechende DataRow-Objekt ab und stellen dann neue Werte für eine oder mehrere Spalten zur Verfügung. Sie müssen zuerst die richtige Zeile finden, ein Vorgang, der durch das Laden des Schemas der Tabelle sowie der Daten (durch den Aufruf von FillSchema in Schritt 4) wesentlich vereinfacht wird. Da das Schema geladen ist, kennt die Tabelle ihren Primärschlüssel, und die Methode Find der Auflistung Rows steht zur Verfügung.

    Die Methode Find gibt das Objekt DataRow mit einem bestimmten Wert im Primärschlüssel zurück (in diesem Fall au_id). Nachdem Sie diese DataRow haben, können Sie die Spalten bearbeiten. Sie müssen die Änderungen nicht in BeginEdit und EndEdit einschließen, dieses Vorgehen vereinfacht jedoch die vom DataSet-Objekt durchzuführende Verarbeitung und ermöglicht dem DataSet-Objekt die gleichzeitige Durchführung aller Gültigkeitsprüfungen beim Aufruf von EndEdit. Fügen Sie folgenden Code nach dem ADD-Code ein:
    //*****************
    // BEGIN EDIT CODE 
    
    drCurrent = tblAuthors.Rows.Find("213-46-8915");
    drCurrent.BeginEdit();
    drCurrent["phone"] = "342" + drCurrent["phone"].ToString().Substring(3);
    drCurrent.EndEdit();
    Console.WriteLine("Record edited successfully, Click any key to continue!!");
    Console.ReadLine();
    
    // END EDIT CODE  
  7. Fügen Sie folgenden Code nach dem Code in Schritt 4 ein: Übergeben Sie das DataSet-Objekt an die Update-Methode des DataAdapter-Objekts, um die ursprüngliche Datenbank mit allen Änderungen zu aktualisieren.

    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-Code erstellen und diese drei Eigenschaften mit entsprechenden SqlCommand-Objekten füllen, Sie können die drei Befehle aber auch automatisch mit Visual Studio .NET generieren.

    Sie müssen Sie eine Instanz des SqlCommandBuilder-Objekts erstellen und das DataAdapter-Objekt im Konstruktor verwenden, um die erforderlichen Befehle bei Bedarf zu generieren. Wenn Sie dieses Verfahren verwenden möchten, das im folgenden Codebeispiel gezeigt wird, müssen Sie Primärschlüsselinformationen für die Tabelle bereitstellen können. Um auf Primärschlüsselinformationen zuzugreifen, rufen Sie FillSchema auf und setzen Sie die Eigenschaft MissingSchemaAction Ihres DataAdapter-Objekts auf AddWithKey, oder geben Sie den Primärschlüssel manuell im Code an. Fügen Sie folgenden Code nach dem EDIT-Code ein:
    //*****************
    // 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
  8. Fügen Sie folgenden Code nach dem Code in Schritt 4 ein: Verwenden Sie die Delete-Methode des DataRow-Objekts, um eine Zeile vollständig zu löschen. Beachten Sie, dass die Auflistung Rows zwei Methoden enthält, Remove und RemoveAt, die die Zeile zu löschen scheinen, jedoch die Zeile tatsächlich nur aus der Auflistung entfernen. Nur die Delete-Methode sendet die Löschung zurück an die Quelldatenbank. Fügen Sie folgenden Code nach dem SEND CHANGES TO SQL SERVER-Code ein:
    //*****************
    //BEGIN DELETE CODE 
    
    drCurrent = tblAuthors.Rows.Find("993-21-3427");
    drCurrent.Delete();
    Console.WriteLine("Record deleted successfully, Click any key to continue!!"); 
    Console.ReadLine();
    
    //END DELETE CODE 
  9. Fügen Sie folgenden Code nach dem Code in Schritt 4 ein: Senden Sie die Änderungen an SQL Server, um den zuvor hinzugefügten Datensatz zu entfernen. Fügen Sie folgenden Code nach dem DELETE-Code ein:
    //*****************
    // CLEAN UP SQL SERVER
    daAuthors.Update(dsPubs, "Authors");
    Console.WriteLine("SQL Server updated successfully, Check Server explorer to see changes");
    Console.ReadLine();
  10. Fügen Sie folgenden Code nach dem Code in Schritt 4 ein: Speichern Sie Ihr Projekt.
  11. Fügen Sie folgenden Code nach dem Code in Schritt 4 ein: Klicken Sie im Menü Debuggen auf Start, 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ändiges Codelisting

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

namespace PopulateDataSet
{

    /// <summary>
    /// Summary description for Class1.
    /// </summary>
    class Class1
    {
        static void Main(string[] args)
        {
            string sConnectionString;

            // Modify the following string to correctly connect to your SQL Server.
            sConnectionString = "Password=;User ID=sa;"
                + "Initial Catalog=pubs;"
                + "Data Source=(local)";

            SqlConnection 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;
            tblAuthors = dsPubs.Tables["Authors"];

            DataRow drCurrent;
            // 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.
            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("213-46-8915");
            drCurrent.BeginEdit();
            drCurrent["phone"] = "342" + drCurrent["phone"].ToString().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("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();         	
			
        }
    }
}

Informationsquellen

Weitere Informationen über die Verwendung von ADO.NET, DataSet-Objekten und SQL finden Sie auf folgenden Microsoft-Websites:
Diving into Data Access (eine MSDN Voices Column)
http://msdn.microsoft.com/columns/

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

Eigenschaften

Artikel-ID: 307587 - Geändert am: Montag, 19. März 2007 - Version: 2.2
Die Informationen in diesem Artikel beziehen sich auf:
  • Microsoft Visual C# .NET 2002 Standard Edition
  • Microsoft Visual C# .NET 2003 Standard Edition
Keywords: 
kbgrpdsvbdb kbhowtomaster KB307587
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