C# - Tárolt eljárás eredményének lekérdezése XML-ben

forráskód letöltése
A Microsoft SQL szerver 2000-es változatától kezdve képes arra, hogy egy-egy select lekérdezés eredményét közvetlenül XML-ben szolgáltassa. Mostani cikkünkben annak járunk utána, hogy miként tudunk egy tárolt eljárást úgy aktivizálni, akár interneten keresztül egy böngészőn keresztül, hogy annak eredményét XML-ben kapjuk meg.
Mellékelt példa felhasználása előtt szükséges, hogy az SQL szervert konfiguráljuk arra, hogy képes legyen a Northwind adatbázis tartalmát XML-ben szolgáltatni. Ennek részletes leírása az alább hivatkozott cikkünkben megtalálható.
További szükséges előkészítő lépés, hogy az alábbi tárolt eljárást hozzuk létre a Northwind adatbázisba:
CREATE PROCEDURE CustomerByCountry (@CountryValue nvarchar(15))
AS
    SELECT '<items>'
    SELECT *
    FROM     Customers
    WHERE    Country = @CountryValue 
    FOR XML AUTO
    SELECT '</items>'
GO
Ez lesz az a tárolt eljárás, melyet meghívunk majd saját programunkból. Mielőtt ennek nekiállnák tegyünk egy próbát, hogy ellenőrizzük azt, hogy a fenti előkészítő lépések rendben megtörténtek-e. Ehhez indítsunk el egy Internet Explorer-t, majd írjuk a következő címet:
http://localhost/Northwind?sql=execute CustomerByCountry @CountryValue=Spain
A localhost természetesen attól függően változhat, hogy milyen szerveren érhető el az MS SQL szerver.
Amint az látható is a fenti címből, a tárolt eljárás aktivizálására az sql paraméterben az execute kulcsszó után tudjuk megadni annak a tárolt eljárásnak a nevét, amelyet futtatni szeretnénk. Ha a tárolt eljárás paramétereket is vár, akkor ezeket szintén itt sorolhatjuk fel úgy, hogy paraméterneve után egy egyenlőség jellel elválasztva megadjuk annak aktuális értékét.
Megfigyelhető a saját tárolt eljárásunknál, hogy a tényleges adatlekérdező select előtt van egy SELECT '<items>', majd a végén egy SELECT '</items>'. Erre azért van szükség, hogy a generált XML-nek megadjuk a főcsomópontját mely között az eredmény megjelenik. Ezt megtehetnénk úgy is, hogy a lekérdezésben egy root paramétert is hozzáteszünk, amelynek értéke lesz a főcsomópont neve:
http://localhost/Northwind?sql=execute CustomerByCountry @CountryValue=Spain&root=items
Harmadik megoldásként alkalmazható még az is, hogy egy-egy ilyen lekérdezésnél egyidejűleg többet is futtathatunk. Ezek felsorolását csupán pontosvesszővel kell jeleznünk:
http://localhost/Northwind?sql=select ‘<items>’; execute CustomerByCountry @CountryValue=Spain; select ‘</items>’
A programból történő web-es kérés megvalósítását a szükséges url létrehozása után a GetWebContent nevű belső függvényünkre bízzuk, melyet szintén az alább hivatkozott cikkünkben készítettük el és írtuk le részleteit.