Parametry elementu DataAdapter
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 , UpdateCommandi InsertCommand służą DeleteCommand do zarządzania zmianami w źródle danych. Właściwość musi zostać ustawiona SelectCommand
przed wywołaniem Fill
metody DataAdapter
. Właściwości InsertCommand
, UpdateCommand
lub 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
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. Użyj symboli zastępczych znaku zapytania (?) dla System.Data.OleDb parametrów i System.Data.Odbc .
W tym przykładzie języka Visual Basic pole jest aktualizowane przy użyciu wartości @CompanyName
parametru dla wiersza, CompanyName
w którym CustomerID
jest równa 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.
adapter.Parameters.Add( _
"@CompanyName", SqlDbType.NChar, 15, "CompanyName")
Dim parameter As SqlParameter = _
adapter.UpdateCommand.Parameters.Add("@CustomerID", _
SqlDbType.NChar, 5, "CustomerID")
parameter.SourceVersion = DataRowVersion.Original
Metoda Add
Parameters
kolekcji przyjmuje nazwę parametru, typ danych, rozmiar (jeśli ma zastosowanie do typu) i nazwę SourceColumn elementu z DataTable
klasy . Zwróć uwagę, że SourceVersion parametr jest @CustomerID
ustawiony na Original
wartość . 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
W przypadku operacji Fill
DataAdapter
i Get
metod DataReader
programu , typ programu .NET Framework jest wnioskowany z typu zwróconego przez dostawcę danych programu .NET Framework. Wywnioskowane typy i metody dostępu programu .NET Framework dla typów danych MICROSOFT SQL Server, OLE DB i ODBC 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 Parameter
obiektu . 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 SourceVersion
programem .
DataRowVersion, wyliczenie | opis |
---|---|
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 CustomerID
SourceColumn
z wartością SourceVersion
Current
. 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ą Original
.SourceVersion
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)
{
SqlDataAdapter adapter = new()
{
MissingSchemaAction = MissingSchemaAction.AddWithKey,
// Create the commands.
SelectCommand = new SqlCommand(
"SELECT CustomerID, CompanyName FROM CUSTOMERS", connection),
InsertCommand = new SqlCommand(
"INSERT INTO Customers (CustomerID, CompanyName) " +
"VALUES (@CustomerID, @CompanyName)", connection),
UpdateCommand = new SqlCommand(
"UPDATE Customers SET CustomerID = @CustomerID, CompanyName = @CompanyName " +
"WHERE CustomerID = @oldCustomerID", connection),
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;
}
Public Function CreateSqlDataAdapter( _
ByVal connection As SqlConnection) As SqlDataAdapter
Dim adapter As 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
End Function
Symbole zastępcze parametrów OleDb
OleDbDataAdapter W przypadku obiektów i OdbcDataAdapter należy użyć symboli zastępczych znaku zapytania (?), aby zidentyfikować parametry.
Dim selectSQL As String = _
"SELECT CustomerID, CompanyName FROM Customers " & _
"WHERE CountryRegion = ? AND City = ?"
Dim insertSQL AS String = _
"INSERT INTO Customers (CustomerID, CompanyName) VALUES (?, ?)"
Dim updateSQL AS String = _
"UPDATE Customers SET CustomerID = ?, CompanyName = ? " & _
WHERE CustomerID = ?"
Dim deleteSQL As String = "DELETE FROM Customers WHERE CustomerID = ?"
string selectSQL =
"SELECT CustomerID, CompanyName FROM Customers " +
"WHERE CountryRegion = ? AND City = ?";
string insertSQL =
"INSERT INTO Customers (CustomerID, CompanyName) " +
"VALUES (?, ?)";
string updateSQL =
"UPDATE Customers SET CustomerID = ?, CompanyName = ? " +
"WHERE CustomerID = ? ";
string deleteSQL = "DELETE FROM Customers WHERE CustomerID = ?";
Sparametryzowane instrukcje zapytania definiują, które parametry wejściowe i wyjściowe należy utworzyć. Aby utworzyć parametr, użyj Parameters.Add
metody lub konstruktora Parameter
, aby określić nazwę kolumny, typ danych i rozmiar. W przypadku typów danych wewnętrznych, takich jak Integer
, nie trzeba uwzględniać rozmiaru lub można określić rozmiar domyślny.
Poniższy przykład kodu tworzy parametry instrukcji SQL, a następnie wypełnia DataSet
element .
Przykład oledb
' Assumes that connection is a valid OleDbConnection object.
Dim adapter As OleDbDataAdapter = New OleDbDataAdapter
Dim selectCMD AS OleDbCommand = New OleDbCommand(selectSQL, connection)
adapter.SelectCommand = selectCMD
' Add parameters and set values.
selectCMD.Parameters.Add( _
"@CountryRegion", OleDbType.VarChar, 15).Value = "UK"
selectCMD.Parameters.Add( _
"@City", OleDbType.VarChar, 15).Value = "London"
Dim customers As DataSet = New DataSet
adapter.Fill(customers, "Customers")
// Assumes that connection is a valid OleDbConnection object.
OleDbDataAdapter adapter = new OleDbDataAdapter();
OleDbCommand selectCMD = new OleDbCommand(selectSQL, connection);
adapter.SelectCommand = selectCMD;
// Add parameters and set values.
selectCMD.Parameters.Add(
"@CountryRegion", OleDbType.VarChar, 15).Value = "UK";
selectCMD.Parameters.Add(
"@City", OleDbType.VarChar, 15).Value = "London";
DataSet customers = new DataSet();
adapter.Fill(customers, "Customers");
Parametry odbc
' Assumes that connection is a valid OdbcConnection object.
Dim adapter As OdbcDataAdapter = New OdbcDataAdapter
Dim selectCMD AS OdbcCommand = New OdbcCommand(selectSQL, connection)
adapter.SelectCommand = selectCMD
' Add Parameters and set values.
selectCMD.Parameters.Add("@CountryRegion", OdbcType.VarChar, 15).Value = "UK"
selectCMD.Parameters.Add("@City", OdbcType.VarChar, 15).Value = "London"
Dim customers As DataSet = New DataSet
adapter.Fill(customers, "Customers")
// Assumes that connection is a valid OdbcConnection object.
OdbcDataAdapter adapter = new OdbcDataAdapter();
OdbcCommand selectCMD = new OdbcCommand(selectSQL, connection);
adapter.SelectCommand = selectCMD;
//Add Parameters and set values.
selectCMD.Parameters.Add("@CountryRegion", OdbcType.VarChar, 15).Value = "UK";
selectCMD.Parameters.Add("@City", OdbcType.VarChar, 15).Value = "London";
DataSet customers = new DataSet();
adapter.Fill(customers, "Customers");
Uwaga
Jeśli nazwa parametru nie jest podana dla parametru, parametr otrzymuje przyrostową nazwę domyślną parametruN , zaczynając od parametru "Parameter1". Zalecamy unikanie konwencji nazewnictwa parametruN podczas podawania nazwy parametru, ponieważ podana nazwa może powodować konflikt z istniejącą domyślną nazwą parametru ParameterCollection
w pliku . Jeśli podana nazwa już istnieje, zostanie zgłoszony wyjątek.