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


Adatok mentése az adatbázisba .NET-keretrendszeralkalmazásokban

Megjegyzés:

Az DataSet osztály és a kapcsolódó osztályok a 2000-es évek elejétől származó régi .NET-keretrendszer-technológiák, amelyek lehetővé teszik az alkalmazások számára a memóriában lévő adatokkal való munkát, miközben az alkalmazások leválasztva vannak az adatbázisról. A technológiák különösen hasznosak az olyan alkalmazások esetében, amelyek lehetővé teszik a felhasználók számára az adatok módosítását és a módosítások visszaállítását az adatbázisba. Bár az adathalmazok bizonyítottan sikeres technológiának számítanak, az új .NET-alkalmazásokhoz ajánlott az Entity Framework Core használata. Az Entity Framework természetesebb módot kínál a táblázatos adatok objektummodellként való használatához, és egyszerűbb programozási felülettel rendelkezik.

Az adatkészlet az adatok memóriabeli másolata. Ha módosítja ezeket az adatokat, célszerű ezeket a módosításokat visszamenteni az adatbázisba. Ezt háromféleképpen teheti meg:

  • A TableAdapter egyik metódusának Update meghívásával

  • A TableAdapter egyik DBDirect metódusának meghívásával

  • A Visual Studio által létrehozott TableAdapterManager-en a UpdateAll metódus meghívásával, amikor az adathalmaz olyan táblákat tartalmaz, amelyek más táblákkal vannak kapcsolatban az adathalmazon belül.

Ha adathalmaztáblákat köt egy Windows-űrlap vagy XAML-lap vezérlőihez, az adatkötési architektúra elvégzi az összes munkát.

Ha ismeri a TableAdapterst, közvetlenül az alábbi témakörök egyikére ugorhat:

Téma Leírás
Új rekordok beszúrása adatbázisba Frissítések és beszúrások végrehajtása TableAdapters vagy Command objektumokkal
Adatok frissítése TableAdapter használatával Frissítések végrehajtása a TableAdapters használatával
hierarchikus frissítés Frissítések végrehajtása két vagy több kapcsolódó táblával rendelkező adatkészletből
Egyidejűségi kivétel kezelése Kivételek kezelése, ha két felhasználó ugyanabban az időben próbálja módosítani az adatbázis adatait
Útmutató: Adatok mentése tranzakcióval Adatok mentése egy tranzakcióban a Rendszer használatával. Tranzakciók névtér és egy TransactionScope objektum
Adatok mentése tranzakcióban Útmutató egy Windows Forms-alkalmazás létrehozásához, amely bemutatja az adatok tranzakción belüli adatbázisba való mentését
Adatok mentése adatbázisba (több tábla) Rekordok szerkesztése és módosítások mentése több táblában az adatbázisba
Adatok mentése objektumból adatbázisba Adathalmazban nem szereplő objektumok adatainak továbbítása adatbázisba TableAdapter DbDirect metódussal
Adatok mentése a TableAdapter DBDirect metódusokkal SQL-lekérdezések közvetlen elküldése az adatbázisba a TableAdapter használatával
Adathalmaz mentése XML-fájlként Adathalmaz mentése XML-dokumentumba

Kétfázisú frissítések

Az adatforrás frissítése kétlépéses folyamat. Az első lépés az adathalmaz frissítése új rekordokkal, módosított rekordokkal vagy törölt rekordokkal. Ha az alkalmazás soha nem küldi vissza ezeket a módosításokat az adatforrásnak, akkor befejezte a frissítést.

Ha mégis visszaküldi a módosításokat az adatbázisba, egy második lépésre van szükség. Ha nem használ adatkapcsolatos vezérlőket, akkor manuálisan kell meghívnia annak a TableAdapternek (vagy adatadapternek) a metódusát, amelyet az adathalmaz feltöltéséhez használt. Azonban különböző adaptereket is használhat, például az adatok egyik adatforrásból a másikba való áthelyezéséhez, vagy több adatforrás frissítéséhez. Ha nem használ adatkötést, és a kapcsolódó táblák módosításait menti, manuálisan kell példányosítania az automatikusan létrehozott TableAdapterManager osztály egyik változóját, majd meg kell hívnia annak metódusát UpdateAll .

Az adathalmaz-frissítések fogalmi diagramja

Az adathalmazok táblázatgyűjteményeket tartalmaznak, amelyek sorgyűjteményeket tartalmaznak. Ha később frissíteni szeretne egy mögöttes adatforrást, a sorok hozzáadásakor vagy eltávolításakor a DataTable.DataRowCollection tulajdonság metódusait kell használnia. Ezek a metódusok végrehajtják az adatforrás frissítéséhez szükséges változáskövetést. Ha meghívja a gyűjteményt RemoveAt a Sorok tulajdonságban, a rendszer nem küldi vissza a törlést az adatbázisnak.

Adathalmazok egyesítése

Az adathalmazok tartalmát úgy frissítheti , hogy egy másik adatkészlettel egyesíti. Ez magában foglalja a forrásadatkészlet tartalmának másolását a hívó adatkészletbe (más néven céladatkészletbe ). Adathalmazok egyesítésekor a forrásadatkészlet új rekordjai kerülnek a céladatkészletbe. Emellett a forrásadatkészlet további oszlopai is hozzáadódnak a céladatkészlethez. Az adathalmazok egyesítése akkor hasznos, ha helyi adatkészletet hoz létre, és egy másik alkalmazásból kap egy második adatkészletet. Akkor is hasznos, ha egy második adathalmazt egy összetevőből, például egy XML-webszolgáltatásból szerez be, vagy ha több adatkészlet adatait kell integrálnia.

Adathalmazok egyesítésekor átadhat egy logikai argumentumot (preserveChanges), amely közli a Merge metódussal, hogy megtartja-e a meglévő módosításokat a céladatkészletben. Mivel az adathalmazok több rekordverziót is tartanak fenn, fontos szem előtt tartani, hogy a rekordok több verziója is egyesül. Az alábbi táblázat bemutatja, hogyan egyesül egy rekord két adathalmazban:

DataRowVersion Céladatkészlet Forrásadatkészlet
Eredeti James Wilson James C. Wilson
Jelenlegi Jim Wilson James C. Wilson

Az Merge metódus meghívása az előző táblában preserveChanges=false targetDataset.Merge(sourceDataset) az alábbi adatokat eredményezi.

DataRowVersion Céladatkészlet Forrásadatkészlet
Eredeti James C. Wilson James C. Wilson
Jelenlegi James C. Wilson James C. Wilson

A Merge metódus preserveChanges = true targetDataset.Merge(sourceDataset, true) használatának eredménye a következő adatok:

DataRowVersion Céladatkészlet Forrásadatkészlet
Eredeti James C. Wilson James C. Wilson
Jelenlegi Jim Wilson James C. Wilson

Figyelmeztetés

Ebben a preserveChanges = true forgatókönyvben, ha a RejectChanges metódust a céladatkészlet egy rekordján hívják meg, akkor a forrásadatkészletből visszaállítja az eredeti adatokat. Ez azt jelenti, hogy ha megpróbálja frissíteni az eredeti adatforrást a céladatkészlettel, előfordulhat, hogy nem találja az eredeti frissítendő sort. Az egyidejűség megsértésének megelőzéséhez töltse ki egy másik adathalmazt az adatforrás frissített rekordjaival, majd egyesítéssel megelőzze az egyidejűség megsértését. (Egyidejűségi szabálysértés akkor fordul elő, ha egy másik felhasználó módosít egy rekordot az adatforrásban az adathalmaz kitöltése után.)

Frissítési korlátozások

Ha módosítani szeretne egy meglévő adatsort, adja hozzá vagy frissítse az egyes oszlopokban lévő adatokat. Ha az adathalmaz kényszereket (például idegen kulcsokat vagy nem null értékű kényszereket) tartalmaz, lehetséges, hogy a rekord átmenetileg hibaállapotba kerülhet a frissítés során. Ez azt is jelentheti, hogy hibaállapotba kerülhet, miután befejezte az egyik oszlop frissítését, de mielőtt a következőre érne.

Az idő előtti korlátozások megsértésének elkerülése érdekében ideiglenesen felfüggesztheti a frissítési kényszereket. Ez két célt szolgál:

  • Megakadályozza, hogy hiba jelenik meg, miután befejezte az egyik oszlop frissítését, de még nem kezdte el a másik frissítését.

  • Megakadályozza, hogy bizonyos frissítési események, amelyeket gyakran használnak az ellenőrzéshez, előálljanak.

Megjegyzés:

A Windows Formsban a datagridbe beépített adatkötési architektúra felfüggeszti a kényszerellenőrzést, amíg a fókusz ki nem lép egy sorból, és nem kell explicit módon meghívnia az BeginEdit, EndEditvagy CancelEdit metódusokat.

A kényszerek automatikusan le lesznek tiltva, amikor a Merge metódust egy adathalmazon hívja meg a rendszer. Ha az egyesítés befejeződött, és az adathalmaz korlátozásait nem lehet engedélyezni, akkor kivételt dob ConstraintException. Ebben az esetben a EnforceConstraints tulajdonságot false, értékre állítják, és a EnforceConstraints tulajdonságot csak az összes korlátozási szabálysértés megoldása után lehet true értékre visszaállítani.

A frissítés befejezése után újra engedélyezheti a kényszerek ellenőrzését, ami szintén újra engedélyezi a frissítési eseményeket és aktiválja azokat.

Az események felfüggesztésével kapcsolatos további információkért tekintse meg az adathalmaz kitöltése során a korlátozások kikapcsolását ismertető témakört.

Adatkészlet-frissítési hibák

Amikor egy adathalmazban frissít egy rekordot, hiba merülhet fel. Előfordulhat például, hogy véletlenül nem megfelelő típusú adatokat ír egy oszlopba, vagy túl hosszú adatokat, vagy más integritási problémát okozó adatokat. Vagy előfordulhat, hogy alkalmazásspecifikus ellenőrzési ellenőrzésekkel rendelkezik, amelyek egyéni hibákat okozhatnak a frissítési esemény bármely szakaszában. További információ: Adathalmazok adatainak ellenőrzése.

Változásokra vonatkozó információk karbantartása

Az adathalmazok változásaival kapcsolatos információk kétféleképpen maradnak fenn: az olyan sorok megjelölésével, amelyek azt jelzik, hogy módosultak (RowState), valamint egy rekord több másolatának megőrzésével (DataRowVersion). Ezen információk használatával a folyamatok meghatározhatják, hogy mi változott az adathalmazban, és megfelelő frissítéseket küldhetnek az adatforrásnak.

RowState tulajdonság

Az RowState objektum tulajdonsága DataRow olyan érték, amely egy adott adatsor állapotáról nyújt információt.

Az alábbi táblázat az enumerálás lehetséges értékeit DataRowState ismerteti:

DataRowState érték Leírás
Added A sort elemként adták hozzá egy DataRowCollection-hez. (Ebben az állapotban egy sor nem rendelkezik megfelelő eredeti verzióval, mivel nem létezett az utolsó AcceptChanges metódus meghívásakor).
Deleted A sor egy DataRow objektum Delete használatával lett törölve.
Detached A sor létrejött, de nem része semelyik DataRowCollection-nak. Az DataRow objektumok közvetlenül a létrehozásuk után, a gyűjteményhez való hozzáadása előtt és a gyűjteményből való eltávolítása után is ebben az állapotban vannak.
Modified A sor egyik oszlopértéke valamilyen módon megváltozott.
Unchanged A sor nem változott azóta, hogy AcceptChanges utoljára meghívásra került.

DataRowVersion enumeráció

Az adathalmazok több rekordverziót is fenntartanak. A DataRowVersion mezőket akkor használják, amikor egy DataRow található értéket nyerünk ki a Item[] tulajdonság vagy a GetChildRows módszer segítségével a DataRow objektumból.

Az alábbi táblázat az enumerálás lehetséges értékeit DataRowVersion ismerteti:

DataRowVersion-érték Leírás
Current A rekord aktuális verziója tartalmazza azokat a módosításokat, amelyeket a legutóbbi hívás óta hajtottak végre a AcceptChanges rekordon. Ha a sor törölve lett, nincs aktuális verzió.
Default Egy rekord alapértelmezett értéke az adathalmaz sémája vagy adatforrása által meghatározottak szerint.
Original A rekord eredeti verziója a rekord másolata, mivel ez volt az utolsó módosítás véglegesítése az adathalmazban. Gyakorlati szempontból ez általában egy adatforrásból olvasott rekord verziója.
Proposed A rekord javasolt verziója, amely ideiglenesen elérhető, miközben Ön a frissítés közepén van – azaz a BeginEdit metódus és a EndEdit metódus meghívása között. Általában egy rekord javasolt verzióját éri el egy esemény kezelőjében, például RowChanging. A metódus meghívása CancelEdit megfordítja a módosításokat, és törli az adatsor javasolt verzióját.

Az eredeti és az aktuális verziók akkor hasznosak, ha a frissítési információkat egy adatforrásba továbbítják. Amikor a rendszer frissítést küld az adatforrásnak, az adatbázis új információi általában egy rekord aktuális verziójában találhatók. A rendszer az eredeti verzióból származó információkat használja a frissíteni kívánt rekord megkereséséhez.

Ha például egy rekord elsődleges kulcsa megváltozik, meg kell találnia a megfelelő rekordot az adatforrásban a módosítások frissítéséhez. Ha nem létezik eredeti verzió, akkor a rekord nagy valószínűséggel hozzá lesz fűzve az adatforráshoz, ami nem csak egy felesleges rekordot eredményez, hanem egy pontatlan és elavult rekordot is. A két verzió az egyidejűség-vezérlésben is használatos. Összehasonlíthatja az eredeti verziót az adatforrás rekordjaival annak megállapításához, hogy a rekord megváltozott-e az adathalmazba való betöltése óta.

A javasolt verzió akkor hasznos, ha az adathalmaz módosításainak véglegesítése előtt végre kell hajtania az ellenőrzést.

Még ha a rekordok megváltoztak is, a sornak nem mindig vannak eredeti vagy aktuális verziói. Amikor új sort szúr be a táblába, nincs eredeti verzió, csak egy aktuális verzió. Hasonlóképpen, ha a tábla metódusának Delete meghívásával töröl egy sort, létezik egy eredeti verzió, de nincs aktuális verzió.

Egy adatsor HasVersion metódusának lekérdezésével ellenőrizheti, hogy létezik-e egy rekord egy adott verziója. Ha egy oszlop értékét kéri, egy enumerációs értéket adhat meg választható argumentumként, így hozzáférhet a rekord bármelyik verziójához.

Módosított rekordok lekérése

Gyakori eljárás, hogy egy adathalmaz minden rekordját nem frissíti. Előfordulhat például, hogy egy felhasználó olyan Windows Forms-vezérlővel DataGridView dolgozik, amely sok rekordot jelenít meg. A felhasználó azonban csak néhány rekordot frissíthet, törölhet egyet, és újat szúrhat be. Az adathalmazok és adattáblák csak a módosított sorok visszaadására szolgálnak ().GetChanges

A módosított rekordok részhalmazait az adattábla (GetChanges) vagy az adathalmaz (GetChanges) metódusával hozhatja létre GetChanges. Ha meghívja az adattábla metódusát, az a tábla egy példányát adja vissza, amely csak a módosított rekordokat tartalmazza. Hasonlóképpen, ha meghívja az adathalmaz metódusát, egy új adatkészletet kap, amelyben csak a módosított rekordok szerepelnek.

GetChanges önmagában az összes módosított rekordot visszaadja. Ezzel szemben ha paraméterként adja meg a kívánt DataRowState rekordot a GetChanges metódusnak, megadhatja a módosított rekordok kívánt részhalmazát: újonnan hozzáadott rekordokat, törlésre megjelölt rekordokat, leválasztott rekordokat vagy módosított rekordokat.

A módosított rekordok részhalmazának lekérése akkor hasznos, ha rekordokat szeretne küldeni egy másik összetevőnek feldolgozás céljából. A teljes adathalmaz elküldése helyett csökkentheti a másik összetevővel való kommunikáció többletterhelését, ha csak az összetevő által igényelt rekordokat szerzi be.

Módosítások véglegesítése az adathalmazban

Az adathalmazban végzett módosítások során a RowState módosított sorok tulajdonsága be van állítva. A rekordok eredeti és aktuális verzióit a tulajdonság hozta létre, tartja karban és teszi elérhetővé Önnek RowVersion . A módosított sorok tulajdonságaiban tárolt metaadatok szükségesek a megfelelő frissítések adatforrásba való küldéséhez.

Ha a módosítások az adatforrás aktuális állapotát tükrözik, többé nem kell ezeket az információkat fenntartania. Az adathalmaz és a forrás szinkronizálása általában két alkalommal történik:

  • Közvetlenül azután, hogy adatokat töltött be az adathalmazba, például amikor adatokat olvas a forrásból.

  • Miután módosításokat küldött az adathalmazból az adatforrásba (de korábban nem, mert elveszítené a módosítások adatbázisba való küldéséhez szükséges módosítási információkat).

A AcceptChanges metódus meghívásával elkötelezheti az adathalmaz függőben lévő módosításait. A meghívás általában AcceptChanges a következő időpontokban történik:

  • Az adathalmaz betöltése után. Ha egy TableAdapter Fill metódus meghívásával tölt be egy adathalmazt, az adapter automatikusan véglegesíti a módosításokat. Ha azonban betölt egy adathalmazt úgy, hogy egy másik adathalmazt egyesít, akkor manuálisan kell véglegesítenie a módosításokat.

    Megjegyzés:

    Az Fill metódus meghívásakor megakadályozhatja, hogy az adapter automatikusan véglegesítse a módosításokat, ha az adapter AcceptChangesDuringFill tulajdonságát false értékre állítja. Ha be van állítvafalse, akkor a RowState kitöltés során beszúrt sorok értéke Added-re van állítva.

  • Miután adathalmaz-módosításokat küldött egy másik folyamat számára, például egy XML-webszolgáltatáshoz.

    Figyelmeztetés

    Ha így véglegesíti a módosítást, az törli a módosítási információkat. Ne véglegesítse a módosításokat, amíg el nem végezte azokat a műveleteket, amelyekhez az alkalmazásnak tudnia kell, hogy milyen módosítások történtek az adathalmazban.

Ez a módszer a következőket hajtja végre:

  • Beírja egy Current rekord verzióját a Original verziójába, és felülírja az eredeti verziót.

  • Eltávolítja azokat a sorokat, ahol a RowState tulajdonság be van állítva Deleted.

  • RowState Egy rekord tulajdonságát a következőre Unchangedállítja be: .

A AcceptChanges módszer három szinten érhető el. Meghívhatja egy DataRow objektumon, hogy csak az adott sor módosításait véglegesítse. Azt is meghívhatja egy DataTable objektumon, hogy véglegesítse a tábla összes sorát. Végül meghívhatja az objektumon, hogy véglegesítse az DataSet adathalmaz összes táblájának összes rekordjában a függőben lévő módosításokat.

Az alábbi táblázat azt ismerteti, hogy mely módosítások lesznek véglegesítettek a metódus által meghívott objektum alapján:

Metódus Eredmény
System.Data.DataRow.AcceptChanges A módosítások csak az adott sorban lesznek véglegesítettek.
System.Data.DataTable.AcceptChanges Az adott tábla összes sorában véglegesítették a módosításokat.
System.Data.DataSet.AcceptChanges Az adathalmaz összes táblájának összes sorában a módosítások véglegesítve lettek.

Megjegyzés:

Ha egy TableAdapter Fill metódus meghívásával tölt be egy adathalmazt, nem kell explicit módon elfogadnia a módosításokat. Alapértelmezés szerint a Fill metódus meghívja a AcceptChanges metódust, miután befejeződött az adattábla feltöltése.

Egy kapcsolódó metódus visszavonja a módosítások hatását úgy, RejectChangeshogy visszamásolja a Original verziót a Current rekordok verziójába. A(z) RowState minden rekordot visszaállít erre: Unchanged.

Adatellenőrzés

A validáció hozzáadására gyakran szükség van annak érdekében, hogy ellenőrizzük, az alkalmazás adatai megfelelnek-e azoknak a folyamatoknak a követelményeinek, amelyekhez átadásra kerülnek. Ez magában foglalhatja a felhasználó űrlapon való bejegyzésének helyességét, egy másik alkalmazás által az alkalmazásnak küldött adatok ellenőrzését, vagy akár azt is, hogy az összetevőn belül kiszámított adatok az adatforrás és az alkalmazás követelményeinek korlátai közé tartoznak.

Az adatok többféleképpen is érvényesíthetők:

  • Az üzleti rétegben adjon hozzá kódot az alkalmazáshoz az adatok ellenőrzéséhez. Az adathalmaz egy olyan hely, ahol ezt megteheti. Az adatkészlet a háttérbeli érvényesítés néhány előnyét biztosítja, például az oszlop- és sorértékek változásakor bekövetkező változások ellenőrzésének lehetőségét. További információ: Adathalmazok adatainak ellenőrzése.

  • A bemutató rétegben úgy, hogy érvényesítést adunk az űrlapokhoz. További információ: Felhasználói bevitel ellenőrzése a Windows Formsban.

  • Az adatok háttérrendszerében a folyamat az adatok adatforrásnak – például egy adatbázisnak – történő küldését jelenti, és annak biztosítását, hogy az adatforrás elfogadhassa vagy elutasíthassa az adatokat. Ha olyan adatbázissal dolgozik, amely kifinomult eszközökkel rendelkezik az adatok ellenőrzéséhez és a hibainformációk megadásához, ez praktikus módszer lehet, mivel az adatokat attól függetlenül ellenőrizheti, hogy honnan származik. Előfordulhat azonban, hogy ez a megközelítés nem felel meg az alkalmazásspecifikus érvényesítési követelményeknek. Emellett az adatforrás érvényesítési adatainak ellenőrzése számos körúttal járhat az adatforráshoz, attól függően, hogy az alkalmazás hogyan segíti elő a háttérrendszer által kiváltott érvényesítési hibák megoldását.

    Fontos

    Ha adatparancsokat használ olyan CommandType tulajdonsággal, amely Text-re van állítva, gondosan ellenőrizze az ügyfél által küldött adatokat, mielőtt továbbítja azokat az adatbázisnak. A rosszindulatú felhasználók megpróbálhatnak módosított vagy további SQL-utasításokat küldeni (injektálni) annak érdekében, hogy jogosulatlan hozzáféréshez vagy az adatbázis károsodásához jussanak. A felhasználói adatok adatbázisba való átvitele előtt mindig ellenőrizze, hogy az adatok érvényesek-e. Ajánlott mindig paraméteres lekérdezéseket vagy tárolt eljárásokat használni, ha lehetséges.

Frissítések továbbítása az adatforrásba

Miután módosította az adathalmazt, továbbíthatja a módosításokat egy adatforrásnak. Ezt leggyakrabban úgy teheti meg, hogy meghívja a TableAdapter (vagy adatadapter) Update metódusát. A metódus végighalad egy adattábla minden rekordjában, meghatározza, hogy milyen típusú frissítésre van szükség (frissítés, beszúrás vagy törlés), ha van ilyen, majd futtatja a megfelelő parancsot.

Tegyük fel, hogy az alkalmazás egyetlen adattáblát tartalmazó adathalmazt használ, amely a frissítések létrehozásának módját szemlélteti. Az alkalmazás két sort kér le az adatbázisból. A lekérés után a memóriában lévő adattábla a következőképpen néz ki:

(RowState)     CustomerID   Name             Status
(Unchanged)    c200         Robert Lyon      Good
(Unchanged)    c400         Nancy Buchanan    Pending

Az alkalmazás Nancy Buchanan állapotát "Előnyben részesített" értékre módosítja. A módosítás eredményeként az adott sor tulajdonságának RowState értéke Unchanged-ról Modified-ra változik. Az első sor tulajdonságának RowState értéke megmarad Unchanged. Az adattábla így néz ki:

(RowState)     CustomerID   Name             Status
(Unchanged)    c200         Robert Lyon      Good
(Modified)     c400         Nancy Buchanan    Preferred

Az alkalmazás most meghívja az Update adathalmaz adatbázisba való továbbításának metódusát. A metódus egymás után vizsgálja meg az egyes sorokat. Az első sor esetében a metódus nem továbbít SQL-utasítást az adatbázisnak, mert ez a sor nem változott, mivel eredetileg az adatbázisból lett beolvasva.

A második sorban azonban a Update metódus automatikusan meghívja a megfelelő adatparancsot, és továbbítja az adatbázisba. Az SQL-utasítás konkrét szintaxisa az alapul szolgáló adattár által támogatott SQL dialektusától függ. A továbbított SQL-utasítás alábbi általános jellemzői azonban figyelemre méltóak:

  • A továbbított SQL-utasítás egy UPDATE utasítás. Az adapter tudja, hogy a UPDATE utasítást kell használnia, mert a RowState tulajdonság értéke Modified.

  • A továbbított SQL-utasítás tartalmaz egy WHERE záradékot, amely azt jelzi, hogy az UPDATE utasítás célja az a sor, ahol CustomerID = 'c400'. Az utasítás ezen része SELECT megkülönbözteti a célsort az összes többitől, mivel a CustomerID céltábla elsődleges kulcsa. A záradék információi a WHERE rekord eredeti verziójából származnak (DataRowVersion.Originalabban az esetben, ha a sor azonosításához szükséges értékek megváltoztak).

  • A továbbított SQL-utasítás tartalmazza a SET záradékot a módosított oszlopok új értékeinek beállításához.

    Megjegyzés:

    Ha a TableAdapter UpdateCommand tulajdonsága egy tárolt eljárás nevére lett beállítva, az adapter nem hoz létre SQL-utasítást. Ehelyett meghívja a tárolt eljárást a megfelelő paraméterekkel.

Paraméterek átadása

Általában paraméterekkel adja át az adatbázisban frissíteni kívánt rekordok értékeit. Amikor a TableAdapter Update metódus egy utasítást UPDATE futtat, ki kell töltenie a paraméterértékeket. Ezeket az értékeket a Parameters gyűjteményből szerzi be a megfelelő adatparancshoz – ebben az esetben a UpdateCommand TableAdapter objektumához.

Ha a Visual Studio eszközeivel létrehozott egy adatadaptert, az UpdateCommand objektum az utasításban szereplő paraméterek helyőrzőinek megfelelő paraméterek gyűjteményét tartalmazza.

Az System.Data.SqlClient.SqlParameter.SourceColumn egyes paraméterek tulajdonsága az adattábla egy oszlopára mutat. Például a SourceColumn tulajdonság és a au_id valamint Original_au_id paraméterek arra az adattáblában található oszlopra vannak beállítva, amely a szerző azonosítóját tartalmazza. Amikor az adapter Update metódusa fut, beolvassa a szerzőazonosító oszlopot a frissítendő rekordból, és felhasználja az értékeket az utasítás kitöltéséhez.

UPDATE Egy utasításban meg kell adnia az új értékeket (a rekordba írandó értékeket) és a régi értékeket is (hogy a rekord az adatbázisban található legyen). Ezért minden értékhez két paraméter tartozik: egy a SET záradékhoz és egy másik a WHERE záradékhoz. Mindkét paraméter beolvassa a frissített rekord adatait, de a paraméter SourceVersion tulajdonsága alapján az oszlop értékének különböző verzióit kapják meg. A záradék paramétere SET az aktuális verziót kapja meg, a záradék paramétere WHERE pedig az eredeti verziót.

Megjegyzés:

A gyűjteményben Parameters értékeket beállíthat a kódban, amelyet általában az adatadapter RowChanging eseményéhez tartozó eseménykezelőben végezne.