HyperLink
Bejelentkezés
E-mail: 
Jelszó: 





Skip Navigation Links
 

SQLDataReader osztály használata


Példaprogram letöltése

8414 bájt

Ebben a példában az SQLDataReader osztály használatát ismerhetjük meg részletesebben. Ez az osztály szükséges akkor, ha programból futtattunk például egy select lekérdezést egy SQLCommand osztályon keresztül és ennek eredményét szeretnénk elérni, felhasználni.

A példa kipróbálásához a ServerName, LoginName és Password ablakokba adja meg a szükséges adatokat, mellyel képes egy SQL szerverhez kapcsolódni. A mellékelt példához a Northwind példa adatbázist használjuk.
Az adatbázis kapcsolathoz egy SqlConnection osztályt használunk. A kapcsolat megnyitása után egy SqlQLCommand osztállyal futtatunk egy egyszerű select * from tablename lekérdezést, ahol a tablename értéke az aktuálisan kiválasztott elem a ListBox-ból.
Amikor e select-et futtatni szeretnénk az SqlCommand osztállyal, akkor annak ExecuteReader függvényét használjuk, mely egy SqlDataReader osztályt ad vissza.
      SqlDataReader dr = command.ExecuteReader();
Miután az ExecuteReader lefutott, akkor felhasználva az SQLDataReader osztály példányát képesek leszünk a lekérdezés eredményét kiolvasni.
Mellékelt példában feltöltünk egy ListView komponenst a kapott eredmény halmazzal. Ehhez első lépésként a táblázat fejlécét kell létrehozni, ami attól függ, hogy a lekérdezés eredményének hány oszlopa van. Ehhez egy ciklusra van szükségünk, mely végigmegy az első oszloptól az utolsóig. Az SqlDataReader osztály FieldCount property-éből megtudhatjuk, hogy hány oszlop van. Az eredmény mezőinek nevét a GetName függvény szolgáltatja, míg azok típusát a GetDataTypeName függvénnyel tudhatjuk meg. Mindkét függvény egy int paramétert vár, mellyel azt közöljük, hogy hányadik oszlop adataira vagyunk kíváncsiak.
        for (int i = 0; i < dr.FieldCount-1; i++)
        {
          listView1.Columns.Add(dr.GetName(i)+" ["+dr.GetDataTypeName(i)+"]", 100, HorizontalAlignment.Left);
        }
Ezek után elkezdhetjük az egyes rekordok kiolvasását. Ehhez egy while ciklust használunk. A ciklus addig tart, amíg minden rekordot ki nem olvastunk. Az SQLDataReader Read függvényét hívva, mindig a soron következő rekord adatait érhetjük el. A Read igaz értékkel tér vissza, ha még van olyan rekord melyet nem olvastunk. Ezt egyébként a HasMoreRows logikai típusú property vizsgálatával is eldönthetnénk.
        while (dr.Read())
        {
A cikluson belül a GetValues függvényt felhasználva kiolvassuk az adott rekord összes értékét egy object típusú tömbbe. Ennek a tömbnek minden eleme az adott rekord egy-egy mezőjét fogja tartalmazni. Lehetőségünk van arra is, hogy ne az összes, hanem csupán egy, általunk megadott mező értékét olvassuk. Ez esetben a GetValue függvényt kell használnunk. Itt paraméterként a kiolvasandó mező indexét kell megadni, valamint egy object típusú változót, melyben az adott mezőt kapjuk vissza.
          dr.GetValues(val);
Következő lépésként egy ciklust kezdeményezünk, mely a második mezőtől az utolsóig megy. Ebben a ciklusban állítjuk elő azt a sztring tömböt, pontosabban annak tartalmát, melyre majd a ListView komponens új elemének felvételekor lesz szükségünk. Mivel e komponensnél a Report nézetnél a SubItems-be adhatjuk meg a táblázatunk egyes értékeit, így ehhez először egy sztring tömböt kell feltöltenünk. A ciklust azért kezdjük a második mezőtől, mert az első mező értéke lesz a majd a ListView elemének értéke.
          for (int i = 0; i < dr.FieldCount-1; i++)
          {
Az SQLDataReader osztály IsNull függvényével ellenőrizhetjük, hogy az adott mező tartalmaz-e értékes adatot vagy sem. Amennyiben a függvény igaz értéket ad vissza, akkor az adott mező nem tartalmaz értéket.
            if (dr.IsDbNull(i))
            {
              s[i] = "------------";
            }
            else
            {
              s[i] = val[i].ToString();  
            }
Végül már csak annyi a teendő, hogy az új rekordot hozzáadjuk a ListView komponenshez.
          }
        listView1.Items.Add(new ListViewItem(s));       
     }
Utolsó lépésként pedig le kell zárnunk a Close függvény hívásával az SQLDataReader-t
        dr.Close();

Könyv
Ez a cikk megtalálható ebben a könyvben: C# Software Offline 2001 évkönyv 118. oldal

Felhasználási feltételek
A Software Online szoftverfejlesztői magazin mindegyik cikke, minden megjelent képe, és egyéb publikált anyaga szerzői jog védelme alatt áll! Bármilyen formában történő másodlagos terjesztésük, közzétételük vagy felhasználásuk kizárólag a kiadó előzetes írásbeli engedélyével történhet!

Copyright © 1999-2012 Animare Software Kft. Minden jog fenntartva!
| Készült: Animare Stúdió | Adatvédelem | Kapcsolat |