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
DataAdapter
előtt be kell állítani. A InsertCommand
, UpdateCommand
vagy 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 Update
elő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 DataTable
veszi fel. Figyelje meg, hogy a SourceVersion @CustomerID
paraméter beállítása a következőre Original
van á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 DataReader
eseté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ő Parameter
tulajdonsá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 SourceVersion
mutatja 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 Integer
a 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 ParameterCollection
paraméterben. Ha a megadott név már létezik, a rendszer kivételt jelez.