Windows - SQL adatbázisok elérése VBScript-ből

forráskód letöltése
A Windows Scripting Host (WSH) használatával gyakorlatilag az operációs rendszer minden eleme elérhető egyszerű szkriptek megírásával. Egy nagy hiányossággal kell csak szembenéznünk: nincs beépített adatbázis kezelés támogatás. A Windows-ban viszont találhatók adatelérésre képes objektumok, használjuk ki ezt a tényt és rájuk támaszkodva valósítsuk meg az adatbázis kezelést. Az alábbiakban bemutatunk egy VBScript-et, amivel az SQL 2000 Server egyik adatbázisában hajtunk végre egy lekérdezést és a kapott eredményt eltároljuk egy szövegfájlban.
Mellékelten megtalálható a cikkben szereplő szkript. Használata előtt néhány változtatás elvégzésére van szükség: a nyolcadik sorban találhatók az SQL kiszolgálóhoz való kapcsolódás paraméterei, amit a helyi viszonyoknak megfelelően kell beállítani a következők figyelembevételével:
DSN = SQL kiszolgáló ODBC adatforrásának neve.
UID = később megadandó adatbázis eléréséhez szükséges felhasználói név
PWD = névhez tartozó jelszó
DATABASE = adatbázisnév
A 14. sorban szereplő elérési útvonalban (c:\myfile.txt) megadott szövegfájlba kerül elhelyezésre a lekérdezés eredménye - szükség esetén módosítsuk.
Az SQL Server telepítése közben létrehozott ODBC (Open Database Connectivity) kapcsolaton keresztül fogjuk elérni az adatbázisokat. Tudnunk kell a bejegyzett felhasználói adatforrás (DSN) nevet. Ez általában "MQIS" de, hogy biztosak legyünk benne, nyissuk meg a Felügyeleti eszközök > Adatforrások (ODBC) (Administrative Tools > Data Sources (ODBC)) ablakát és nézzük meg a "Felhasználói DSN" ("User DSN") oldalon található lista tartalmát. Keressük ki az "SQL Server" bejegyzést és jegyezzük meg az előtte található nevet a későbbiekben szükségünk lesz rá. Ha nem találjuk, de telepítve van az SQL kiszolgáló, akkor kézzel kell hozzáadnunk: kattintsunk a "Hozzáadás" ("Add") gombra, válasszuk ki az "SQL Server" bejegyzést, majd nyomjuk le a "Befejezés" ("Finish") gombot. A "Név" ("Name") mezőbe írjuk be: MQIS, az alsó "Kiszolgáló" ("Server") legördülő menüben pedig válasszuk ki az SQL-t futtató gépnevet. A következő oldal autentikációs beállításait a helyi viszonyoknak megfelelően kell beállítani. Más előkészületre nincs szükség, kezdhetjük a szkript írását.
Írjuk elő, hogy a futási hibákat hagyja a rendszer figyelmen kívül. Az alábbiakban a lekérdezett adatok feldolgozását addig folytatjuk, amíg a rekord végére nem érünk (EOF), ekkor a WSH generál egy hibaüzenetet, jelezve, hogy nem tudja tovább folytatni az olvasást. Nincs is rá szükségünk, de a hibaüzenet megállítja a szkript futtatását, amit el kell kerülnünk.
On Error Resume Next
A kapott eredményt egy szövegfájlba mentjük a FileSystemObject (FSO) használatával. Elő kell állítanunk az új fájlt, írni kell bele, illetve, ha már létezik, akkor felül kell írni. A szükséges attribútumokat számokkal lehet átadni, de sokkal érthetőbb, ha szöveg formátumban tesszük. Ehhez viszont konstansokkal kell "átalakítani" az értékeket.
 Const ForReading = 1, ForWriting = 2, ForAppending = 8
Deklaráljuk a későbbiekben használandó változókat és ezután jön a szkript egyik legfontosabb része: kapcsolódunk az "adodb.connection" rendszerobjektumhoz és meghívjuk az "Open" metódusát. A következő paramétereket kell átadni a metódus után:
  • DSN - Adatforrás neve, amihez kapcsolódunk. Cikkünk elején néztük meg a felügyeleti eszközök megfelelő ablakában.
  • UID - Az adatok elérésére engedélyezett felhasználói név.
  • PWD - Előző névhez tartozó jelszó. Figyelem! A jelszó titkosítás nélkül tárolódik a szkriptben.
  • DATABASE - Elérendő adatbázis neve.
Példánkban az SQL szerverhez mellékelt "Nortwind" mintaadatbázist fogjuk használni.
dim conn, rs, fso, f
set conn = createobject("adodb.connection")
Conn.open "DSN=MQIS;UID=sa;PWD=abc123;DATABASE=Northwind"
Miután létrejött a kapcsolat definiálunk egy új rekordhalmazt (RecordSet) a lekérdezés eredményének tárolására (még mindig az "adodb"-n belül). A kapott halmaz "Open" metódusával lehet átadni a szabványos SQL lekérdezést, ami jelen esetben a "Products" tábla tartalmának listázását jelenti.
set rs = createobject("adodb.recordset")
rs.open "Select * from Products", conn
Elvileg megvan az eredmény. Következő lépés, hogy kiírjuk a "c:\myfile.txt" szövegfájlba. Itt jön be a szkript elején megadott konstans. Most csak az egyiket használjuk, de a könnyebb bővíthetőség és a technika bemutatásának kedvéért definiáltuk a többit.
Set fso = CreateObject("Scripting.FileSystemObject")
Set f = fso.OpenTextFile("c:\myfile.txt", ForWriting, True)
A "RecCount" változóban számoljuk meg, hogy a lekérdezés eredménye hány rekordból áll. Alapértelmezésben a "Northwind" adatbázis "Products" táblája 77 rekordot tartalmaz. Ennek tudatában rögtön ellenőrizhető az eredmény helyessége (legalábbis részben). DO-WHILE ciklussal haladjunk végig a kapott rekordhalmazon és minden esetben csak az egyes számú mező tartalmát (rs(1)) írjuk a fájlba.
RecCount=0
 Do While Not rs.EOF
   f.Write "Sorszám: " & RecCount & "   " & rs(1) & chr(13) & chr(10)
   rs.MoveNext
   RecCount=RecCount+1
loop
Jelenítsük meg a képernyőn a kapott rekord számot, ami azért is jó, mert így legalább tudjuk mikor ért véget a szkript futása.
wscript.echo "Rekorszám: " & RecCount
Végül zárjuk a megnyitott fájlt és opcionális megoldásként töröljük a memóriában lévő változókat.
f.close
rs.close
conn.close
set rs = nothing
set conn = nothing