Freigeben über


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 Eigenschaft InsertCommand, UpdateCommand oder DeleteCommand (abhängig von der Art der Änderungen in der Update) muss vor dem Aufruf der DataAdapter-Methode des DataTable festgelegt werden. Wenn beispielsweise Zeilen hinzugefügt wurden, muss vor dem Aufrufen von InsertCommand das Update festgelegt werden. 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 in der Datenquelle aktualisieren, rufen Sie die UPDATE-Anweisung auf, die einen eindeutigen Bezeichner verwendet, um die Zeile in der zu aktualisierenden Tabelle zu identifizieren. 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 Spalten und Werte enthalten, die aktualisiert werden sollen, wie in der folgenden Transact-SQL-Anweisung dargestellt.

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 finden Sie die Parameter für das vorherige Beispiel einer UPDATE-Anweisung. 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 sich der Wert der ID-Spalte oder -Spalten in der geänderten DataRow geändert hat. 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 ist der Name der DataColumn aus der DataRow, aus der der Wert des Parameter abgerufen wird. 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 die CustomerID-Eigenschaft für SourceColumn mit einer 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

Im folgenden Beispiel wird gezeigt, wie Sie einen SqlDataAdapter erstellen und für die MissingSchemaActionAddWithKey festlegen können, 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;
}

Weitere Informationen