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.
Jegyzet
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.
A TableAdapter-összetevők egy adatkészletet töltenek ki az adatbázisból származó adatokkal egy vagy több megadott lekérdezés vagy tárolt eljárás alapján. A TableAdapters a hozzáadásokat, frissítéseket és törléseket is végrehajthatja az adatbázison, hogy megőrizze az adathalmazon végrehajtott módosításokat. Emellett olyan globális parancsokat is kiadhat, amelyek nem kapcsolódnak egy adott táblához.
Jegyzet
A Visual Studio tervezői TableAdapters-eket hoznak létre. Ha programozott módon hoz létre adathalmazokat, használja a DataAdapter .NET-osztályt.
A TableAdapter-műveletekkel kapcsolatos részletes információkért ugorjon közvetlenül az alábbi cikkek egyikére:
| Cikk | Leírás |
|---|---|
| TableAdapters- létrehozása és konfigurálása | Megtudhatja, hogyan hozhat létre és konfigurálhat TableAdapters-eket a tervezőkkel. |
| Paraméteres TableAdapter-lekérdezések létrehozása | Megtudhatja, hogyan engedélyezheti a felhasználók számára, hogy argumentumokat adjanak meg a TableAdapter-eljárásokhoz vagy lekérdezésekhez. |
| Az adatbázis közvetlen elérése a TableAdapterrel | Megtudhatja, hogyan használhatja a TableAdapters DbDirect metódusait. |
| Korlátozások kikapcsolása az adathalmaz kitöltése közben | Megtudhatja, hogyan dolgozhat idegenkulcs-korlátozásokkal az adatok frissítésekor. |
| TableAdapter funkcióinak kiterjesztése | Megtudhatja, hogyan adhat hozzá egyéni kódot a TableAdaptershez. |
| XML-adatok beolvasása adathalmazba | Megtudhatja, hogyan dolgozhat XML-adatokkal egy adathalmazban. |
A TableAdapter áttekintése
A TableAdapters tervező által létrehozott összetevők, amelyek egy adatbázishoz csatlakoznak, lekérdezéseket vagy tárolt eljárásokat futtatnak, és kitöltik a DataTable-t a visszaadott adatokkal. A TableAdapters az alkalmazás frissített adatait is visszaküldi az adatbázisba. A TableAdapteren annyi lekérdezést futtathat, amennyit csak szeretne, feltéve, hogy az a társított tábla sémájának megfelelő adatokat ad vissza. Az alábbi ábra bemutatja, hogyan használják a TableAdapters az adatbázisokat és a memóriában lévő egyéb objektumokat:
Bár a TableAdapters az Adatkészlet-tervezővel van kialakítva, a TableAdapter osztályok nem a DataSetbeágyazott osztályaiként jönnek létre. Ehelyett külön névterekben találhatók, amelyek az egyes adathalmazokra vonatkoznak. Ha például egy NorthwindDataSetnevű adatkészlettel rendelkezik, a DataTableNorthwindDataSet objektumaihoz társított TableAdapters a NorthwindDataSetTableAdapters névtérben található. Egy adott TableAdapter programozott eléréséhez deklaráljon egy új példányt a TableAdapter osztályhoz. Például:
NorthwindDataSet northwindDataSet = new NorthwindDataSet();
NorthwindDataSetTableAdapters.CustomersTableAdapter customersTableAdapter =
new NorthwindDataSetTableAdapters.CustomersTableAdapter();
customersTableAdapter.Fill(northwindDataSet.Customers);
Társított DataTable-séma
Amikor létrehoz egy TableAdapter-t, az elsődleges lekérdezés vagy tárolt eljárás használatával definiálja a TableAdapter társított DataTablesémáját. Ezt a kezdeti lekérdezést vagy tárolt eljárást a TableAdapter Fill metódusának meghívásával futtathatja, amely kitölti a TableAdapter társított DataTable. A TableAdapter fő lekérdezésében végrehajtott módosítások a társított adattábla sémájában jelennek meg. Ha például eltávolít egy oszlopot a fő lekérdezésből, az Adatkészlettervező a társított adattáblából is eltávolítja az oszlopot. Ha a TableAdapter további lekérdezései olyan SQL-utasításokat használnak, amelyek a fő lekérdezésben nem szereplő oszlopokat adnak vissza, az Adatkészlettervező megpróbálja szinkronizálni az oszlopmódosításokat a fő lekérdezés és a további lekérdezések között.
TableAdapter frissítési parancsok
A TableAdapter frissítési funkciója attól függ, hogy mennyi információ érhető el a TableAdapter varázslófő lekérdezésében. Azok a TableAdapterek például, amelyek úgy vannak konfigurálva, hogy több táblából (JOIN), skaláris értékekből, nézetekből vagy az összesítő függvények eredményeiből származó értékeket kérjenek le, kezdetben nem jönnek létre azzal a képességgel, hogy frissítéseket küldjenek vissza a mögöttes adatbázisba. Az InsertCommand, az UpdateCommand és a DeleteCommand tulajdonságokat azonban manuálisan is konfigurálhatja a Tulajdonságok ablakban.
TableAdapter-lekérdezések
A TableAdapters több lekérdezést is tartalmazhat a társított adattáblák kitöltéséhez. A TableAdapterhez annyi lekérdezést definiálhat, amennyit az alkalmazás igényel, mindaddig, amíg minden lekérdezés ugyanazt a sémának megfelelő adatokat ad vissza, mint a társított adattábla. Ez a képesség lehetővé teszi, hogy a TableAdapter különböző feltételek alapján különböző eredményeket töltsön be.
Ha például az alkalmazás tartalmaz egy ügyfélneveket tartalmazó táblát, létrehozhat egy lekérdezést, amely kitölti a táblát minden olyan ügyfélnévvel, amely egy adott betűvel kezdődik. Létrehozhat egy másik lekérdezést, amely az azonos államban lévő összes ügyfelet hozzáadja a táblához. Ha egy Customers táblát egy adott állapotú ügyfelekkel szeretne kitölteni, hozzon létre egy FillByState lekérdezést, amely az állapotérték paraméterét veszi figyelembe az alábbiak szerint: SELECT * FROM Customers WHERE State = @State. Futtassa a lekérdezést a FillByState metódus meghívásával, és adja meg a paraméter értékét, például: CustomerTableAdapter.FillByState("WA").
Azon lekérdezések hozzáadása mellett, amelyek a TableAdapter adattáblájával azonos sémából adnak vissza adatokat, skaláris (egyetlen) értékeket visszaadó lekérdezéseket is hozzáadhat. Egy lekérdezés, amely például az ügyfelek számát (SELECT Count(*) From Customers) visszaküldi, érvényes lehet egy CustomersTableAdapteresetében, még akkor is, ha a visszaadott adatok nem felelnek meg a tábla sémájának.
ClearBeforeFill tulajdonság
Alapértelmezés szerint minden alkalommal, amikor lekérdezést futtat egy TableAdapter adattáblájának kitöltéséhez, a rendszer törli a meglévő adatokat, és csak a lekérdezés eredményei töltődnek be a táblába. Ha össze szeretné adni vagy egyesíteni szeretné a lekérdezés által visszaadott adatokat egy adattábla meglévő adataihoz, állítsa a TableAdapter ClearBeforeFill tulajdonságát falseértékre. Függetlenül attól, hogy törli-e az adatokat, kifejezetten vissza kell küldenie a frissítéseket az adatbázisba, ha meg szeretné őrizni őket. Ezért mindenképpen mentse a táblában lévő adatok módosításait, mielőtt egy másik, a táblát kitöltő lekérdezést futtatna. További információ: Adatok frissítése TableAdapterhasználatával.
TableAdapter öröklés
A TableAdapters egy konfigurált DataAdapter osztály beágyazásával bővíti a standard adatadapterek funkcióit. Alapértelmezés szerint a TableAdapter örökli a Component osztályt, és nem adható át a DataAdapter osztályba. A TableAdapter DataAdapter osztályba való beírása InvalidCastException hibát eredményez. A TableAdapter alaposztályának módosításához adjon meg egy osztályt, amely a TableAdapter Component tulajdonságának osztályából származik az Adatkészlettervezőben.
TableAdapter metódusok és tulajdonságok
A TableAdapter osztály nem .NET típusú, ami azt jelenti, hogy nem keresheti meg az Objektumböngészőben vagy a referenciadokumentációban. A Visual Studio a tervezéskor hozza létre, amikor a korábban ismertetett varázslók egyikét használja. A Visual Studio által létrehozott TableAdapterhez hozzárendelt név annak a táblának a neve alapján történik, amellyel dolgozik. Ha például Ordersnevű adatbázisban lévő tábla alapján hoz létre TableAdaptert, a TableAdapter neve OrdersTableAdapterlesz. A TableAdapter osztálynevének módosításához használja az Név tulajdonságot az Adatkészlettervező Tulajdonságok ablakában.
A TableAdapter gyakran használt módszerei és tulajdonságai a következők:
| Tag | Leírás |
|---|---|
TableAdapter.Fill |
Feltölti a TableAdapter társított adattábláját a TableAdapter SELECT parancsának eredményeivel. |
TableAdapter.Update |
Visszaküldi a módosításokat az adatbázisnak, és egy egész számot ad vissza, amely a frissítés által érintett sorok számát jelöli. További információ: Adatok frissítése TableAdapterhasználatával. |
TableAdapter.GetData |
Új DataTable-t ad vissza, amely adatokat tartalmaz. |
TableAdapter.Insert |
Új sort hoz létre az adattáblában. További információ: Új rekordok beszúrása adatbázisba. |
TableAdapter.ClearBeforeFill |
Meghatározza, hogy az adattábla kiürítve van-e, mielőtt meghívja az egyik Fill metódust. |
TableAdapter frissítési módszer
A TableAdapters adatparancsokat használ az adatbázisból való olvasáshoz és íráshoz. Használja a TableAdapter kezdeti Fill (fő) lekérdezését a társított adattábla sémájának létrehozásához, valamint a InsertCommand metódushoz társított UpdateCommand, DeleteCommandés TableAdapter.Update parancsokat. Amikor meghív egy TableAdapter Update metódust, az a TableAdapter eredeti konfigurálásakor létrehozott utasításokat futtatja, és nem az TableAdapter Lekérdezéskonfiguráció varázslóval hozzáadott további lekérdezések egyike.
A TableAdapter használatakor az általában végrehajtott parancsokkal hatékonyan hajtja végre ugyanazokat a műveleteket. Ha például meghívja az adapter Fill metódusát, az adapter a SelectCommand tulajdonságában futtatja az adatparancsot, és egy adatolvasót (például SqlDataReader) használ az eredményhalmaz adattáblába való betöltéséhez. Hasonlóképpen, amikor meghívja az adapter Update metódusát, a megfelelő parancsot futtatja (a UpdateCommand, InsertCommandés DeleteCommand tulajdonságokban) az adattábla minden módosított rekordjára vonatkozóan.
Jegyzet
Ha a fő lekérdezés elegendő információt tartalmaz, a tervező alapértelmezés szerint létrehozza a InsertCommand, UpdateCommandés DeleteCommand parancsokat, amikor a tervező létrehozza a TableAdaptert. Ha azonban a TableAdapter fő lekérdezése több, mint egy tábla SELECT utasítás, előfordulhat, hogy a tervező nem tudja létrehozni ezeket a parancsokat. Ilyen esetben előfordulhat, hogy a TableAdapter.Update metódus futtatásakor hibaüzenet jelenik meg.
TableAdapter DbKözvetlenMetódusokGenerálása
Az InsertCommand, a UpdateCommandés a DeleteCommandmellett a TableAdapters a következő metódusokkal jön létre, amelyeket közvetlenül az adatbázison futtathat: TableAdapter.Insert, TableAdapter.Updateés TableAdapter.Delete. Ezeket a metódusokat közvetlenül az adatbázis adatainak kezeléséhez hívhatja meg. Ez azt jelenti, hogy a kódból meghívhatja ezeket az egyéni metódusokat ahelyett, hogy meghívja TableAdapter.Update a társított adattáblához függőben lévő beszúrások, frissítések és törlések kezeléséhez.
Ha nem szeretné létrehozni ezeket a direkt metódusokat, állítsa a TableAdapter GenerateDbDirectMethods tulajdonságát False értékre a Tulajdonságok ablakban. A TableAdapterhez hozzáadott további lekérdezések különálló lekérdezések, amelyek nem generálják ezeket a metódusokat.
A TableAdapter támogatása null értékű típusok esetén
A TableAdapters támogatja a null értékű típusok Nullable<T> és T?. További információ a Visual Basic null értékű típusairól: Null értékű típusok (Visual Basic). A C#-beli null értékű típusokról további információt a Nullható értéktípusok (C#)című témakörben talál.
TableAdapterManager-referencia
Alapértelmezés szerint a Visual Studio létrehoz egy TableAdapterManager osztályt egy kapcsolódó táblákat tartalmazó adathalmaz létrehozásakor. Az osztály létrehozásának megakadályozása érdekében módosítsa az adathalmaz Hierarchical Update tulajdonságának értékét falseértékre. Ha egy relációs táblát húz egy Windows-űrlap vagy WPF-lap tervezőfelületére, a Visual Studio deklarálja az osztály tagváltozóját. Ha nem használ adatkötést, manuálisan kell deklarálnia a változót.
Mivel a TableAdapterManager osztály nem .NET típusú, nem jelenik meg a referenciadokumentációban. A Visual Studio az adathalmaz-létrehozási folyamat részeként tervezési időben hozza létre.
Az alábbi táblázat a TableAdapterManager osztály gyakran használt metódusait és tulajdonságait sorolja fel:
| Tag | Leírás |
|---|---|
UpdateAll módszer |
Az összes adattáblából menti az összes adatot. |
BackUpDataSetBeforeUpdate tulajdonság |
Meghatározza, hogy létre kell-e hozni az adathalmaz biztonsági másolatát a TableAdapterManager.UpdateAllmethod.Booleanvégrehajtása előtt. |
táblázatnévTableAdapter tulajdonság |
Képviseli a TableAdaptert. A létrehozott TableAdapterManager tartalmaz egy tulajdonságot minden felügyelt TableAdapter esetében. A Vevők és rendelések táblával rendelkező adatkészletek például olyan TableAdapterManagerrel jönnek létre, amely CustomersTableAdapter és OrdersTableAdapter tulajdonságokat tartalmaz. |
UpdateOrder tulajdonság |
Szabályozza az egyes beszúrási, frissítési és törlési parancsok sorrendjét. Állítsa be ezt a tulajdonságot a TableAdapterManager.UpdateOrderOption számbavétel egyik értékére.Alapértelmezés szerint a UpdateOrderInsertUpdateDeleteértékre van állítva, ami azt jelenti, hogy a beszúrások, frissítések és törlések végrehajtása az adathalmaz összes táblájában történik. |
Biztonság
Amikor adatparancsokat használ, amelyek CommandType tulajdonsága Text-re van beállítva, gondosan ellenőrizze az ügyféltől kapott adatokat, mielőtt azokat az adatbázisnak továbbítaná. A rosszindulatú felhasználók megpróbálhatnak módosított vagy extra SQL-utasításokat küldeni (injektálni) az adatbázishoz való jogosulatlan hozzáférés érdekében. A felhasználói adatok adatbázisba való átvitele előtt mindig ellenőrizze, hogy az adatok érvényesek-e. Ajánlott eljárás paraméteres lekérdezések vagy tárolt eljárások használata, ha lehetséges.