Parametry adaptéru dat

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 Update zavolání metodyDataAdapter, v závislosti na tom, jaké změny byly provedeny v datech v objektu DataTable.DeleteCommandUpdateCommand 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.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 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 . 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 DataRowsouboru . 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, je parametr uveden jako přírůstkový 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 ParameterCollectionv souboru . Pokud zadaný název již existuje, vyvolá se výjimka.

Viz také