OSQL Utility
Egy SQL-parancsállomány programból történő futtatásának legegyszerűbb módja, hogy írunk egy batch állományt, mely meghívja a SQL Server beépített eszközét, és elvégzi a script futtatását, valamint a script-ben meghatározott műveletek végrehajtását.
Ez a beépített program az osql.exe nevet viseli, és alapértelmezésben a következő helyen található: <%winroot%>:\Program Files\Microsoft Sql Server\80\Tools\Binn. Az általunk írt kötegelt állományban az OSQL alprogramot hívjuk meg a megfelelő paraméterekkel, valamint kapcsolókkal. A használandó kapcsolók kis- és nagybetűkre érzékenyek. Leggyakrabban használt kapcsolói a következők:
- –L: Kilistázhatjuk a hálózatban elérhető SQL szervereket.
- –S: Megadhatjuk a használni kívánt szerver nevét.
- –d: Megadhatjuk a használni kívánt adatbázist.
- –U: Felhasználó név megadása.
- –P: Jelszó megadása.
- –i: Állományt adhatunk meg, melyben a lekérdező utasítás van megadva (például: osql –i select.qry).
- –o: Output állomány megadásával jelezhetjük, hogy a művelet eredményét milyen nevű kimenetbe szeretnénk kapni (például: osql –i select.qry –o result.res).
- –b: Hiba esetén a batch terminál.
- –E: Megbízható kapcsolat felépítése a szerverrel.
- –t: Lekérdezés időkorlátja.
Az OSQL eszköz elindítható közvetlenül parancssorból, vagy egy batch állományból is. A szükséges paramétereket átadva neki elérhetjük, hogy interaktív módon kommunikáljon a MS SQL Server-rel, és végrehajtassa a DML-utasításokat. Alapértelmezett módon az eredmények a képernyőn, mint standard kimeneten jelennek meg (stdout). A program bezárása a QUIT vagy EXIT parancsokkal történik.
Ha nem adunk meg felhasználónevet és jelszót, akkor a program végignézi a környezeti változókat, és azokat használja bejelentkezéshez (osqluser=(user) vagy osqlserver=(server)). Ha nem talál beállított adatokat, akkor a munkaállomás nevét használja szervernévként, és a munkaállomás bejelentkezett felhasználójának nevét felhasználónévként. Ha a megadott –U vagy –P kapcsolók mögött specifikált adatok egyike sem helyes, akkor a beépített operációs rendszerbeli azonosítást használja (Windows NT alapú authentikáció).
Batch állomány
A mellékelt Create.cmd állomány tartalmazza azt a batch utasítássorozatot, melyet programunkból lefuttathatunk. A parancsállomány meghívja a fent említett OSQL programot úgy, hogy az alkalmazás Form-ján megadott szervernevet, valamint a futtatandó SQL-parancsállomány nevét átadja neki paraméterként.
Amennyiben minden paramétert helyesen adtunk meg, és nem történt semmilyen hiba, akkor a TestDb.prc állományban megadott SQL-utasítások végrehajtódnak, minek eredményeképpen létrejön egy TestDb nevű adatbázis a megadott SQL szerveren, egy Products nevű tábla feltöltve öt rekorddal, valamint bekerül az adatbázisba egy GetProduct nevű tárolt eljárás. Ezek eredményét a felbukkanó konzolképernyőn is követhetjük.
A tárolt eljárást felhasználjuk a mellékelt alkalmazásban. Első paraméterként megadjuk az ID oszlopértéket, melynek segítségével megkapjuk a rekordban található terméknevet. Ezt a MŰVELET gomb segítségével próbálhatjuk ki, miután lefuttattuk a batch állományt (SCRIPT FUTTATÁSA gomb), valamint betöltöttük az adatokat a kontrolokba (ADATBETÖLTÉS gomb).
A batch állomány első soraiban ellenőrizzük a parancssori argumentum (szervernév) létezését, valamint tartalmát:
if '%1' == '' goto usage
if '%1' == '/?' goto usage
if '%1' == '-?' goto usage
if '%1' == '?' goto usage
if '%1' == '/help' goto usage
Ha valamilyen hiba fordul elő, akkor a :usage címkére adjuk a vezérlést, mely megjeleníti egy szövegben, hogy miként használatos a parancsállomány.
Ha megfelelő adatokat adtunk meg, akkor meghívjuk az OSQL programot:
osql -S %1 -E -b -i "TestDb.prc"
Hiba esetén az :errors címkére ugrunk, ahol szintén figyelmeztető üzenetet jelenítünk meg a standard kimeneten:
if %ERRORLEVEL% NEQ 0 goto errors
Hibamentes futás esetén befejezzük a folyamatot egy, a sikeres végrehajtásról tájékoztató üzenet megjelenítésével:
goto finish
...
:finish
echo.
echo A parancsállomány tökéletesen lefutott!
...
Alkalmazás
A mellékelt példában természetesen nem kell megnyomnunk a parancsállományt futtató gombot, ha ezt az alkalmazás egy korábbi indulásakor már megtettük, hiszen ekkor az adatbázis már telepítve van. Az adatbázis létezését külön nem ellenőrizzük.
A parancsállományt futtató metódusban a CreateProcess függvényt hívjuk meg, melynek átadjuk a szövegmezőben megadott szerver nevét.