Munka nélküli adatokat, ado
Denis Kondratyev
visualdesign.ru
ADO.NET technológia, ellentétben elődei, ADO és az OLE DB, került kifejlesztésre kifejezetten a webes alkalmazások, ahol nincsenek tartós kapcsolatot az adatbázissal. Hagyományos munka adatok ADO.NET alapul a következő séma szerint: a csatlakozás csatlakozás, akkor megnyílik az Open, hozzon létre egy Command objektumot parancsot magában SQL parancsot, akkor kerül végrehajtásra, és a kapcsolat, akkor zárva van. Ez a megközelítés biztosítja a hozzáférést a in-line lekérdezés eredményét. Ie olvas adatokat egy DataReader, akkor nem ugrik át néhány bejegyzés, vagy térjen vissza az előző. Flow-hozzáférés a legjobb teljesítményt.
ADO.NET célja az volt, hogy elérjük az adatokat anélkül, hogy valódi kapcsolat az adatbázissal. Ebben az esetben minden adat RAM-ban tárolja. Munka adatok ADO.NET le útján tér System.Data osztály nevét.
A legtöbb Wyżne osztályban, amikor dolgozik le adatokat - a DataSet. Miután a kapott lekérdezés eredmények felhasználásával DataAdapter tárgy és tárolt DataSet „e, a kapcsolatot az adatbázis és a tárgy DataSet megszűnik. Változások a DataSet nem érintik az adatbázisba, és fordítva. DataSet osztály tartalmaz egy sor olyan DataTable táblák és a táblák közötti kapcsolatok DataRelation. DataTable osztály tartalmaz egy sor a DataRow, DataColumn oszlopban az asztalt, és beállítja ChildRelations ParentRelations közötti kapcsolatok oszlopokban különböző adatbázis táblákat. DataRow osztály magában tájékoztatás a sort a táblázatban és a Törölt állapotsor, módosított, az új és a változatlan. Class korlátozás használják integritásának megőrzése az adatok a táblázatokban.
Munka előnyeit lekapcsolt adatok:
1. nem igényel állandó kapcsolatot az adatbázis, ami szükséges, például a webes alkalmazások számára;
2. megkönnyíti a létrehozását többszintű alkalmazások. Ha az alkalmazás hozzáfér az adatbázishoz a DAL szintű tárgyak, üzleti objektumok BLL átadhatja DataSet. Frissítés az adatbázishoz is keresztül kell továbbítani DataSet;
3. megkönnyítette rendezés, keresés, szűrés, és a navigációs adatok;
4. megkönnyítette a munka relációs adatokkal;
5. lehetőség van a cache a változásokat. DataSet objektum lehetővé cache változtatásokat, majd a DataAdapter át minden az adatbázisban változtatásokat 1 alkalommal;
6. Integráció az XML. A tartalom a DataSet tölthető, és mentett egy XML dokumentum.
A DataSet objektum
Az alábbiakban egy példa segítségével DataSet objektumot. Az összes példa a cikkben használja a Northwind adatbázist DB MS SQL Server.
stringconn = "Provider = SQLSQL; Data Source = (helyi) \\ NetSDK; InitialCatalog = Northwind; Trusted_Connection = Igen";
húr query = "SELECT CustomerID, CompanyName, ContactName, Telefon ügyfelektől";
SqlDataAdapter da = új SqlDataAdapter (lekérdezés, conn);
DataSet DS = új DataSet ();
da.Fill (ds, "fogyasztók");
Először hozzon létre egy connection string, és az SQL adatbázis-lekérdezések adatokat lekérdezni. DataAdapter helyezi a lekérdezés eredményét egy megfelelő táblázatban DataTable található a DataSet. Kitöltés túlterhelve módszer lehet helyezni közvetlenül adatokat és DataTable. Egy asztal, akkor ismételten hívja a módszer Fill, azonban, ha hívja a kitöltés eljárás DataSet nélkül pontosan megadják a tábla nevét, az adatok átkerülnek a különböző táblák (például „asztal”, „Table1”, „2. táblázat”). Hozzáférni az adatokhoz, a tábla olyan sorok visszaadó tulajdonság egy sor DataRow tárgyak
DataTable table = ds.Tables [0];
DataRow sor = table.Rows [0];
Console.WriteLine ( "Rendeléskód:" + row [ "Rendeléskód"]);
Console.WriteLine ( "CustomerID:" + row [ "CustomerID"]);
Egy DataRow van Besorolás visszaadó tulajdonság a tartalmát egy adott területen. Akkor adja meg a nevét a területen a példa kód, vagy egy egész szám megfelel a sorszáma az oszlop. Ha keres az index adatok kicsit vissza gyorsabban, mint ha keressük a nevét az oszlop.
Tartalmának megváltoztatása DataTable
NewRow () módszer létezik, hogy egy új sort a táblához, amely létrehoz egy új objektumot a DataRow, de nem adja hozzá a rekordot a táblához. Field az új rekordot beállított alapértelmezett értékeket vagy Null, ha nincs érték az alapértelmezett beállítás.
. DataRow sor = ds.Tables [ "fogyasztók"] NewRow ();
row [ "CustomerID"] = "Vasya";
sorban [ "Company"] = "Company";
sorban [ "ContactName"] = "John Doe";
sorban [ "Telefon"] = "11-22-33";
ds.Tables [ "fogyasztók"] Rows.Add (sor) .;
Van egy másik módja, hogy adjunk rekordokat a táblázatban - LoadDataRow () metódust. Az első paraméter az ez a módszer - egy tömb az értékek, az elemeit, amelyek megfelelnek a táblázat oszlopai. Második - ez lehetővé teszi, hogy ellenőrizzék az érték az új rekord RowState tulajdon. Ha át false az értéke az ingatlan bekerül, valamint azzal a kiegészítéssel, egy új bejegyzés hozzáadása módszer.
Szerkesztése meglévő rekord az alábbiak szerint:
DataRow sor = ds.Tables [ "fogyasztók"] [0];
sorban [ "ContactName"] = "John Doe";
vagy ItemArray módszer:
Egy bejegyzés törléséhez meg kell hívni DataRow.Delete () metódust. Ugyanakkor távoli felvétel valójában nem távolítjuk el a DataTable, és meg van jelölve törlésre - ez RowState tulajdonság értéke törölve. Ha hívása előtt Delete érték RowState adunk, totolko ebben az esetben a sor törlésre kerül a táblázatban.
Használata oszlopok autoincrement
Támogatására oszlopok automatikus értéknövekedés a DataColumn van egy olyan tulajdonsága AutoIncrement, AutoIncrementSeed és AutoIncrementStep. Ahhoz, hogy hozzon létre egy automatikusan növekvõ DataColumn oszlop AutoIncrement kell állítani a tulajdonságot true értékre. A számláló értéke indul AutoIncrementSeed (ha az nem sérti az adatok helyességét a táblázatban), és az értéknövekedés AutoIncrementStep. Mert oszlopok auto-növekmény ajánlott beállítani ReadOnly tulajdonságot true értékre. Az alábbiakban egy példa a behelyezés oszlopban asztal autoincrement
DataColumn oszlop = table.Columns.Add ( "CustomerID", typeof (Int32));
column.AutoIncrement = true;
column.AutoIncrementSeed = 1;
column.AutoIncrementStep = 1;
Ha azt tervezi, hogy lerombolja a változásokat az adatbázisba DataAdapter.Update (), akkor ajánlott a tulajdonságokat és AutoIncrementSeed AutoIncrementStep értéke -1. Ez biztosítja, hogy ADO.NET generál egy címkét érték, amely nem szerepel az adatbázisban. Amikor hívja az Update módszert az adatbázisban teszi egyedi értékeket.
Munka a DataSet a Visual Studio .NET környezetben,
DataSet objektumok egyaránt létrehozhatja programozott és a Visual Studio környezetben. A második esetben a Data fülre a Toolbox. Először meg kell, hogy húzza az interneten, vagy a win-alakú objektum SqlDataAdapter.

Ezután a varázsló, hogy hozzon létre egy új kapcsolatot az adatbázist a Northwind adatbázist, és olyan módon, hogy az adatbázis eléréséhez a «használat SQL». Ezután válassza ki a Vevők táblában, és jelöljük az összes oszlopot a táblázatban.

Ismételje meg az eljárást a Rend asztal, egy kész kapcsolatot. Ezután jobb klikk a panelen létrehozott DataAdapter „s válassza ki a helyi menüből generálása DataSet.

Mark a két DataAdapter, majd az OK gombra.

Hozzáadott DataSet objektum jelenik meg a panel elemek. Van hozzá egy úgynevezett DataSet erősen típusos (a gépelt adatbázisba), amiről beszélnek később. adatstruktúra megtalálható a létrehozott fájl kiterjesztését xsd.
Munka relációs adatok
Bízza a relációs adatok felhasználásával DataRelation objektum osztály, kötőanyagok oszlop DataColumn DataTable két asztal. Akkor hozzon létre egy ilyen objektum a következők szerint:
ds.Relationships.Add (új DataRelation ( "CustomersOrders", ds.Tables [ "fogyasztók"] Oszlopok [ "CustomerID"], ds.Tables [ "parancsok"] Oszlopok [ "CustomerID"]) ..;
Ha azt szeretnénk, hogy meghatározzuk azt az arányt, amely a több oszlopot kell használni a kivitelező, hogy vesz egy sor DataColumn:
DataTable tblParent = ds.Tables [ "ParentTable"];
DataColumn [] colsParent = új DataColumn [];
DataTable tblChild = ds.Tables [ "ChildTable"];
DataColumn [] colsChild = új DataColumn [];
ds.Relationships.Add (új DataRelation ( "szülő-gyerek", colsParent, colsChild));
Munka kapcsolódó adatok
A fő alkalmazási DataRelation célja, hogy keressen kapcsolódó információkat. Azonban DataRelation tárgy maga nem rendelkezik ezzel a funkcionalitását, azt valósul DataRow osztály módszerek: GetChildRow (), GetParentRow () és GetParentRows ().
Kereséséhez gyermek bejegyzések alkalmazott módszer GetChildRow () az adott objektum DataRow. Ő továbbított nevét DataRelation objektum, amely a kapcsolatot. Ez a módszer visszaadja a gyermek rekordok tömb DataRow tárgyakat.
DataRow sor = ds.Tables [ "fogyasztók"] sor [0] .;
foreach (DataRow rowOrder a row.GetChildRows ( "CustomersOrders"))
Console.WriteLine (rowOrder [ "Rendeléskód"] + rowOrder [ "ORDERDATE"] + "\ n");
Keressen egy szülő rekord használatával DataRelation lehetséges módszer DataRow.GetParentRow ().
DataRow rowOrder = ds.Tables [ "parancsok"] sor [0] .;
Console.WriteLine ( "\ t" + rowOrder.GetParentRow ( "CustomersOrders") [ "ContactName"] + "\ n");
Abban az esetben, a kapcsolat „egy a sok”, hogy megtalálja a szülő rögzíti egy meghatározott DataRow tárgy lehet a módszer GetParentRows (), és a fogadó nevét a kapcsolatot, és adja vissza egy tömbben eredeti objektumok.
Hozzáadása DataRelation tárgy Visual Studio .NET
Hozzáadni DataRelation kapcsolat a DataSet erősen típusos el kell menni, hogy az adatstruktúra kattintva a fájl kiterjesztése az XSD, amely meghatározza a szerkezet a DataSet. Ha rákattint a szülő DataTable kell közvetlenül a helyi menüből válassza a Hozzáadás / Új kapcsolat.

Az Edit kapcsolat párbeszédpanelen adja meg a szülő és a gyermek tárgyakat.

Az OK gombra kattintva az XML sheme tervező grafikus ábrázolása jelenik DataRelation - összekötő vonal a két objektum.
Keresés bejegyzések
Mert lekérdezések az adatbázis gyakran szükség van, hogy megtalálja a rekordot az elsődleges kulcs. Ahhoz, hogy megtalálja a rekordok DataTable ott DataRowCollection.Find () metódust.
table.PrimaryKey = új DataColumn [];
DataRow sor = tbl.Rows.Find ( "Vasya");
ha (sor == null)
Console.WriteLine ( "A rekord nem található");
más
Console.WriteLine (sor [ "CompanyName"]);
Ha az elsődleges kulcs áll, több oszlopot, majd a Find () metódus, akkor át egy tömb tárgyak.
Hogy keressen egy tetszőleges SQL lekérdezések DataTable egy Find () metódust. Például így mindazok nevét a fogyasztók, akik az Ufa, akkor használd ezt a kódot
DataRow [] sorok = table.Select ( "City = 'Ufa'");
foreach (DataRow sor sorokban)
Console.WriteLine (sor [ "CompanyName"] + "\ n");
Ha kell, hogy visszatérjen az adatok már válogatni, akkor a túlterhelt változata ezt a módszert. Ez szimulálja a szakasz SQL ORDER BY lekérése.
DataRow [] sorok = table.Select ( "City = 'Ufa'", "CompanyName ASC");
Munka DataSet objektumok erősen típusos
Mi már korábban létrehozott DataSet objektum erősen típusos. Nézzük meg, mi új funkciói a beírt DataSet.
Bejegyzés hozzáadása
Minden osztály, amelyek megfelelnek a DataTable a DataSet, lehetővé teszi, hogy új bejegyzéseket kétféleképpen. Új módszer [tábla_neve] Row () visszatér egy új sort a táblázatban:
DataSetTest DS = új DataSetTest ();
DataSetTest.CustomersDataTable tblCustomers = ds.Customers;
DataSetTest.CustomersRow rowCustomer = tblCustomers.NewCustomersRow ();
rowCustomer.CustomerID = "Vasya";
rowCustomer.CompanyName = "társaság";
rowCustomer.ContactName = "John Doe";
rowCustomer.Phone = "11-22-33";
tblCustomers.AddCustomersRow (rowCustomer);
A másik út - az, hogy az Add [table_name] Row () metódus, hogy vesz egy sor tárgyak megfelelő rekordmezők:
DataSetTest DS = új DataSetTest ();
DataSetTest.CustomersDataTable.AddCustomersRow ( "Vasya", "Cég", "John Doe", "11-22-33");
rekord keresése
Keresés rekordok a táblázatban is megváltozott. Például, hogy keressen a rendelés adatai táblázatban összetett kulcsokat volt egy eljárás a következő módszer
DataSetTest.Order_DetailRow = tblDetails.FindByOrderIDProductID (112233, 456);
Szintén gépelt DataSet támogató orosz betűk neveit és asztali területeken.
ds.Statistika.AddStatistikaRow (15,9, a "társaság", true);
Transzfer az adatbázis frissítések
Át a változásokat az adatbázisba egy DataAdapter. az egyik a három lehetőség lehet használni, hogy hozzon létre egy logikai adatbázis frissítések:
1. kézzel beállítani a DataAdapter fejlesztés során;
2. Az CommandBulder tárgy futási időben;
3. A fejlesztés során DataAdapter varázslót.
Kézi konfiguráció DataAdapter
DataAdapter 3 tulajdonságai továbbítására változásokat az adatbázisba: InsertCommand, UpdateCommand és DeleteCommand. Az értékek ezeket a tulajdonságokat kell meghatározni, mielőtt a módszer hívás DataAdapter.Update () figyelembe véve, milyen változások történtek a DataSet. Amikor az Update () metódus hozzáfűzi, frissítések vagy töröl egy sort a táblázatban, ez okozza a megfelelő parancsot.
Ha során a tevékenységét már csak hozzá egy sort a táblázatban, majd meg kell adnia csak az érték InsertCommand. Az alábbiakban a kód a helyzet:
húr conn = "Provider = SQLSQL; Data Source = (helyi) \\ NetSDK; eredetileg Catalog = Northwind; Trusted_Connection = Igen";
húr query = "SELECT CustomerID, CompanyName, ContactName, Telefon ügyfelektől"; SqlDataAdapter da = új SqlDataAdapter (lekérdezés, conn); DataSet table = new DataSet (); da.Fill (asztal, "fogyasztók");
// egy új sort a táblához
.
// létrehozása parancsot beszúrni új rekordok
query = "INSERT INTO ügyfelek (CustomerID, CompanyName, ContactName, telefon) VALUES (.)";
SqlCommand cmd = új SqlCommand (lekérdezés, conn);
SqlParameterCollection pc = cmd.Parameters; pc.Add ( "CustomerID", SqlType.Integer, 0, "CustomerID");
pc.Add ( "CompanyName", SqlType.String, 0, "CompanyName");
pc.Add ( "ContactName", SqlType.String, 0, "ContactName");
pc.Add ( "Telefon", SqlType.String, 0, "Telefon");
da.InsertCommand = cmd;
da.Update (táblázat);
Egy ilyen megközelítés is használható az átviteli frissül az adatbázis tárolt eljárások használatával. Tegyük fel, hogy a nevét, a tárolt eljárás, hogy egy új vevő spInsertCustomer. Aztán változtatni a kódot az alábbiak szerint:
OleDbCommand cmd = új OleDbCommand ( "spInsertCustomer", Conn);
cmd.CommandType = CommandType.StoredProcedure;
OleDbParameterCollection pc = cmd.Parameters;
pc.Add ( "CustomerID", SqlType.Integer, 0, "CustomerID");
pc.Add ( "CompanyName", SqlType.String, 0, "CompanyName");
pc.Add ( "ContactName", SqlType.String, 0, "ContactName");
pc.Add ( "Telefon", SqlType.String, 0, "Telefon");
A CommandBuilder
CommandBuilder generál SQL lekérdezések utalva az adatbázist metaadatokat táblázatok. Ahhoz, hogy a CommandBuilder előírja, hogy a következő feltételeket: 1. A lekérdezés az adatokat csak egy asztalon;
A 2. táblázat egy elsődleges kulcsot;
3. Az elsődleges kulcs a lekérdezés eredményét.
Az alábbiakban egy példa segítségével a CommandBuilder.
húr con = "Provider = SQLOLEDB; Data Source = (helyi) \\ NetSDK; InitialCatalog = Northwind; Trusted_Connection = Igen";
húr query = "SELECT Rendeléskód, ProductID, darabszám, egységár FROM [Order Részletek]";
OleDbDataAdapter da = új OleDbDataAdapter (strSQL, strConn);
OleDbCommandBuilder cb = új OleDbCommandBuilder (da);
da.InsertCommand = cb.GetInsertCommand ();
da.Update (TBL);
A Wizard adatok Adapter Configuration Wizard
Az egyik tervezett felhasználása a mester - létrehozása logikai frissíteni az adatbázist. A negyedik lépésben a varázsló a Speciális beállítások parancs megjelenít egy párbeszédpanelt, ahol megadhatja-e vagy sem, hogy hozzon létre parancsokat beszúrni, frissítése és törlése az adatbázist.

A harmadik lépésben a varázsló, megadhat egy módszere, amely frissítések az adatbázishoz: SQL lekérdezések segítségével egy meglévő tárolt eljárást vagy hozzon létre egy új tárolt eljárást. Nincs további lépéseket, hogy létrehozzon egy frissítést a logika nem szükséges.
