Cikk DataReader és adathozzáférés
DataReader és adathozzáférés
A következő cikk ebben a sorozatban nézzük meg az első tárgy, amely lehetővé teszi számunkra, hogy hozzáférést tárolt adatok relációs adatbázisban, - DataReader.
Mivel az irányító és DataReader szorosan kapcsolódnak ahhoz, hogy az utolsó cikket, azt említi halad meg. Most itt az ideje, hogy megismerjék az DataReader részletesebben.
Mint korábban említettük, ha az eredmény az SQL parancsok révén Command adatok halmaza, ennek eredményeként az eljárás Command.ExecuteReader létre a DataReader. amelyen keresztül elérheti az eredményt.
Lényegét tekintve ez egy DataReader bejegyzések folyam csak olvasható, amelyben meg lehet mozgatni csak előre, szekvenciálisan rekordot rögzíteni. A velük való munka nagyon hasonló adatokat olvas egy szekvenciális fájlban.
Az olvasási folyamat bármikor a kliens számítógép memóriája az egyetlen a jelenlegi rekord. Ezért DataReader nagyon kevés memória az ügyfél, akkor is, ha a teljes minta méretét adatok nagy.
Természetesen az ilyen megtakarítások mindig van valami fizetni. Ebben az esetben az ár folyamatosan a kapcsolatot a adatforrás, amely létrehoz egy a hálózat terhelése, és azt is megköveteli egy adatbázis szerver elosztásának bizonyos forrásokat, hogy támogassa a kapcsolatot a kliens (ha az adatforrás SQL-szerver).
Ezek a funkciók DataReader elő bizonyos korlátozásokat módszerek alkalmazása az objektumot. Azonban sok alkalmazás, amelyek ezt a funkciót is elég. Például, ha azt szeretnénk, hogy válasszon ki néhány adatot az adatbázisból, és megjeleníti azt a jelentést a lista formájában, a DataReader meglehetősen sikeresen megbirkózni ezzel a problémával, nem töltődik a memória a kliens számítógép, akkor is, ha kell kezelni a jelentős mennyiségű adat.
DataReader támogatást a szerver oldalon Ha már foglalkozott korábban adatbázisok via ADO, OLE DB vagy az ODBC, nem kétséges, te ismeri a koncepció a kurzort.
Az ADO.NET, már nyilvánvalóan nem felel meg a koncepciót a kurzor, mivel nincs Recordset. amelyet közvetlenül kapcsolódik hozzá. Ugyanakkor az alsó szinten, természetesen, az elv az interakció az adatbázis-kiszolgálók nem változik, és a kurzor még mindig jelen van, annak ellenére, hogy el van rejtve a programozó.
Mint azt sejteni lehet, DataReader hozzáférni az adatokhoz a kurzor csak olvasható előre oldalán a szerver (csak olvasható csak előre szerver oldali kurzor).
Között DataReader módszerek nem talál tervezők. Így, hogy önállóan hozzon létre egy objektumot nem sikerül. Azonban egy ilyen létesítmény még mindig sok értelme, mert akkor is kell, hogy töltse ki az adat objektum a forrás, és még mindig nem férhetnek hozzájuk.
DataReader létre hívja a tárgy eljárás ExecuteReader Command:
OleDbDataReader myReader = myCommand.ExecuteReader (CommandBehavior.CloseConnection);
Ezt követően meg lehet kezdeni dolgozni az objektumot.
A sorok száma megváltozott, ki vagy törölt eredményeként egy SQL utasítást.
Mélység van értelme, ha egy karakterlánc tartozik egy sor hierarchikus (mint a OLE DB, akkor érheti nemcsak a relációs adatbázisok). MS SQL Server nem támogatja a hierarchiát, így SqlDataReader.Depth mindig visszatér 0.
Keresztül pont elérheti az érték az oszlop adatok, mint a jelenlegi rekord számát és nevét. Mindkét formátum fogadható el:
int i = (int) myReader.Item [1];
sztring s = (karakterlánc) myReader.Item [Név];
(Persze, feltéve, hogy az átváltás típusát szabályok nem sérülnek).
Mozgatja a következő rekordra
Close - kilép DataReader. Ügyeljen arra, hogy hívja ezt a módszert, amikor befejezte a tárgy, különben a Connection objektum Oates elérhetetlenné egyéb műveletek az adatforrás.
GetDataTypeName és GetFieldType lehet meghatározni a nevét az adatok típusát és a tényleges adatok típus oszlop egy előre meghatározott szám.
GetName és GetOrdinal kiegészítik egymást. Az első lehetővé teszi, hogy meghatározza az oszlop nevét a száma, és a második, illetve a nevében az oszlop számát.
IsDBNull valójában az egyetlen módja annak, hogy meghatározza, mi alatt az oszlop üres, mert az adatok között típus .NET Framework típus elérhető típushoz bemutatót.
NextResult használt menni a következő adathalmazt, ha az SQL utasítás vagy tárolt eljárás visszatér eredményeként több adathalmaz. Kezdetben a DataReader van elhelyezve az első szettet, a lehetőséget az alábbi szükséges egyértelmű átmenet.
Read szükséges következetes előre mentén az adatbázisba. Kezdetben után azonnal DataReader aktuális mérési pozíció beállítása előtt az első sorban az adathalmaz, ezért használat előtt fel kell hívni a Read adatokat.
Amellett, hogy ezek a módszerek, DataReader is tartalmaz, módszerek állnak rendelkezésre az értékek az oszlopok, hogy vissza értéket a megadott típusú. Az E módszerek alkalmazásával triviális, és egyértelmű a nevét, úgyhogy csak sorolja fel a táblázatban hivatkozás:
Rajtuk kívül a SqlDataReader végrehajtását is magában foglalja egy sor elemfüggvényei bizonyos típusú MS SQL Server. Mert alapvetően megkettőzése közös adattípusok, nem látok okot arra, hogy lakjanak itt a figyelmet.
Az utóbbi cikkben kénytelenek voltunk nélkülözni példáját fut a program, mert nem a megfelelő eszközökkel, hogy hozzáférjen a lekérdezés eredményét az adatbázisba. Most van itt az ideje, hogy megszilárdítsa a gyakorlatban a tanult készségek a tanulmány az anyag és az utolsó ezt a cikket. Létrehozunk egy egyszerű, de hiánytalan kérelem, amely kezdetben listáját jeleníti meg az országok, ahol az ügyfelek NORTHWIND hipotetikus vállalkozás, hív minket, hogy adja meg a nevét egy ország, majd megjelenít egy listát az ügyfelek, akik élnek az országban.
Természetesen sokkal könnyebb építeni ilyen alkalmazások számos varázslók, amelyek készen állnak, hogy megkönnyítsék a munkát, így pár kattintással létre egész szerkezet a kész kódot. Ahhoz azonban, hogy írja le a munka velük inkább hálátlan feladat, mert világosan közvetíteni szóval a mozgások sorrendje és a kattintás nem olyan egyszerű, és rendetlenséget a történetet hosszú sor screenshotok nem akar. Ezért egy példa egy konzolos alkalmazás, ahol másolatot minden releváns adat objektumokat hoz létre közvetlenül a felhasználás előtt szoftver. Bár ez kissé nehézkesebb, amikor alkalmazást fejleszteni, de egy ilyen kódot lehet használni, még azok is, akik nem tudják használni az IDE VS.NET, és arra kényszerülnek, hogy együttműködik a C # fordító a .NET-keretrendszer segítségével a parancssorban.
A lehetséges problémák elkerülése különböző kódolások cirill, minden konzol üzeneteket a program angol nyelven jelennek meg. Számuk kicsi, így remélem, hogy ez nem okoz nehézséget az olvasók, akik nyelvi nehézségek.
Annak ellenére, hogy az egyszerűség, a program tartalmaz mindent, amire szüksége van, hogy építsenek egy egyszerű nyilatkozatot az adatbázis tartalma: a kapcsolat létrehozásához kéri az adatokat (egyszerű és paraméterezhető), a kimeneti adatok, megtörve a kapcsolatot az adatforrás és a források felszabadításában.
using System;
használatával System.Data;
használatával System.Data.OleDb;
névtér DataReaderSample
osztály DataReaderSample
[STAThread]
static void Main (string [] args)
Console.WriteLine ( „Command DataReader Minta program \ n „) .;
// létrehozni és nyílt kapcsolat
húr strCnn = @ "Provider = microsoft.jet.oledb.4.0; Data Source = C: \ Program Files \ Microsoft Visual Studio \ VB98 \ NWIND.MDB";
OleDbConnection CNN = új OleDbConnection ();
cnn.ConnectionString = strCnn;
cnn.Open ();
// Létrehozunk Command
OleDbCommand cmd = új OleDbCommand ();
cmd.Connection = CNN;
// először válassza ki az országokban, ahol vannak ügyfelei
húr strCmd = "SELECT DISTINCT Ország ügyfelektől ORDER BY Country";
cmd.CommandText = strCmd;
cmd.CommandType = CommandType.Text;
OleDbDataReader rdr = cmd.ExecuteReader ();
// megjeleníti az országok listája
Console.WriteLine ( „Az országok listáját az ügyfelek élnek”);
míg a (rdr.Read ())
// használja az eredmény meg a sorszámot oszlopon
Console.WriteLine (rdr.GetString (0));
rdr.Close (); // ne felejtsük el, hogy zárja be a DataReader használat után!
Console.WriteLine ();
Console.Write ( „Válassza ki azt akarjuk, hogy a vásárlók listát:”);
karakterlánc ans = Console.ReadLine ();
// most próbálja meg felépíteni és futtatni egy lekérdezést egy paraméterrel
strCmd = "SELECT ContactName, CompanyName, ContactTitle ügyfelektől WHERE (Country =?)";
cmd.CommandText = strCmd;
OleDbParameter par = új OleDbParameter ();
par.OleDbType = OleDbType.VarWChar;
par.Value = ANS;
cmd.Parameters.Add (par);
rdr = cmd.ExecuteReader ();
Console.WriteLine ( "Az ügyfelek a" + ans + "jelentése:");
míg a (rdr.Read ())
// ebben az esetben a különböző felhasználási oszlop nevek az adatbázisban, hanem számuk
Console.WriteLine (rdr [ "ContactName"]. ToString () + ""
+ rdr [ "CompanyName"]. toString () + ""
+ . Rdr [ "ContactTitle"] toString ());
// kiadás erőforrások (bár azok automatikusan megszabadult a végén a program,
// még jobb szokott kifejezetten szabad őket használat után azonnal)
rdr.Close ();
cnn.Close ();