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ą domyślną nazwę 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.