Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dotyczy: .NET Framework
.NET
Standard
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;
}