HyperLink
Bejelentkezés
E-mail: 
Jelszó: 





Skip Navigation Links
 

OLE DB Provider SQL Server XML kiterjesztéséhez


SQL XML Support 6. rész


A Microsoft SQL szerver OLE DB Provider (SQLOLEDB) szolgáltatója támogat egy új dialektust, amit DBGUID_MSSQLXML-nek hívunk, hogy XML template futtatást tegyen lehetővé beágyazott lekérdezések segítségével (mint amilyen az SQL FOR XML és XPath lekérdezések). A minták valódi XML dokumentumok, amelyek egy vagy több lekérdezést tartalmaznak. A FOR XML és XPath lekérdezések visszaadnak egy dokumentum részletet. A minták az eredmény dokumentumrészek gyűjtőiként viselkednek.

XML parancs beállítás ICommandText használatával
Az ICommandText::SetCommandText és ICommand::Execute metódusok továbbfejlesztettek, hogy az XML dokumentumokat command text-ekké lehessen beállítani, és hogy elindulhassanak a parancsok, és visszakapjuk az eredményt egy folyamként, ami később használható feldolgozásra, mint pl. XML dokumentum DOM objektumba való átvitele.
Az XML minta továbbítható az ICommandText::SetCommandText metódusnak. Amikor az XML minta command text-é alakul, az ICommandText::SetCommandText használatával a fogyasztónak küldenie kell egy DBGUID_MSSQLXML-t, mint GUID-ot a parancs szintaxisához. Ez az új GUID jelöli a command text-et egy XML mintában.
A vevőnek meg kell hívnia a ICommand::Execute-ot, hogy elindítsa az XML mintát. Hogy megóvja az XML dokumentumot, mint eredményhalmazt, a riid-t IStream-ra állítja abban az esetben, ha az ellátó az eredményhalmazt stream-ként adja vissza.
Az ICommandText korlátozásai
A ICommandText::SetCommandText-nek továbbítandó minta nagy lehet. Ha az indítás alatt lévő minta egy fájlban tárolódik, akkor többletmunka szükséges a fájl olvasásához, tartalom puffereléséhez, és ezután be kell állítani a command text-et az ICommandText::SetCommandText segítségével.
Mindemellett az ICommandText::SetCommandText azt várja el, hogy a command string egy Unicode szöveg legyen. Ha az aktuális XML fájl kódolt, akkor plusz többletmunka szükséges az Unicode formátumra konvertáláshoz, mielőtt elküldjük parancsként az IcommandText::SetCommandText-hez.
XML parancs beállítás ICommandStream használatával
Az OLE DB (2.6-os verziójú) ICommandStream felülete, noha egyezik az ICommandText-el, egy parancsot stream-ként küld át annak string formátum használata helyett.
Az SQLOLEDB megvalósítja a választható ICommandStream felületet a parancs objektumon. Az ICommandStream felület lehetővé teszi, hogy adatfolyamot küldjünk a parancs objektumnak.
Az ICommandStream felület megengedi egy parancsnak, hogy bármilyen kódolt formában legyen, amit az XML elemző megérteni képes. Így hát, amikor az ICommand::Execute meghívásra kerül, a command text közvetlenül a stream-ből olvasódik ki, és nincs szükség konverzióra. XML parancsok futtatása ICommandStream felület segítségével sokkal eredményesebb.
Az ICommandStream::GetCommandStream és az ICommandStream::SetCommandStream felület az SQLOLEDB-ben megvalósított.
Az ICommandStream esetében, az alapértelmezett dialektus (DBGUID_DEFAULT) a DBGUID_MSSQLXML. Dialektusok ICommandStream::SetCommandStream általi támogatása provider függő. Az SQLOLEDB csak a DBGUID_MSSSQLXML-t támogatja (DBGUID_SQL és DBGUID_XPATH nem támogatott.)
Ha a GetCommandStreem által visszaadott stream-ből olvasunk, mielőtt az EXECUTE-ot meghívjuk, a parancs lehalhat - kivéve ha az EXECUTE képes olvasni a megfelelő pozíciótól a stream-ben.
Az OLE DB (2.6-verziójú) DBPROPSET_STREAM tulajdonságkészlet támogatása
Az SQLOLEDB implementálja a DBPROPSET_STREAM tulajdonságkészletet (a Stream tulajdonságok csoportban), ami tartalmazza az alábbi tulajdonságokat:
  • DBPROP_OUTPUTSTREAM. A tulajdonság által tárolt érték egy változó, ami egy mutatót tartalmaz az IStream-re vagy az ISequentialStream-re. Amikor ez a tulajdonság megadott, ICommand::Execute eredményét a beállított értéknek megfelelő stream-ben adja vissza. Ezzel elkerüli a szükségtelen adatmásolatokat, ezért a stream-et más felhasználóknak csak például az XML elemzővel továbbíthatjuk.
  • DBPROP_OUTPUTENCODING Ez az érték meghatározza a kért kódolását az Execute metódussal visszaadott stream-nek. Néhány az általánosan használt kódolások közül: UTF-8, ANSI, és Unicode. Az UTF-8 az alapértelmezett kódolás, ha a tulajdonság értéke NULL.
Kérhetünk ISequentialStream-et az ICommand::Execute-hoz. Amíg mi olvasunk a stream-ből, ameddig csak van mit olvasni, az ISequentialStream::Read, S_OK értéket fog visszaadni. Miután a stream végét elértük, egy utólagos olvasás S_FALSE értéket ad vissza, kivéve, ha a futás alatt hiba volt a parancsban. Ha akármennyi hiba is volt, DB_S_ERRORSOCCURED visszaadja az első olvasást azután, hogy a stream végét elértük. Minden utólagos olvasás S_FALSE értéket ad vissza.
A parancs futtatásakor, ha bármilyen hiba volt, a hiba feldolgozási információ formájában tér vissza a stream-ben. Minden hiba az utolsó olvasás után érkezik vissza. Azon alkalmazások, amelyeknek nincs elérésük a hiba objektumokhoz, megvizsgálhatják a folyamat tartalmát, hisz a feldolgozási információ tartalmazza azt.
ISequentialStream csak akkor támogatott, amikor a kiválasztott eredmény egyoszlopos eredménytábla.
SQLOLEDB Provider-függő tulajdonságai
Hogy támogatni tudjunk XML-specifikus eljárást, az SQLOLEDB megvalósítja a következő provider-függő tulajdonságokat a DBPROPSET_SQLSERVERSTREAM tulajdonságkészletben (Stream tulajdonságcsoport). Ezek a tulajdonságok lehetővé teszik, hogy beállítsuk a megfeleltető sémát azzal szemben, hogy melyik XPath lehet parancsként meghatározott, vagy definiál egy XSL fájlt az eredmény feldolgozásához. Néhány tulajdonság ezek közül használható a biztonság és teljesítmény növelésére.
  • SSPROP_STREAM_BASEPATH. Ez a tulajdonság arra használható, hogy meghatározzuk a bázis utat. Ez a bázis út használható relatív utak kiszámítására, az XSL fájlban megtalálható módon, vagy külső sémareferenciával egy minta segítségével.
  • SSPROP_STREAM_MAPPINGSCHEMA. Ez a tulajdonság az XPath lekérdezésekhez használható séma meghatározására szolgál. A meghatározott út lehet abszolút vagy relatív. Ha az út relatív, akkor a bázisút specifikált a SSPROP_STREAM_BASEPATH-ot használva és kiszámítva a relatív utat. Ha a bázis út nem megadott, akkor a relatív út az aktuális mappához képest relatív.
  • SSPROP_STREAM_XSL. Ez a tulajdonság XSL fájl megadására szolgál. Az út lehet abszolút és relatív. Ha az út relatív, akkor a bázis út specifikált a SSPROP_STREAM_BASEPATH-ot használva és kiszámítva a relatív utat. Ha a bázisút nem megadott, akkor a relatív út az aktuális mappához képest relatív.
  • SSPROP_STREAM_CONTENTTYPE. Ha egy XSL stíluslapot használunk az eredményben, a média típus tulajdonság az <xsl:output>-on az XSL fájlban visszaadódik, mint ennek a tulajdonságnak az értéke.
  • SSPROP_STREAM_FLAGS. Ez a tulajdonság számos biztonsági megkötés megadására használatos. Például nem várhatjuk el, hogy az URL fájlokra, vagy abszolút út és fájl címre mutasson (például külső oldalakon). Nem várhatjuk el, hogy lekérdezések legyenek a mintákban. A tulajdonság jelölhet STREAM_FLAGS_DISALLOW_URL, STREAM_FLAGS_DISALLOW_ABSOLUTE_PATH, vagy STREAM_FLAGS_DISALLOW_QUERY értékeket.

Cikksorozat

#IDKategóriaCikk címeSorozat
3643DelphiFormEditor1. rész
3689DelphiProject és modul információk2. rész
3719DelphiMegnyitás, mentés3. rész
3749DelphiKódszerkesztő4. rész
3778DelphiForráskód írása, olvasása5. rész
3809DelphiInterfész a kódszerkesztő ablakhoz6. rész
3839DelphiKijelölt blokkok7. rész
3869DelphiA buffer beállításai8. rész
3899DelphiKörnyezeti és Project opciók9. rész
3929DelphiKurzor a kódszerkesztőben10. rész
3959DelphiKeresés és csere beállításai11. rész


Könyv
Ez a cikk megtalálható ebben a könyvben: Windows Software Offline 2003 évkönyv 352. 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 |