Share via


DataAdapter Parameters

Van toepassing op: .NET Framework .NET Standard

ADO.NET downloaden

De DbDataAdapter eigenschap bevat vier eigenschappen die worden gebruikt om gegevens op te halen uit en bij te werken naar de gegevensbron: de SelectCommand eigenschap retourneert gegevens uit de gegevensbron, en de InsertCommand , UpdateCommanden DeleteCommand eigenschappen worden gebruikt om wijzigingen in de gegevensbron te beheren.

Opmerking

De SelectCommand eigenschap moet worden ingesteld voordat u de Fill methode van de DataAdapter. De InsertCommand, UpdateCommandof DeleteCommand eigenschappen moeten worden ingesteld voordat de methode van de UpdateDataAdapter aangeroepen methode wordt aangeroepen, afhankelijk van welke wijzigingen zijn aangebracht in de gegevens in de DataTable. Als er bijvoorbeeld rijen zijn toegevoegd, moet de InsertCommand optie worden ingesteld voordat u belt Update. Wanneer Update een ingevoegde, bijgewerkte of verwijderde rij wordt verwerkt, wordt de DataAdapter betreffende Command eigenschap gebruikt om de actie te verwerken. Huidige informatie over de gewijzigde rij wordt via de Command verzameling doorgegeven aan het Parameters object.

Wanneer u een rij bijwerkt in de gegevensbron, roept u de UPDATE-instructie aan, die een unieke id gebruikt om de rij in de tabel te identificeren die moet worden bijgewerkt. De unieke id is doorgaans de waarde van een primaire-sleutelveld. De UPDATE-instructie maakt gebruik van parameters die zowel de unieke id als de kolommen en waarden bevatten die moeten worden bijgewerkt, zoals wordt weergegeven in de volgende Transact-SQL-instructie.

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

Opmerking

De syntaxis voor tijdelijke aanduidingen voor parameters is afhankelijk van de gegevensbron. In dit voorbeeld ziet u tijdelijke aanduidingen voor een SQL Server-gegevensbron.

In dit voorbeeld wordt het CompanyName veld bijgewerkt met de waarde van de @CompanyName parameter voor de rij, waarbij CustomerID gelijk is aan de waarde van de @CustomerID parameter. De parameters halen informatie op uit de gewijzigde rij met behulp van de SourceColumn eigenschap van het SqlParameter object. Hier volgen de parameters voor de vorige update-instructie. In de code wordt ervan uitgegaan dat de variabele adapter een geldig SqlDataAdapter object vertegenwoordigt.

// 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;

De Add methode van de Parameters verzameling neemt de naam van de parameter, het gegevenstype, de grootte (indien van toepassing op het type) en de naam van de SourceColumn parameter van de DataTable. U ziet dat de SourceVersion@CustomerID parameter is ingesteld op Original. Dit garandeert dat de bestaande rij in de gegevensbron wordt bijgewerkt als de waarde van de identificerende kolom of kolommen in de gewijzigde DataRowkolom is gewijzigd. In dat geval komt de Original rijwaarde overeen met de huidige waarde in de gegevensbron en bevat de Current rijwaarde de bijgewerkte waarde. De SourceVersion parameter voor de @CompanyName parameter is niet ingesteld en gebruikt de standaardwaarde van Current de rij.

Opmerking

Voor zowel de Fill-bewerkingen van de DataAdapter als de Get-methoden van de DataReader, wordt het .NET-type afgeleid van het type dat wordt geretourneerd door de Microsoft SqlClient Data Provider voor SQL Server. De uitgestelde .NET-typen en accessormethoden voor Microsoft SQL Server-gegevenstypen worden beschreven in gegevenstypetoewijzingen in ADO.NET.

Parameter.SourceColumn, Parameter.SourceVersion

De SourceColumn en SourceVersion kunnen worden doorgegeven als argumenten aan de Parameter constructor of worden ingesteld als eigenschappen van een bestaande Parameter. Dit SourceColumn is de naam van de DataColumnDataRow waaruit de waarde van de Parameter waarde wordt opgehaald. Hiermee SourceVersion geeft u de DataRow versie op die wordt DataAdapter gebruikt om de waarde op te halen.

In de volgende tabel ziet u de DataRowVersion opsommingswaarden die beschikbaar zijn voor gebruik met SourceVersion.

Opsomming DataRowVersion Description
Current De parameter gebruikt de huidige waarde van de kolom. Dit is de standaardwaarde.
Default De parameter maakt gebruik van de DefaultValue kolom.
Original De parameter gebruikt de oorspronkelijke waarde van de kolom.
Proposed De parameter maakt gebruik van een voorgestelde waarde.

In SqlClient het codevoorbeeld in de volgende sectie wordt een parameter gedefinieerd voor een UpdateCommand parameter waarin de CustomerID kolom wordt gebruikt als een SourceColumn voor twee parameters: @CustomerID (SET CustomerID = @CustomerID) en @OldCustomerID (WHERE CustomerID = @OldCustomerID). De @CustomerID parameter wordt gebruikt om de kolom CustomerID bij te werken naar de huidige waarde in de DataRow. Als gevolg hiervan wordt de CustomerIDSourceColumn met een SourceVersion van Current gebruikt. De @OldCustomerID parameter wordt gebruikt om de huidige rij in de gegevensbron te identificeren. Omdat de overeenkomende kolomwaarde wordt gevonden in de Original versie van de rij, wordt hetzelfde SourceColumn (CustomerID) met een SourceVersion van Original gebruikt.

Werken met SqlClient-parameters

In het volgende voorbeeld ziet u hoe u een SqlDataAdapter en stel deze MissingSchemaActionAddWithKey in om aanvullende schemagegevens op te halen uit de database. De SelectCommandeigenschappenset , InsertCommanden UpdateCommandDeleteCommandeigenschappen en de bijbehorende SqlParameter objecten die aan de Parameters verzameling zijn toegevoegd. De methode retourneert een SqlDataAdapter object.

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;
}

Zie ook