Jegyzet
Az oldalhoz való hozzáférés engedélyezést igényel. Próbálhatod be jelentkezni vagy könyvtárat váltani.
Az oldalhoz való hozzáférés engedélyezést igényel. Megpróbálhatod a könyvtár váltását.
A következőre vonatkozik: .NET Framework
.NET .NET
Standard
A Batch támogatása ADO.NET lehetővé teszi DataAdapter az INSERT, UPDATE és DELETE műveletek csoportosítását a DataSet kiszolgálóról vagy DataTable a kiszolgálóra ahelyett, hogy egyszerre egyetlen műveletet küldene. A kiszolgálóra irányuló kerek utak számának csökkentése általában jelentős teljesítménynövekedést eredményez. A Batch-frissítés az SQL Serverhez készült Microsoft SqlClient-adatszolgáltató (Microsoft.Data.SqlClient) esetében támogatott.
Ha az adatbázist az ADO.NET korábbi DataSet verzióinak módosításaival frissíti, az Update adatbázison végrehajtott frissítések módszere DataAdapter egyszerre egy sorban. Ahogy a megadott DataTablesorokon haladt végig, mindegyiknél DataRow megvizsgálta, hogy módosították-e. Ha a sort módosították, az adott sor tulajdonságának értékétől függően a megfelelőnek vagy UpdateCommanda InsertCommand megfelelőnek DeleteCommandRowStatenevezte. Minden sorfrissítéshez az adatbázis teljes hálózata kapcsolódott.
Az SQL Serverhez készült Microsoft SqlClient-adatszolgáltató elérhetővé tesz egy UpdateBatchSize tulajdonságot a SqlDataAdapter.
UpdateBatchSize A pozitív egész szám értékének beállítása miatt az adatbázis frissítései a megadott méretű kötegekként lesznek elküldve. A 10 értékre állítás UpdateBatchSize például 10 különálló utasítást csoportosít, és egyetlen kötegként küldi el őket. A UpdateBatchSize 0 értékre állítással a SqlDataAdapter kiszolgáló által kezelhető legnagyobb kötegméretet használhatja. Ha 1-re állítja, letiltja a kötegfrissítéseket, mivel a sorok egyenként lesznek elküldve.
Megjegyzés:
Egy rendkívül nagy köteg végrehajtása csökkentheti a teljesítményt. Ezért az alkalmazás implementálása előtt tesztelnie kell az optimális kötegméret-beállítást.
Az UpdateBatchSize tulajdonság használata
Ha a kötegfrissítések engedélyezve vannak, a UpdatedRowSource DataAdapter tulajdonságértékének UpdateCommandInsertCommandDeleteCommand a következőre kell lennie: None vagy OutputParameters. Kötegfrissítés végrehajtásakor a parancs UpdatedRowSource tulajdonságértéke FirstReturnedRecord érvénytelen vagy Both érvénytelen.
Az alábbi eljárás a tulajdonság használatát UpdateBatchSize mutatja be. Az eljárás két argumentumot vesz fel: egy DataSet objektumot, amelynek oszlopai a Production.ProductCategory tábla ProductCategoryID és Name mezőit jelölik, és egy egész szám, amely a köteg méretét (a köteg sorainak számát) jelöli. A kód létrehoz egy új SqlDataAdapter objektumot, amely beállítja annak UpdateCommand, InsertCommandés DeleteCommand tulajdonságait. A kód feltételezi, hogy az DataSet objektum módosított sorokat. Beállítja a tulajdonságot UpdateBatchSize , és végrehajtja a frissítést.
public static void BatchUpdate(DataTable dataTable, Int32 batchSize)
{
// Assumes GetConnectionString() returns a valid connection string.
string connectionString = GetConnectionString();
// Connect to the AdventureWorks database.
using (SqlConnection connection = new SqlConnection(connectionString))
{
// Create a SqlDataAdapter.
SqlDataAdapter adapter = new SqlDataAdapter();
// Set the UPDATE command and parameters.
adapter.UpdateCommand = new SqlCommand(
"UPDATE Production.ProductCategory SET "
+ "Name=@Name WHERE ProductCategoryID=@ProdCatID;",
connection);
adapter.UpdateCommand.Parameters.Add("@Name",
SqlDbType.NVarChar, 50, "Name");
adapter.UpdateCommand.Parameters.Add("@ProdCatID",
SqlDbType.Int, 4, "ProductCategoryID");
adapter.UpdateCommand.UpdatedRowSource = UpdateRowSource.None;
// Set the INSERT command and parameter.
adapter.InsertCommand = new SqlCommand(
"INSERT INTO Production.ProductCategory (Name) VALUES (@Name);",
connection);
adapter.InsertCommand.Parameters.Add("@Name",
SqlDbType.NVarChar, 50, "Name");
adapter.InsertCommand.UpdatedRowSource = UpdateRowSource.None;
// Set the DELETE command and parameter.
adapter.DeleteCommand = new SqlCommand(
"DELETE FROM Production.ProductCategory "
+ "WHERE ProductCategoryID=@ProdCatID;", connection);
adapter.DeleteCommand.Parameters.Add("@ProdCatID",
SqlDbType.Int, 4, "ProductCategoryID");
adapter.DeleteCommand.UpdatedRowSource = UpdateRowSource.None;
// Set the batch size.
adapter.UpdateBatchSize = batchSize;
// Execute the update.
adapter.Update(dataTable);
}
}
Kötegelt frissítéssel kapcsolatos események és hibák kezelése
A DataAdapter két frissítéssel kapcsolatos eseményt tartalmaz: RowUpdating és RowUpdated. További információ: DataAdapter-események kezelése.
Esemény viselkedésének változásai kötegfrissítésekkel
Ha a kötegelt feldolgozás engedélyezve van, több sor is frissül egyetlen adatbázisműveletben. Ezért minden egyes köteghez csak egy RowUpdated esemény fordul elő, míg az RowUpdating esemény minden feldolgozott sorra vonatkozik. Ha a kötegelt feldolgozás le van tiltva, a két eseményt egy-az-egyhez összekapcsolással aktiválja a rendszer, ahol egy RowUpdating esemény és egy RowUpdated esemény aktiválódik egy sorra, majd egy RowUpdating és egy RowUpdated esemény aktiválódik a következő sorra, amíg az összes sor feldolgozásra nem kerül.
Frissített sorok elérése
Ha a kötegelt feldolgozás le van tiltva, a frissítendő sor az osztály tulajdonságával Row érhető elRowUpdatedEventArgs.
Ha a kötegelt feldolgozás engedélyezve van, a rendszer egyetlen RowUpdated eseményt hoz létre több sorhoz. Ezért az Row egyes sorok tulajdonságának értéke null.
RowUpdating az események továbbra is létre lesznek hozva az egyes sorokhoz. Az CopyToRows osztály metódusa RowUpdatedEventArgs lehetővé teszi a feldolgozott sorok elérését a sorokra mutató hivatkozások tömbbe másolásával. Ha nem dolgoznak fel sorokat, CopyToRows a rendszer egy ArgumentNullException.
RowCount A tulajdonság használatával adja vissza a metódus meghívása CopyToRows előtt feldolgozott sorok számát.
Adathibák kezelése
A kötegelt végrehajtásnak ugyanaz a hatása, mint az egyes utasítások végrehajtásának. Az utasítások végrehajtása abban a sorrendben történik, amelyben az utasítások hozzá lettek adva a köteghez. A hibák kezelése ugyanúgy történik kötegelt módban, mint amikor a köteg mód le van tiltva. Minden sor feldolgozása külön történik. Csak az adatbázisban sikeresen feldolgozott sorok frissülnek a megfelelő DataRow helyen.DataTable
Megjegyzés:
Az SQL Serverhez tartozó Microsoft SqlClient adatszolgáltató és a háttéradatbázis-kiszolgáló határozzák meg, hogy mely SQL-szerkezetek támogatottak a kötegelt végrehajtáshoz. Kivétel akkor léphet fel, ha egy nem támogatott utasítást nyújtanak be végrehajtásra.