DataAdapter-Parameter

Gilt für: .NET Framework .NET .NET Standard

Herunterladen von ADO.NET

Der DbDataAdapter verfügt über vier Eigenschaften, die zum Abrufen von Daten aus einer Datenquelle und zum Aktualisieren der Daten in der Datenquelle verwendet werden: die SelectCommand-Eigenschaft gibt die Daten aus der Datenquelle zurück, und die Eigenschaften InsertCommand, UpdateCommand und DeleteCommand dienen zum Verwalten von Änderungen in der Datenquelle.

Hinweis

Die SelectCommand-Eigenschaft muss vor dem Aufrufen der Fill-Methode des DataAdapter festgelegt werden. Die Eigenschaften InsertCommand, UpdateCommand oder DeleteCommand müssen vor dem Aufruf der Update-Methode des DataAdapter festgelegt werden, je nachdem, welche Änderungen an den Daten im DataTable vorgenommen wurden. Wenn zum Beispiel Zeilen hinzugefügt wurden, muss InsertCommand festgelegt werden, bevor Sie Update aufrufen. Wenn Update eine eingefügte, aktualisierte oder gelöschte Zeile verarbeitet, verwendet der DataAdapter die entsprechende Command-Eigenschaft, um die Aktion zu verarbeiten. Aktuelle Informationen zur geänderten Zeile werden über die Command-Auflistung an das Parameters-Objekt übergeben.

Wenn Sie eine Zeile an der Datenquelle aktualisieren, rufen Sie die UPDATE Anweisung auf, die einen eindeutigen Bezeichner verwendet, um die Zeile in der Tabelle zu identifizieren, die aktualisiert werden soll. Der eindeutige Bezeichner ist im Allgemeinen der Wert eines Primärschlüsselfelds. Die UPDATE Anweisung verwendet Parameter, die sowohl den eindeutigen Bezeichner als auch die zu aktualisierenden Spalten und Werte enthalten, wie in der folgenden Transact-SQL-Anweisung gezeigt.

UPDATE Customers SET CompanyName = @CompanyName
  WHERE CustomerID = @CustomerID  

Hinweis

Die Syntax für Parameterplatzhalter ist abhängig von der jeweiligen Datenquelle. Dieses Beispiel zeigt Platzhalter für eine SQL Server-Datenquelle.

In diesem Beispiel wird das CompanyName-Feld mit dem Wert des @CompanyName-Parameters für die Zeile aktualisiert, in der CustomerID dem Wert des @CustomerID-Parameters entspricht. Die Parameter rufen mithilfe der SourceColumn-Eigenschaft des SqlParameter-Objekts Informationen aus der geänderten Zeile ab. Im Folgenden sind die Parameter für die vorherige Beispiel-Anweisung UPDATE aufgeführt. Der Code geht davon aus, dass die adapter-Variable für ein gültiges SqlDataAdapter-Objekt steht.

// Assumes that connection is a valid SqlAdapter object
adapter.UpdateCommand.Parameters.Add("@CompanyName", 
            SqlDbType.VarChar, 15, "CompanyName");
SqlParameter parameter = adapter.UpdateCommand.Parameters.Add("@CustomerID",
            SqlDbType.Char, 5, "CustomerID");
parameter.SourceVersion = DataRowVersion.Original;

Die Add-Methode der Parameters-Auflistung nimmt den Namen des Parameters, den Datentyp, die Größe (wenn für den Typ zutreffend) und den Namen der SourceColumn aus der DataTable an. Beachten Sie, dass der SourceVersion-Wert des @CustomerID-Parameters Original lautet. Dadurch wird sichergestellt, dass die vorhandene Zeile in der Datenquelle aktualisiert wird, wenn der Wert der identifizierenden Spalte bzw. Spalten in dem geänderten DataRow geändert wurde. In diesem Fall stimmt der Original-Zeilenwert mit dem aktuellen Wert in der Datenquelle überein, und der Current-Zeilenwert enthält den aktualisierten Wert. Die SourceVersion für den @CompanyName-Parameter ist nicht festgelegt, und es wird der Standardwert, nämlich der Current-Zeilenwert, verwendet.

Hinweis

Sowohl für die Fill-Vorgänge der DataAdapter-Klasse als auch für die Get-Methoden von DataReader wird der .NET-Typ von dem Typ abgeleitet, der vom Microsoft SqlClient-Datenanbieter für SQL Server zurückgegeben wird. Die abgeleiteten .NET-Typen und Accessormethoden für Microsoft SQL Server-Datentypen werden unter Datentypzuordnungen in ADO.NET erläutert.

Parameter.SourceColumn, Parameter.SourceVersion

Die SourceColumn und die SourceVersion können als Argumente an den Parameter-Konstruktor übergeben oder als Eigenschaften eines vorhandenen Parameter festgelegt werden. Die SourceColumn bezeichnet den Namen von DataColumn aus DataRow, aus dem der Wert von Parameter abgerufen werden soll. Die SourceVersion gibt die DataRow-Version an, die der DataAdapter zum Abrufen des Werts verwendet.

Die folgende Tabelle zeigt die DataRowVersion-Enumerationswerte an, die für die Verwendung mit SourceVersion zur Verfügung stehen.

DataRowVersion-Enumeration BESCHREIBUNG
Current Der Parameter verwendet den aktuellen Wert der Spalte. Dies ist die Standardoption.
Default Der Parameter verwendet den DefaultValue der Spalte.
Original Der Parameter verwendet den ursprünglichen Wert der Spalte.
Proposed Der Parameter verwendet einen vorgeschlagenen Wert.

Das SqlClient-Codebeispiel im nächsten Abschnitt definiert einen Parameter für einen UpdateCommand, bei dem die CustomerID-Spalte als SourceColumn für die folgenden beiden Parameter verwendet wird: @CustomerID (SET CustomerID = @CustomerID) und @OldCustomerID (WHERE CustomerID = @OldCustomerID). Der @CustomerID-Parameter wird zum Aktualisieren der CustomerID-Spalte auf den aktuellen Wert in der DataRow-Klasse verwendet. Folglich wird das CustomerIDSourceColumn mit einem SourceVersion von Current verwendet. Der @OldCustomerID-Parameter wird dafür verwendet, die aktuelle Zeile in der Datenquelle anzugeben. Da sich der passende Spaltenwert in der Original-Version der Zeile befindet, wird die gleiche SourceColumn (CustomerID) mit einer SourceVersion von Original verwendet.

Arbeiten mit SqlClient-Parametern

Das folgende Beispiel zeigt, wie Sie einen SqlDataAdapter erstellen und MissingSchemaAction auf AddWithKey festlegen, um zusätzliche Schemainformationen aus der Datenbank abzurufen. Die Eigenschaften SelectCommand, InsertCommand, UpdateCommand und DeleteCommand werden festgelegt, und die zugehörigen SqlParameter-Objekte werden der Parameters-Auflistung hinzugefügt. Die Methode gibt ein SqlDataAdapter-Objekt zurück.

public static SqlDataAdapter CreateSqlDataAdapter(SqlConnection connection)
{
    // Assumes that connection is a valid SqlConnection object
    SqlDataAdapter adapter = new SqlDataAdapter();
    adapter.MissingSchemaAction = MissingSchemaAction.AddWithKey;

    // Create the commands.
    adapter.SelectCommand = new SqlCommand(
        "SELECT CustomerID, CompanyName FROM CUSTOMERS", connection);
    adapter.InsertCommand = new SqlCommand(
        "INSERT INTO Customers (CustomerID, CompanyName) " +
        "VALUES (@CustomerID, @CompanyName)", connection);
    adapter.UpdateCommand = new SqlCommand(
        "UPDATE Customers SET CustomerID = @CustomerID, CompanyName = @CompanyName " +
        "WHERE CustomerID = @oldCustomerID", connection);
    adapter.DeleteCommand = new SqlCommand(
        "DELETE FROM Customers WHERE CustomerID = @CustomerID", connection);

    // Create the parameters.
    adapter.InsertCommand.Parameters.Add("@CustomerID",
        SqlDbType.Char, 5, "CustomerID");
    adapter.InsertCommand.Parameters.Add("@CompanyName",
        SqlDbType.VarChar, 40, "CompanyName");

    adapter.UpdateCommand.Parameters.Add("@CustomerID",
        SqlDbType.Char, 5, "CustomerID");
    adapter.UpdateCommand.Parameters.Add("@CompanyName",
        SqlDbType.VarChar, 40, "CompanyName");
    adapter.UpdateCommand.Parameters.Add("@oldCustomerID",
        SqlDbType.Char, 5, "CustomerID").SourceVersion =
        DataRowVersion.Original;

    adapter.DeleteCommand.Parameters.Add("@CustomerID",
        SqlDbType.Char, 5, "CustomerID").SourceVersion =
        DataRowVersion.Original;

    return adapter;
}

Siehe auch