Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
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 InsertCommandUpdateCommandDeleteCommand 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. , InsertCommandnebo vlastnosti musí být nastaveny před UpdateCommand zavolání metodyDeleteCommand, v závislosti na tom, jaké změny byly provedeny v datech v objektu Update.DataAdapterDataTable 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 CommandParameters 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.OleDb parametry použijte zástupné symboly System.Data.Odbc 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 SourceColumnDataTable. Všimněte si, že SourceVersion parametr @CustomerID je nastaven na Originalhodnotu . 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 DataAdapterGet metody DataReaderrozhraní .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 .
SourceVersion Určuje DataRow 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 CustomerID sloupce na aktuální hodnotu v souboru DataRow. V důsledku toho CustomerIDSourceColumn se použije hodnota s SourceVersionCurrent 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 SourceVersionOriginal .
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.AddParameter 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 parametruNpočí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 ParameterCollectionv souboru . Pokud zadaný název již existuje, vyvolá se výjimka.