Parametry adaptéru dat
Má DbDataAdapter čtyři vlastnosti, které se používají k načtení dat ze zdroje dat a aktualizaci dat: SelectCommand vlastnost vrací data ze zdroje dat; a , a InsertCommand UpdateCommandDeleteCommand vlastnosti se používají ke správě změn ve zdroji dat. Vlastnost SelectCommand
musí být nastavena před voláním Fill
metody DataAdapter
. , InsertCommand
nebo vlastnosti musí být nastaveny před Update
zavolání metodyDataAdapter
, v závislosti na tom, jaké změny byly provedeny v datech v objektu DataTable.DeleteCommand
UpdateCommand
Pokud byly například přidány řádky, InsertCommand
musí být nastavena před voláním Update
. Při Update
zpracování vloženého, aktualizovaného nebo odstraněného řádku DataAdapter
použije příslušná Command
vlastnost ke zpracování akce. Aktuální informace o upraveném řádku se předají objektu Command
Parameters
prostřednictvím kolekce.
Když aktualizujete řádek ve zdroji dat, zavoláte příkaz UPDATE, který používá jedinečný identifikátor k identifikaci řádku v tabulce, který se má aktualizovat. Jedinečný identifikátor je obvykle hodnota pole primárního klíče. Příkaz UPDATE používá parametry, které obsahují jedinečný identifikátor i sloupce a hodnoty, které se mají aktualizovat, jak je znázorněno v následujícím příkazu Jazyka Transact-SQL.
UPDATE Customers SET CompanyName = @CompanyName
WHERE CustomerID = @CustomerID
Poznámka:
Syntaxe zástupných symbolů parametrů závisí na zdroji dat. Tento příklad ukazuje zástupné symboly pro zdroj dat SQL Serveru. Pro a System.Data.Odbc parametry použijte zástupné symboly System.Data.OleDb otazníku (?).
V tomto příkladu CompanyName
jazyka Visual Basic se pole aktualizuje hodnotou @CompanyName
parametru pro řádek, kde CustomerID
se rovná hodnotě parametru @CustomerID
. Parametry načítají informace z upraveného řádku pomocí SourceColumn vlastnosti objektu SqlParameter . Níže jsou uvedené parametry pro předchozí ukázkový příkaz UPDATE. Kód předpokládá, že proměnná adapter
představuje platný SqlDataAdapter objekt.
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
Add
Metoda Parameters
kolekce přebírá název parametru, datový typ, velikost (pokud je k dispozici pro typ) a název z objektu SourceColumn DataTable
. Všimněte si, že SourceVersion parametr @CustomerID
je nastaven na Original
hodnotu . To zaručuje, že existující řádek ve zdroji dat se aktualizuje, pokud se hodnota identifikačního sloupce nebo sloupců v upraveném sloupci změnila DataRow. V takovém případě Original
by hodnota řádku odpovídala aktuální hodnotě ve zdroji dat a Current
hodnota řádku by obsahovala aktualizovanou hodnotu. Parametr SourceVersion
@CompanyName
není nastaven a používá výchozí Current
hodnotu řádku.
Poznámka:
Fill
Pro operace i DataAdapter
Get
metody DataReader
rozhraní .NET Framework je odvozen z typu vráceného poskytovatelem dat rozhraní .NET Framework. Odvozené typy rozhraní .NET Framework a metody přistupujícího objektu pro datové typy Microsoft SQL Server, OLE DB a ODBC jsou popsány v mapování datových typů v ADO.NET.
Parameter.SourceColumn, Parameter.SourceVersion
Tento SourceColumn
parametr může SourceVersion
být předán jako argumenty konstruktoru Parameter
nebo nastaven jako vlastnosti existujícího Parameter
. Jedná se SourceColumn
o název DataColumn místa, kde DataRow se načte hodnota objektu Parameter
. DataRow
Určuje SourceVersion
verzi, kterou DataAdapter
používá k načtení hodnoty.
Následující tabulka uvádí hodnoty výčtu DataRowVersion , které jsou k dispozici pro použití s SourceVersion
.
DataRowVersion – výčet | Popis |
---|---|
Current |
Parametr používá aktuální hodnotu sloupce. Tato možnost je výchozí. |
Default |
Parametr používá DefaultValue sloupec. |
Original |
Parametr používá původní hodnotu sloupce. |
Proposed |
Parametr používá navrženou hodnotu. |
Příklad SqlClient
kódu v další části definuje parametr, UpdateCommand ve kterém CustomerID
se sloupec používá jako SourceColumn
dva parametry: @CustomerID
(SET CustomerID = @CustomerID
) a @OldCustomerID
(WHERE CustomerID = @OldCustomerID
). Parametr @CustomerID
slouží k aktualizaci sloupce CustomerID na aktuální hodnotu v DataRow
souboru . V důsledku toho CustomerID
SourceColumn
se použije hodnota s SourceVersion
Current
Parametr @OldCustomerID
slouží k identifikaci aktuálního řádku ve zdroji dat. Vzhledem k tomu, že odpovídající hodnota sloupce se nachází ve Original
verzi řádku, použije se stejná SourceColumn
hodnota (CustomerID
) s hodnotou of SourceVersion
Original
.
Práce s parametry SqlClient
Následující příklad ukazuje, jak vytvořit SqlDataAdapter a nastavit MissingSchemaAction na hodnotu AddWithKey , aby bylo možné načíst další informace o schématu z databáze. Objekty SelectCommand, , InsertCommandUpdateCommanda DeleteCommand vlastnosti jsou nastaveny a jejich odpovídající SqlParameter objekty přidány do Parameters kolekce. Metoda vrátí SqlDataAdapter
objekt.
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
Zástupné symboly parametrů OleDb
OleDbDataAdapter U objektů a OdbcDataAdapter objektů musíte k identifikaci parametrů použít zástupné symboly otazníku (?).
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 = ?";
Parametrizované příkazy dotazu definují, které vstupní a výstupní parametry se musí vytvořit. K vytvoření parametru použijte metodu Parameters.Add
Parameter
nebo konstruktor k určení názvu sloupce, datového typu a velikosti. U vnitřních datových typů, například Integer
, nemusíte zahrnout velikost nebo můžete zadat výchozí velikost.
Následující příklad kódu vytvoří parametry pro příkaz SQL a pak vyplní DataSet
.
Příklad 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");
Poznámka:
Pokud pro parametr není zadán název parametru, parametr má inkrementální výchozí název parametruN počínaje parametrem "Parameter1". Doporučujeme, abyste se při zadávání názvu parametru vyhnuli konvenci pojmenování parametruN , protože zadaný název může být v konfliktu s existujícím výchozím názvem parametru ParameterCollection
v souboru . Pokud zadaný název již existuje, vyvolá se výjimka.