Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
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 SelectCommandFill metódus meghívása előtt a DataAdapter tulajdonságot be kell állítani. A InsertCommand, UpdateCommand, vagy DeleteCommand tulajdonságokat be kell állítani a Update függvény meghívása előtt a DataAdapter-ben, attól függően, milyen módosításokat hajtottak végre az adatokon a DataTable-ben. Például, ha sorokat adott hozzá, a InsertCommand-et be kell állítani, mielőtt a Update-t meghívná. 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
Megjegyzé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. Használjon kérdőjel (?) helyőrzőket a System.Data.OleDb és System.Data.Odbc paraméterekhez.
Ebben a Visual Basic-példában a CompanyName mező a @CompanyName paraméter értékével frissül abban a sorban, ahol a CustomerID mező értéke megegyezik a @CustomerID paraméterrel. A paraméterek a SourceColumn módosított sorból az objektum SqlParameter tulajdonságával kérik le az adatokat. 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 a paraméter nevét, az adattípust, a méretet (ha alkalmazható a típusra), és a Parameters nevét a SourceColumn-ből veszi. 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.
Megjegyzés
A FillDataAdapter műveletek és a GetDataReader metódusok esetében a .NET-keretrendszer típusa a .NET-keretrendszer adatszolgáltatótól kapott típusból van levezetve. 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.
Paraméter.SourceColumn, Paraméter.SourceVersion
Az SourceColumn és SourceVersion átadható argumentumként a Parameter konstruktornak, vagy megadható egy meglévő Parametertulajdonságaként. Ez a SourceColumn neve, ahonnan a DataColumn értékét lekérik a DataRow számára. A SourceVersion megadja azt a DataRow verziót, amelyet a DataAdapter az érték lekéréséhez használ.
Az alábbi táblázat az elérhető DataRowVersion enumerációs értékeket mutatja, amelyek a SourceVersion használhatók.
| DataRowVersion felsorolá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ő szakaszában szereplő kódpélda olyan paramétert határoz meg, amelyben az UpdateCommand oszlopot két paraméter CustomerID-ként használják: SourceColumn (@CustomerID) és SET CustomerID = @CustomerID (@OldCustomerID). A @CustomerID paramétert használják a CustomerID oszlop aktuális értékének DataRow frissítésére. Ennek eredményeképpen egy CustomerIDSourceColumn egy SourceVersionCurrent-vel van használva. A @OldCustomerID paraméter az adatforrás aktuális sorának azonosítására szolgál. Mivel az egyező oszlopérték a Original sor verziójában található, ugyanazt a SourceColumn-t (CustomerID), amelynek SourceVersion-je Original, használjuk.
Az SqlClient-paraméterek használata
Az alábbi példa bemutatja, hogyan hozhat létre egy SqlDataAdapter-t, és hogyan állíthatja be a MissingSchemaAction-t AddWithKey-re annak érdekében, hogy további sémaadatokat kérjen le az adatbázisból. A SelectCommand, InsertCommand, UpdateCommand és DeleteCommand tulajdonságok beállítva, és a megfelelő SqlParameter objektumok hozzáadva a Parameters gyűjteményhez. 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
Az OleDbDataAdapter és OdbcDataAdapter objektumok esetében kérdőjel (?) helyőrzőket kell használnia a paraméterek azonosításához.
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");
Megjegyzé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.