Udostępnij przez


Parametry elementu DataAdapter

Dotyczy: .NET Framework .NET Standard

Pobieranie ADO.NET

Obiekt DbDataAdapter ma cztery właściwości używane do pobierania danych ze źródła danych i aktualizowania ich do źródła danych: SelectCommand właściwość zwraca dane ze źródła danych, a właściwości , InsertCommandi UpdateCommand służą DeleteCommand do zarządzania zmianami w źródle danych.

Uwaga / Notatka

Właściwość musi zostać ustawiona SelectCommand przed wywołaniem Fill metody DataAdapter. Właściwości InsertCommand, UpdateCommandlub DeleteCommand należy ustawić przed Update wywołaniem metody , DataAdapter w zależności od zmian w danych w obiekcie DataTable. Jeśli na przykład dodano wiersze, należy ustawić element InsertCommand przed wywołaniem metody Update. Podczas Update przetwarzania wstawionego, zaktualizowanego lub usuniętego wiersza DataAdapter obiekt używa odpowiedniej Command właściwości do przetworzenia akcji. Bieżące informacje o zmodyfikowanym wierszu są przekazywane do Command obiektu za pośrednictwem kolekcji Parameters .

Podczas aktualizowania wiersza w źródle danych należy wywołać instrukcję UPDATE, która używa unikatowego identyfikatora do identyfikowania wiersza w tabeli do zaktualizowania. Unikatowy identyfikator jest zazwyczaj wartością pola klucza podstawowego. Instrukcja UPDATE używa parametrów, które zawierają zarówno unikatowy identyfikator, jak i kolumny i wartości do zaktualizowania, jak pokazano w poniższej instrukcji Języka Transact-SQL.

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

Uwaga / Notatka

Składnia symboli zastępczych parametrów zależy od źródła danych. W tym przykładzie przedstawiono symbole zastępcze dla źródła danych programu SQL Server.

W tym przykładzie pole CompanyName jest aktualizowane wartością parametru @CompanyName dla wiersza, w którym CustomerID równa się wartości parametru @CustomerID. Parametry pobierają informacje z zmodyfikowanego wiersza przy użyciu SourceColumn właściwości SqlParameter obiektu. Poniżej przedstawiono parametry poprzedniej przykładowej instrukcji UPDATE. W kodzie przyjęto założenie, że zmienna adapter reprezentuje prawidłowy SqlDataAdapter obiekt.

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

Metoda AddParameters kolekcji przyjmuje nazwę parametru, typ danych, rozmiar (jeśli ma zastosowanie do typu) i nazwę SourceColumn elementu z DataTableklasy . Zwróć uwagę, że SourceVersion parametr jest @CustomerID ustawiony na Originalwartość . Gwarantuje to, że istniejący wiersz w źródle danych zostanie zaktualizowany, jeśli wartość identyfikującej kolumnę lub kolumny została zmieniona w zmodyfikowanym DataRowobiekcie . W takim przypadku Original wartość wiersza będzie zgodna z bieżącą wartością w źródle danych, a Current wartość wiersza będzie zawierać zaktualizowaną wartość. Parametr SourceVersion dla parametru @CompanyName nie jest ustawiony i używa domyślnej Current wartości wiersza.

Uwaga / Notatka

Zarówno operacje Fill w ramach DataAdapter, jak i metody Get obiektu DataReader, mają typ .NET wnioskowany na podstawie typu zwróconego przez dostawcę danych Microsoft SqlClient dla SQL Server. Wywnioskowane typy platformy .NET i metody dostępu dla typów danych programu Microsoft SQL Server są opisane w temacie Mapowania typów danych w ADO.NET.

Parameter.SourceColumn, Parameter.SourceVersion

Element SourceColumn i SourceVersion może być przekazywany jako argumenty do konstruktora Parameter lub ustawiany jako właściwości istniejącego Parameterobiektu . Jest SourceColumn to nazwa DataColumn obiektu , z DataRow którego zostanie pobrana wartość Parameter . Parametr SourceVersion określa DataRow wersję używaną DataAdapter do pobrania wartości.

W poniższej DataRowVersion tabeli przedstawiono wartości wyliczenia dostępne do użycia z SourceVersionprogramem .

DataRowVersion, wyliczenie Description
Current Parametr używa bieżącej wartości kolumny. Jest to opcja domyślna.
Default Parametr używa DefaultValue kolumny .
Original Parametr używa oryginalnej wartości kolumny.
Proposed Parametr używa proponowanej wartości.

Przykład SqlClient kodu w następnej sekcji definiuje parametr dla kolumny UpdateCommand , w której kolumna CustomerID jest używana jako SourceColumn dla dwóch parametrów: @CustomerID (SET CustomerID = @CustomerID) i @OldCustomerID (WHERE CustomerID = @OldCustomerID). Parametr @CustomerID służy do aktualizowania kolumny CustomerID do bieżącej wartości w elemencie DataRow. W rezultacie używany jest element CustomerIDSourceColumn z wartością SourceVersionCurrent . Parametr @OldCustomerID służy do identyfikowania bieżącego wiersza w źródle danych. Ponieważ zgodna wartość kolumny znajduje się w Original wersji wiersza, jest używana ta sama SourceColumn wartość (CustomerID) z wartością SourceVersion .Original

Praca z parametrami sqlClient

W poniższym przykładzie pokazano, jak utworzyć element SqlDataAdapter i ustawić MissingSchemaAction parametr na AddWithKey , aby pobrać dodatkowe informacje o schemacie z bazy danych. Zestaw SelectCommandwłaściwości , InsertCommand, UpdateCommandi DeleteCommand oraz odpowiadające SqlParameter im obiekty dodane do kolekcji Parameters . Metoda zwraca SqlDataAdapter obiekt.

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

Zobacz także