Megosztás a következőn keresztül:


DataAdapter-paraméterek

A DbDataAdapter tulajdonság négy tulajdonsággal rendelkezik, amelyek adatokat kérnek le és frissítenek az adatforrásba: a SelectCommand tulajdonság adatokat ad vissza az adatforrásból, a InsertCommand , UpdateCommandés DeleteCommand a tulajdonságok pedig az adatforrás módosításainak kezelésére szolgálnak. A SelectCommand tulajdonságot a metódus meghívása Fill DataAdapterelőtt be kell állítani. A InsertCommand, UpdateCommandvagy DeleteCommand tulajdonságokat a Update metódus meghívása DataAdapter előtt kell beállítani attól függően, hogy milyen módosításokat hajtottak végre az adatokon a DataTable. Ha például sorokat ad hozzá, a hívás Updateelőtt be kell állítani.InsertCommand Amikor Update egy beszúrt, frissített vagy törölt sort dolgoz fel, a művelet feldolgozásához a DataAdapter megfelelő Command tulajdonságot használja. A módosított sor aktuális információi a gyűjteményen keresztül jutnak el az Command objektumhoz Parameters .

Amikor frissít egy sort az adatforrásban, meghívja az UPDATE utasítást, amely egyedi azonosítóval azonosítja a frissíteni kívánt táblázat sorát. Az egyedi azonosító általában egy elsődleges kulcsmező értéke. Az UPDATE utasítás olyan paramétereket használ, amelyek tartalmazzák az egyedi azonosítót, valamint a frissíteni kívánt oszlopokat és értékeket, ahogyan az az alábbi Transact-SQL utasításban is látható.

UPDATE Customers SET CompanyName = @CompanyName
  WHERE CustomerID = @CustomerID  

Feljegyzés

A paraméterhelyőrzők szintaxisa az adatforrástól függ. Ez a példa egy SQL Server-adatforrás helyőrzőit mutatja be. Kérdőjel (?) helyőrzőket System.Data.OleDb és System.Data.Odbc paramétereket használjon.

Ebben a Visual Basic-példában a CompanyName mező a paraméter értékével frissül annak a @CompanyName sornak az értékével, ahol CustomerID a paraméter értéke @CustomerID megegyezik. A paraméterek az objektum tulajdonságával SqlParameter kérik le az adatokat a SourceColumn módosított sorból. Az előző UPDATE-utasítás paraméterei a következők. A kód feltételezi, hogy a változó adapter érvényes SqlDataAdapter objektumot jelöl.

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  

A Add gyűjtemény metódusa Parameters a paraméter nevét, az adattípust, a méretet (ha alkalmazható a típusra) és a SourceColumn forrás nevét DataTableveszi fel. Figyelje meg, hogy a SourceVersion @CustomerID paraméter beállítása a következőre Originalvan állítva: . Ez garantálja, hogy az adatforrás meglévő sora frissül, ha az azonosító oszlop vagy oszlopok értéke módosult a módosított DataRowfájlban. Ebben az esetben a Original sor értéke megegyezik az adatforrás aktuális értékével, a Current sor értéke pedig a frissített értéket tartalmazza. A SourceVersion paraméter értéke @CompanyName nincs beállítva, és az alapértelmezett sorértéket Current használja.

Feljegyzés

A .NET-keretrendszer típus a .NET-keretrendszer adatszolgáltatótól kapott típusból származik mind a műveletek, mind Fill a metódusok DataReaderesetében DataAdapter Get. A Microsoft SQL Server, OLE DB és ODBC adattípusok .NET-keretrendszer és kiegészítő módszereit a ADO.NET adattípus-leképezései ismertetik.

Parameter.SourceColumn, Parameter.SourceVersion

Az SourceColumn és SourceVersion átadható argumentumként a Parameter konstruktornak, vagy megadható egy meglévő Parametertulajdonságaként. Ez SourceColumn annak a DataColumn névnek a neve, amelyből a DataRow rendszer lekéri a Parameter lekérdezés értékét. Az SourceVersion érték lekéréséhez DataAdapter használt verziót adja megDataRow.

Az alábbi táblázat a DataRowVersion használható enumerálási értékeket SourceVersionmutatja be.

DataRowVersion enumerálás Leírás
Current A paraméter az oszlop aktuális értékét használja. Ez az alapértelmezett beállítás.
Default A paraméter az DefaultValue oszlopot használja.
Original A paraméter az oszlop eredeti értékét használja.
Proposed A paraméter egy javasolt értéket használ.

A SqlClient következő szakaszban szereplő kód példa egy olyan paramétert határoz meg, UpdateCommand amelyben az CustomerID oszlopot két paraméterhez SourceColumn használják: @CustomerID (SET CustomerID = @CustomerID) és @OldCustomerID (WHERE CustomerID = @OldCustomerID). A @CustomerID paraméter a CustomerID oszlop aktuális értékére való frissítésére szolgál a DataRow. Ennek eredményeképpen a rendszer az CustomerID SourceColumn a-val Current SourceVersion együtt használja a elemet. A @OldCustomerID paraméter az adatforrás aktuális sorának azonosítására szolgál. Mivel az egyező oszlop értéke a Original sor verziójában található, ugyanazt SourceColumn a (CustomerID) SourceVersion Original értéket használja a program.

Az SqlClient-paraméterek használata

Az alábbi példa bemutatja, hogyan hozhat létre és SqlDataAdapter állíthat be MissingSchemaAction AddWithKey további sémaadatokat az adatbázisból. A SelectCommandgyűjteményhez hozzáadott , InsertCommand, UpdateCommand, és DeleteCommand tulajdonságok, valamint azok Parameters megfelelő SqlParameter objektumai. A metódus egy objektumot SqlDataAdapter ad vissza.

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

OleDb paraméter helyőrzői

A paraméterek azonosításához OdbcDataAdapter kérdőjel OleDbDataAdapter (?) helyőrzőket kell használnia az objektumokhoz és objektumokhoz.

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 = ?";  

A paraméteres lekérdezési utasítások határozzák meg, hogy mely bemeneti és kimeneti paramétereket kell létrehozni. Paraméter létrehozásához használja a Parameters.Add metódust vagy a Parameter konstruktort az oszlop nevének, adattípusának és méretének megadásához. Az olyan belső adattípusok esetében, mint például Integera méretet nem kell megadnia, vagy megadhatja az alapértelmezett méretet.

Az alábbi példakód létrehozza egy SQL-utasítás paramétereit, majd kitölt egy DataSet.

Példa OleDb-ra

' 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");  

Odbc-paraméterek

' 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");  

Feljegyzés

Ha egy paraméterhez nem ad meg paraméternevet, a paraméter növekményes alapértelmezett N paraméternevetkap, amely a "Parameter1" névvel kezdődik. Javasoljuk, hogy a paraméternév megadásakor kerülje az N paraméterelnevezési konvenciójának használatát, mert a megadott név ütközhet egy meglévő alapértelmezett paraméternévvel a ParameterCollectionparaméterben. Ha a megadott név már létezik, a rendszer kivételt jelez.

Lásd még