Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Megfelelőség
Bemutatott verzió: ODBC 1.0 Szabványoknak megfelelés: ODBC
Összefoglalás
Az SQLDriverConnect alternatíva az SQLConnect-nek. Támogatja azokat az adatforrásokat, amelyek több kapcsolati információt igényelnek, mint az SQLConnect három argumentuma, párbeszédablakokat, amelyek minden kapcsolati információt kérnek a felhasználótól, valamint olyan adatforrásokat, amelyek nincsenek definiálva a rendszeradatokban. További információért lásd: Kapcsolat SQLDriverConnect-szel.
Syntax
SQLRETURN SQLDriverConnect(
SQLHDBC ConnectionHandle,
SQLHWND WindowHandle,
SQLCHAR * InConnectionString,
SQLSMALLINT StringLength1,
SQLCHAR * OutConnectionString,
SQLSMALLINT BufferLength,
SQLSMALLINT * StringLength2Ptr,
SQLUSMALLINT DriverCompletion);
Arguments
ConnectionHandle
[Bemenet] Kapcsolati leíró.
WindowHandle
[Bemenet] Ablakkilincs. Az alkalmazás átadhatja az anyaablak fogantyúját, ha van ilyen, vagy null mutatót, ha az ablak fogantyúja nem alkalmazható, vagy az SQLDriverConnect nem jelenít meg párbeszédablakokat.
InConnectionString
[Bemenet] Teljes kapcsolati karakterlánc (lásd a szintaxist a "Kommentekben"), egy részleges kapcsolati karakterlánc vagy egy üres string.
StringLength1
[Bemenet] *InConnectionString hossza, karakterekben, ha a string Unicode, vagy bájtokban, ha a string ANSI vagy DBCS.
OutConnectionString
[Kimenet] Mutató a pufferre a befejezett kapcsolati karakterlánc számára. A célforráshoz való sikeres csatlakozás után ez a puffer tartalmazza a befejezett kapcsolati karakterlánc-et. Az alkalmazásoknak legalább 1 024 karaktert kell kijelölniük ehhez a pufferhez.
Ha az OutConnectionString NULL, akkor a StringLength2Ptr továbbra is visszaadja az összes karakterszámot (kivéve a null-terminációs karaktert a karakteradatokhoz), amelyek az OutConnectionString által mutatott pufferben elérhetőek vissza.
BufferLength
[Bemenet] A *OutConnectionString puffer hossza, karakterekben.
StringLength2Ptr
[Kimenet] Mutató egy pufferre, amelyben vissza lehet adni a *OutConnectionString-ben elérhető karakterek teljes számát (a null-terminációs karakter kivételével). Ha a visszaadható karakterek száma nagyobb, mint a BufferLength, akkor az *OutConnectionString kivégzett kapcsolati karakterlánc lerövidítése BufferLength-re mínusz egy null-terminációs karakter hosszára.
DriverCompletion
[Bemenet] Jelző, amely jelzi, hogy a Driver Manager vagy az illesztőprogram további kapcsolati információkat kér-e:
SQL_DRIVER_PROMPT, SQL_DRIVER_COMPLETE, SQL_DRIVER_COMPLETE_REQUIRED vagy SQL_DRIVER_NOPROMPT.
(További információért lásd: "Hozzászólások".)
Returns
SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_NO_DATA, SQL_ERROR, SQL_INVALID_HANDLE vagy SQL_STILL_EXECUTING.
Diagnostics
Amikor az SQLDriverConnect SQL_ERROR vagy SQL_SUCCESS_WITH_INFO értéket ad, egy hozzárendelt SQLSTATE érték megkapható SQLGetDiagRec hívásával, amely egy fHandleType SQL_HANDLE_DBC és egy hHandle of ConnectionHandle (ConnectionHandle) segítségével szól. Az alábbi táblázat felsorolja az SQLDriverConnect által gyakran visszaadott SQLSTATE értékeket, és mindegyiket ennek a függvénynek a kontextusában magyarázza; a "(DM)" jelölés megelőzi a Driver Manager által visszaadott SQLSTATE-leírásokat. Az egyes SQLSTATE-értékekhez társított visszatérési kód SQL_ERROR, kivéve, ha másként van feltüntetve.
| SQLSTATE | Error | Description |
|---|---|---|
| 01000 | Általános figyelmeztetés | Illesztőprogram-specifikus tájékoztató üzenet. (A függvény SQL_SUCCESS_WITH_INFO ad vissza.) |
| 01004 | Sztringadatok, jobb csonkolt | Az *OutConnectionString puffer nem volt elég nagy ahhoz, hogy visszaadja az egész kapcsolati karakterlánc-et, ezért a kapcsolati karakterlánc lerövidített. A csonkítatlan kapcsolati karakterlánc hosszát a *StringLength2Ptr fájlban adjuk vissza. (A függvény SQL_SUCCESS_WITH_INFO ad vissza.) |
| 01S00 | Invalid kapcsolati karakterlánc attribútum | A kapcsolati karakterlánc (InConnectionString) egy érvénytelen attribútumkulcsszót megadott volt, de a meghajtó így is tudott csatlakozni az adatforráshoz. (A függvény SQL_SUCCESS_WITH_INFO ad vissza.) |
| 01S02 | A beállítás értéke módosult | Az illezser nem támogatta az SQLSetConnectAttrValuePtr argumentusa által kijelölt értéket, és hasonló értéket cserélt. (A függvény SQL_SUCCESS_WITH_INFO ad vissza.) |
| 01S08 | DSN fájl hibamentése | Az *InConnectionString szövegében szerepelt egy FILEDSN kulcsszó, de a .dsn fájl nem mentve el. (A függvény SQL_SUCCESS_WITH_INFO ad vissza.) |
| 01S09 | Érvénytelen kulcsszó | (DM) Az *InConnectionString szövegében szerepelt egy SAVEFILE kulcsszó, de nem volt DRIVER vagy FILEDSN kulcsszó. (A függvény SQL_SUCCESS_WITH_INFO ad vissza.) |
| 08001 | Az ügyfél nem tudja kapcsolatot teremteni | A meghajtó nem tudott kapcsolatot teremteni az adatforrással. |
| 08002 | Használatban lévő kapcsolatnév | (DM) A megadott ConnectionHandle már használódott egy adatforráshoz való kapcsolat létrehozására, és a kapcsolat még mindig nyitva volt. |
| 08004 | A szerver elutasította a kapcsolatot | Az adatforrás elutasította a kapcsolat létrehozását megvalósítás által meghatározott okok miatt. |
| 08S01 | Kommunikációs kapcsolat hibája | Az illesztőprogram és az adatforrás közötti kommunikációs kapcsolat, amelyhez az illezőgép csatlakozni próbált, meghibásodott, mielőtt az SQLDriverConnect funkció befejezte volna a feldolgozást. |
| 28000 | Érvénytelen jogosultsági specifikáció | Vagy a felhasználói azonosító, akár az engedélyezési string, vagy mindkettő, ahogy a kapcsolati karakterlánc (InConnectionString) megjelöli, megsértette az adatforrás által meghatározott korlátozásokat. |
| HY000 | Általános hiba | Hiba történt, amely miatt nem volt konkrét SQLSTATE, és amelyhez nem definiáltak implementációspecifikus SQLSTATE-t. Az SQLGetDiagRec által a *szMessageText pufferben visszaadott hibaüzenet leírja a hibát és annak okát. |
| HY000 | Általános hiba: Érvénytelen fájl dsn | (DM) Az *InConnectionString szövegében szerepelt egy FILEDSN kulcsszó, de a .dsn fájl neve nem került elő. |
| HY000 | Általános hiba: Nem sikerült fájlpuffert létrehozni | (DM) A *InConnectionString szövegében szerepelt egy FILEDSN kulcsszó, de a .dsn fájl olvashatatlan volt. |
| HY001 | Memóriafoglalási hiba | A Driver Manager nem tudta lekötni a szükséges memóriát az SQLDriverConnect funkció végrehajtásához vagy befejezéséhez. Az illesztőprogram nem tudta lefoglalni a függvény végrehajtásának vagy befejezésének támogatásához szükséges memóriát. |
| HY008 | Művelet megszakítva | Az aszinkron feldolgozás engedélyezett volt a ConnectionHandle számára. A függvényt meghívták, és mielőtt befejezte volna a végrehajtást, az SQLCancelHandle függvényt hívták meg a ConnectionHandle-en, majd az SQLDriverConnect funkciót ismét a ConnectionHandle-en. Vagy az SQLDriverConnect függvényt hívták, és mielőtt befejezte volna a végrehajtást, az SQLCancelHandle-t a ConnectionHandle-en egy másik szálból hívták meg egy többszálú alkalmazásban. |
| HY010 | Függvényütemezési hiba | (DM) Egy másik aszinkron futó függvény (nem SQLDriverConnect) a ConnectionHandle számára volt meghívva, és még futott, amikor az SQLDriverConnect funkciót hívták. |
| HY013 | Memóriakezelési hiba | Az SQLDriverConnect függvényhívást nem lehetett feldolgozni, mert az alapul szolgáló memóriaobjektumokat nem lehetett elérni, valószínűleg alacsony memóriafeltételek miatt. |
| HY090 | Érvénytelen sztring vagy puffer hossza | (DM) A StringLength1 argumentus értéke kisebb volt 0-nál, és nem volt egyenlő SQL_NTS-vel. (DM) A BufferLength argumentumhoz megadott érték kisebb, mint 0. |
| HY092 | Érvénytelen attribútum/opcióazonosító | (DM) A DriverCompletion érve SQL_DRIVER_PROMPT volt, míg a WindowHandle érve null pointer volt. |
| HY110 | Érvénytelen driver-teljesítés | (DM) A DriverCompletion argumentumhoz megadott érték nem volt egyenlő SQL_DRIVER_PROMPT, SQL_DRIVER_COMPLETE, SQL_DRIVER_COMPLETE_REQUIRED vagy SQL_DRIVER_NOPROMPT. (DM) A kapcsolat pooling engedélyezve volt, és a DriverCompletion argumentus értéke nem volt SQL_DRIVER_NOPROMPT. |
| HYC00 | A választható funkció nem implementálva | Az illezőprogram nem támogatja az alkalmazás által kért ODBC viselkedési verziót. |
| HYT00 | Az időtúllépés lejárt | A bejelentkezési időkorlát lejárt, mielőtt az adatforráshoz való csatlakozás befejeződött. Az időtúli időszakot az SQLSetConnectAttr, SQL_ATTR_LOGIN_TIMEOUT segítségével állítják be. |
| HYT01 | A kapcsolati időkorlát lejárt | A kapcsolat időtúllépési időtartama lejárt, mielőtt az adatforrás válaszolt a kérésre. A kapcsolat időtúllépési időszaka az SQLSetConnectAttr SQL_ATTR_CONNECTION_TIMEOUT keresztül van beállítva. |
| IM001 | Az illesztőprogram nem támogatja ezt a függvényt | (DM) A megadott adatforrás nevéhez tartozó illesztőprogram nem támogatja a funkciót. |
| IM002 | Adatforrás nem talált, és alapértelmezett illesztőprogram nem volt megadva. | (DM) A kapcsolati karakterlánc (InConnectionString) által megadott adatforrás név nem található meg a rendszerinformációkban, és nem volt alapértelmezett illesztőprogram-specifikáció. (DM) Az ODBC adatforrás és alapértelmezett illesztőprogram-információk nem találhatók meg a rendszer adataiban. |
| IM003 | A megadott illesztőprogramot nem lehetett betölteni | (DM) Az adatforrás specifikációjában a rendszerinformációban vagy a DRIVER kulcsszavaban megadott illesztőprogramot nem találták meg, vagy más okból nem lehetett betölteni. |
| IM004 | Driver SQLAllocHandle SQL_HANDLE_ENV hibás | (DM) SQLDriverConnect során a Driver Manager a driverek SQLAllocHandle funkcióját hívta egy fHandleType SQL_HANDLE_ENV értékű eszközzel, és az illezser hibát adott vissza. |
| IM005 | A driver-SQL_HANDLE_DBC SQLAllocHandle meghibásodott. | (DM) Az SQLDriverConnect során a Driver Manager hívta az illezser SQLAllocHandle funkcióját egy fHandleType SQL_HANDLE_DBC jelmel, és az illezőprogram hibát adott vissza. |
| IM006 | Driver's SQLSetConnectAttr hibás | (DM) Az SQLDriverConnect során a Driver Manager hívta az illezser SQLSetConnectAttr funkcióját, és az illesztőprogram hibát adott vissza. |
| IM007 | Nem tartalmaz adatforrást vagy meghajtót; Párbeszéd tiltott | A kapcsolati karakterlánc nem tartalmazott adatforrás nevet vagy illesztőprogramot, és a DriverCompletion SQL_DRIVER_NOPROMPT. |
| IM008 | Párbeszéd sikertelen | A meghajtó megpróbálta megjeleníteni a bejelentkezési párbeszédablakot, de sikertelenül. A WindowHandle null pointer volt, a DriverCompletion pedig nem volt SQL_DRIVER_NO_PROMPT. |
| IM009 | Nem lehet betölteni a fordítási DLL-t | Az illezser nem tudta betölteni a fordítási DLL-t, amely az adatforráshoz vagy a kapcsolathoz volt megadva. |
| IM010 | Az adatforrás neve túl hosszú | (DM) A DSN kulcsszavanak attribútumértéke hosszabb volt, mint SQL_MAX_DSN_LENGTH karakter. |
| IM011 | A versenyző neve túl hosszú | (DM) A DRIVER kulcsszó attribútumértéke hosszabb volt 255 karakternél. |
| IM012 | DRIVER kulcsszó szintaktishiba | (DM) A DRIVER kulcsszó kulcsszó-érték párja szintaktishibat tartalmazott. (DM) Az *InConnectionString stringje tartalmazott egy FILEDSN kulcsszót, de a .dsn fájl nem tartalmazott DRIVER kulcsszót vagy DSN kulcsszót. |
| IM014 | A megadott DSN architektúrabeli eltérést tartalmaz az illesztőprogram és az alkalmazás között | (DM) 32 bites alkalmazás DSN-t használ, amely egy 64 bites illezőprogramhoz csatlakozik; vagy fordítva. |
| IM015 | Az illevezető SQLDriverConnect SQL_HANDLE_DBC_INFO_HANDLE-n hibás | Ha egy illesztőprogram SQL_ERROR visszaad, a Driver Manager visszaadja SQL_ERROR az alkalmazásnak, és a kapcsolat meghibásodik. További információért SQL_HANDLE_DBC_INFO_TOKEN lásd: Fejlődés Connection-Pool tudatosság egy ODBC meghajtóban. |
| IM017 | A lekérdezés aszinkron értesítési módban le van tiltva | Az értesítési modell használata esetén a lekérdezés le van tiltva. |
| IM018 | Az SQLCompleteAsync nem lett meghívva az előző aszinkron művelet végrehajtásához ezen a leírón. | Ha a leíró előző függvényhívása SQL_STILL_EXECUTING ad vissza, és ha az értesítési mód engedélyezve van, az SQLCompleteAsync-et a leírón kell meghívni a művelet utófeldolgozásához és befejezéséhez. |
| S1118 | Az illesztőprogram nem támogatja az aszinkron értesítést | Ha az illesztőprogram nem támogatja az aszinkron értesítést, nem lehet beállítani SQL_ATTR_ASYNC_DBC_EVENT vagy SQL_ATTR_ASYNC_DBC_RETCODE_PTR. |
Comments
Egy kapcsolati karakterlánc a következő szintaxissal rendelkezik:
connection-string ::= üres-string[;] | attribútum[;] | attribútum; kapcsolódási lánc
üres-string ::=attribútum ::= attribútum-kulcsszó-érték= | DRIVER=[{]attribute-value[}]
attribútum-kulcsszó ::= DSN | UID | PWD | driver-defined-attributed-kulcsszó
attribútum-érték ::= karakter-lánc
driver-defined-attribute-keyword ::= azonosító
ahol a karakterlánc nulla vagy több karaktert tartalmaz; az azonosító egy vagy több karakterből áll; attribútum-kulcsszó nem kis- és nagybetűérzékeny; az attribútumérték lehet kis-kis- érzékeny; és a DSN kulcsszó értéke nem kizárólag üres pontokból áll.
A kapcsolati karakterlánc és inicializációs fájl nyelvtana miatt, kulcsszavak és attribútumértékek tartalmazzák a []{}(),;? karaktereket. *=!@ nem zárva fogszabályzóval zárva, kerülni kell. A DSN-kulcsszó értéke nem állhat csak üres elemekből, és nem tartalmazhat kezdő üres elemeket. A rendszerinformációk nyelvtana miatt a kulcsszavak és az adatforrásnevek nem tartalmazhatják a fordított perjel (\) karaktert.
Az alkalmazásoknak nem kell a DRIVER kulcsszó után az attribútum értéke köré fogszabályzókat hozzáadniuk, kivéve, ha az attribútum tartalmaz egy félbasszút (;), ebben az esetben a fogszabályzók szükségesek. Ha az illesztőprogram által kapott attribútumérték kapcsos zárójeleket tartalmaz, az illesztőprogramnak nem szabad eltávolítania őket, hanem a visszaadott kapcsolati karakterlánc kell részesítenie őket.
Egy DSN vagy kapcsolati karakterlánc érték, amelyet rögzítők ({}) tartalmaznak () és tartalmazza a []{}(),;? *=!@ érintetlenül adja át a vezetőnek. Azonban amikor ezeket a karaktereket használják kulcsszóban, a Driver Manager hibát ad vissza DSN-ek fájl kezelése során, de a kapcsolati karakterlánc átvitele a meghajtónak a hagyományos kapcsolódási láncok esetén. Kerülje a beágyazott zárójelek használatát egy kulcsszóértékben.
A kapcsolati karakterlánc bármilyen számú illesztőprogram által definiált kulcsszót tartalmazhatnak. Mivel a DRIVER kulcsszó nem használja a rendszer információiból, az illesztővezetőnek elég kulcsszavakat kell definiálnia ahhoz, hogy egy illesztőgép csak a kapcsolati karakterlánc információi alapján csatlakozhasson egy adatforráshoz. (További információért lásd a "Vezetői irányelveket" ebben a szakaszban.) Az illeszőr határozza meg, hogy mely kulcsszavak szükségesek az adatforráshoz való kapcsoláshoz.
Az alábbi táblázat a DSN, FILEDSN, DRIVER, UID, PWD és SAVEFILE kulcsszavak attribútumértékeit írja le.
| Keyword | Attribútumérték leírása |
|---|---|
| DSN | Az adatforrás neve az SQLDataSources vagy az SQLDriverConnect adatforrások párbeszédablaka alapján. |
| FILEDSN | Egy .dsn fájl neve, amelyből kapcsolati karakterlánc épül az adatforráshoz. Ezeket az adatforrásokat fájlforrásoknak nevezzük. |
| VERSENYZŐ | Az illesztőprogram leírása, ahogy az SQLDrivers függvény által visszaadott. Például az Rdb vagy az SQL Server. |
| UID | Egy felhasználói azonosító. |
| PWD | A felhasználói azonosítóhoz tartozó jelszó, vagy üres lánc, ha nincs jelszó (PWD=;). |
| MENTÉS | Egy .dsn fájl fájlneve, amelyben a jelenlegi, sikeres kapcsolat létrehozásához használt kulcsszavak attribútumértékeit el kell menteni. |
Arról, hogyan választ egy alkalmazás adatforrást vagy illevezetőt, lásd: Adatforrás vagy driver kiválasztása.
Ha bármilyen kulcsszó ismétlődik a kapcsolati karakterlánc-ben, az illesztőprogram az első előforduláshoz tartozó értéket használja. Ha a DSN és a DRIVER kulcsszavak ugyanabban a kapcsolati karakterlánc-ben vannak, a Driver Manager és az illezőprogram azt a kulcsszót használja, amely először jelenik meg.
A FILEDSN és DSN kulcsszavak kizárják egymást: melyik kulcsszót használják először, a másodszor megjelenő kulcsszót figyelmen kívül hagyjuk. A FILEDSN és a DRIVER kulcsszavak viszont nem zárják ki egymást. Ha bármely kulcsszó megjelenik egy FILEDSN-rel rendelkező kapcsolati karakterlánc-ben, akkor a kulcsszavanak attribútumértékét használják a kapcsolati karakterlánc értékében, nem pedig ugyanazon a kulcsszavanak a .dsn fájlban lévő attribútumértékét.
Ha a FILEDSN kulcsszót használják, a .dsn fájlban megadott kulcsszavakat használják egy kapcsolati karakterlánc létrehozásához. (További információért lásd a "Fájl adatforrások" (Fájl adatforrások) oldalán ebben a szakaszban.) Az UID kulcsszó opcionális; .dsn fájl csak a DRIVER kulcsszóval hozható létre. A PWD kulcsszó nem tárolható .dsn fájlban. A .dsn fájl alapértelmezett mentése és betöltése a CommonFileDir által a HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\ Windows\CurrentVersion és az "ODBC\DataSources" által meghatározott útvonal kombinációja lesz. (Ha a CommonFileDir "C:\Program Files\Common Files" lenne, az alapértelmezett könyvtár a "C:\Program Files\Common Files\ODBC\Data Sources" lenne.)
Note
Egy .dsn fájl közvetlenül manipulálható az telepítő DLL-ben az SQLReadFileDSN és SQLWriteFileDSN funkciók hívásával.
Ha a SAVEFILE kulcsszót használják, a jelenlegi, sikeres kapcsolat létrehozásához használt kulcsszavak attribútumértékei .dsn fájlként kerülnek elmentve, amelyen a SAVEFILE kulcsszó attribútumértékének neve szerepel. A SAVEFILE kulcsszót a DRIVER kulcsszavsal, a FILEDSN kulcsszóval vagy mindkettővel együtt kell használni, különben a függvény SQL_SUCCESS_WITH_INFO SQLSTATE 01S09 (Invalid kulcsszó) értéket ad vissza. A SAVEFILE kulcsszavanak a DRIVER kulcsszavanál kell megjelennie a kapcsolati karakterlánc-ben, különben az eredmények nem lesznek meghatározva.
Versenyzővezetői irányelvek
A Driver Manager egy kapcsolati karakterlánc-et épít, amely továbbítja az illezőgépnek az SQLDriverConnectfüggvény InConnectionString argumentumában. A Driver Manager nem módosítja az alkalmazás által továbbított InConnectionString argumentumot.
A Driver Manager akciója a DriverCompletion érv értékén alapul:
SQL_DRIVER_PROMPT: Ha a kapcsolati karakterlánc nem tartalmazza sem a DRIVER, sem DSN, sem FILEDSN kulcsszót, a Driver Manager megjeleníti az Adatforrások párbeszédablakot. A párbeszédablak által visszaadott adatforrás nevéből és az alkalmazás által továbbított egyéb kulcsszavakból épít kapcsolati karakterlánc-et. Ha a párbeszédablak által visszaadott adatforrás neve üres, a Driver Manager megadja a kulcsszó-érték párt a DSN=Default. (Ez a párbeszédablak nem jelenít meg "Default" nevű adatforrást.)
SQL_DRIVER_COMPLETE vagy SQL_DRIVER_COMPLETE_REQUIRED: Ha az alkalmazás által megadott kapcsolati karakterlánc tartalmazza a DSN kulcsszót, a Driver Manager az alkalmazás által megadott kapcsolati karakterlánc másolja. Egyébként ugyanazokat a műveleteket hajtja végre, mint amikor a DriverCompletion SQL_DRIVER_PROMPT.
SQL_DRIVER_NOPROMPT: A Driver Manager az alkalmazás által megadott kapcsolati karakterlánc másolja le.
Ha az alkalmazás által megadott kapcsolati karakterlánc tartalmazza a DRIVER kulcsszót, a Driver Manager lemásolja az alkalmazás által megadott kapcsolati karakterlánc-et.
Az általa létrehozott kapcsolati karakterlánc segítségével a Driver Manager eldönti, melyik illesztőprogramot használja, csatlakozik ahhoz, és átadja az általa létrehozott kapcsolati karakterlánc a drivernek; további információért a Driver Manager és az illesztőgép kölcsönhatásáról lásd az SQLConnect Function "Kommentek" szakaszát. Ha a kapcsolati karakterlánc nem tartalmazza a DRIVER kulcsszót, a Driver Manager a következőképpen határozza meg, melyik illevezetőt használja:
Ha a kapcsolati karakterlánc tartalmazza a DSN kulcsszót, a Driver Manager a rendszerinformációból leállítja az adatforráshoz kapcsolódó illezőprogramot.
Ha a kapcsolati karakterlánc nem tartalmazza a DSN kulcsszót, vagy az adatforrás nem található, a Driver Manager a rendszerinformációból leállítja az alapértelmezett adatforráshoz tartozó illezőprogramot. (További információért lásd: Alapértelmezett alkulcs.) A Driver Manager megváltoztatja a DSN kulcsszavanak értékét a kapcsolati karakterlánc "DEFAULT"-re.
Ha a DSN kulcsszó a kapcsolati karakterlánc "DEFAULT" szintjére van állítva, a Driver Manager a rendszerinformációkból visszanyeri az alapértelmezett adatforráshoz tartozó illezőprogramot.
Ha az adatforrás nem található, és az alapértelmezett adatforrás sem található, a Driver Manager SQL_ERROR SQLSTATE IM002-vel (adatforrás nem talált és alapértelmezett illesztőprogram nem van megadva).
Fájl adatforrásai
Ha az alkalmazás által az SQLDriverConnect hívásában megadott kapcsolati karakterlánc tartalmazza a FILEDSN kulcsszót, és ezt a kulcsszót sem a DSN, sem a DRIVER kulcsszó váltja fel, akkor a Driver Manager létrehoz egy kapcsolati karakterlánc a .dsn fájl információi és az InConnectionString argumentum alapján. A vezetővezető a következőképpen jár el:
Ellenőrzi, hogy a .dsn fájl neve érvényes-e. Ha nem, akkor SQL_ERROR SQLSTATE IM014-et (Fault name of file name DSN) is visszaad. Ha a fájlnév üres string ("") és SQL_DRIVER_NOPROMPT nincs megadva, akkor megjelenik a Fájlnyitás (File-Open párbeszédablak). Ha a fájlnév érvényes útvonalat tartalmaz, de nincs fájlnév vagy érvénytelen fájlnév, és SQL_DRIVER_NOPROMPT nincs megadva, akkor a Fájlnyitás párbeszédablak megjelenik azzal, hogy a jelenlegi könyvtár a fájlnévben megadott könyvtárra van állítva. Ha a fájlnév üres string ("") vagy a fájlnév érvényes útvonalat tartalmaz, de nincs fájlnév vagy érvénytelen fájlnév, és SQL_DRIVER_NOPROMPT meg van jelölve, akkor SQL_ERROR SQLSTATE IM014 (Invalid name of file DSN) jelenik meg.
Olvassa az összes kulcsszót a .dsn fájl [ODBC] részében. Ha a DRIVER kulcsszó nincs jelen, akkor az SQLSTATE IM012-vel (Driver kulcsszava-szintaxishiba) SQL_ERROR-t ad, kivéve akkor, ha a .dsn fájl nem osztható meg, így csak a DSN kulcsszót tartalmazza.
Ha a fájl adatforrása megoszthatatlan, a Driver Manager olvassa a DSN kulcsszó értékét, és szükség esetén csatlakozik a felhasználóhoz vagy rendszerforráshoz, amelyet a nem megosztható fájlforrás mutat. A 3–5. lépések nem kerülnek el.
Létrehoz egy kapcsolati karakterlánc a meghajtóhoz. A driver kapcsolati karakterlánc a .dsn fájlban megadott kulcsszavak és az eredeti alkalmazási kapcsolati karakterlánc kulcsszavak uniója. A driver kapcsolati karakterlánc építésének szabályai, ahol kulcsszavak átfednek, a következők:
Ha a DRIVER kulcsszó létezik az alkalmazás kapcsolati karakterlánc-ben, és a DRIVER kulcsszavak által megadott illezserek nem egyeznek meg a .dsn fájlban és az application kapcsolati karakterlánc-ben, akkor a .dsn fájlban szereplő illesztőprogram-információkat figyelmen kívül hagyjuk, és az alkalmazás kapcsolati karakterlánc illegser adatait használják. Ha a DRIVER kulcsszavanál megegyeztek a .dsn fájlban és az alkalmazás kapcsolati karakterlánc-jében, akkor ahol minden kulcsszó átfed, az alkalmazás kapcsolati karakterlánc által megadott kulcsszavak előnyben részelik a .dsn fájlban megjelöltekkel szemben.
Az új kapcsolati karakterlánc során a FILEDSN kulcsszó kiszűnik.
A meghajtót úgy tölti be, hogy a Driver Name>\Driver HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI\<regisztrációs bejegyzésben keresi, ahol <a Driver név> a DRIVER kulcsszó által megjelölve.
Átadja az illesztőprogramnak az új csatlakozási láncot.
A .dsn fájlok példáiért lásd : Fájladatforrások használatával való kapcsolódás.
SAVEFILE kulcsszó
Ha az alkalmazás által megadott kapcsolati karakterlánc tartalmazza a SAVEFILE kulcsszót, akkor a Driver Manager elmenti a kapcsolati karakterlánc-et egy .dsn fájlba. A vezetővezető a következőképpen jár el:
Ellenőrzi, hogy a .dsn fájl fájlneve, amely a SAVEFILE kulcsszavahoz tartozó attribútumértékként szerepel, érvényes-e. Ha nem, akkor SQL_ERROR SQLSTATE IM014-et (Fault name of file name DSN) is visszaad. A fájlnév érvényességét a szabványos rendszerelnevezési szabályok határozzák meg. Ha a fájlnév üres string ("") és a DriverCompletion érve nem SQL_DRIVER_NOPROMPT, akkor a fájlnév érvényes. Ha a fájlnév már létezik, akkor ha a DriverCompletion SQL_DRIVER_NOPROMPT, a fájl felülír. Ha a DriverCompletion SQL_DRIVER_PROMPT, SQL_DRIVER_COMPLETE vagy SQL_DRIVER_COMPLETE_REQUIRED, egy párbeszédablak arra kéri a felhasználót, hogy megadja, felülírja-e a fájlt. Ha a Nem jelölik be, akkor megjelenik a Fájlmentés párbeszédablak.
Ha az illezser SQL_SUCCESS-ot ad vissza, és a fájlnév nem üres string, akkor a Driver Manager az OutConnectionString argumentumban visszaadott kapcsolati adatokat írja a megadott fájlba, a korábban említett "Connection Strings" szakaszban megadott formátumban.
Ha az illesztőprogram SQL_SUCCESS-ot ad vissza, és a fájl neve üres string (""), akkor a Driver Manager a Fájlmentés közös párbeszédablakát a hwnd megadott számmal hívja, és az OutConnectionStringben visszaküldött kapcsolati adatokat a File-Save közös párbeszédablakban megadott fájlba írja a korábbi "Kapcsolati stringek" szakaszban megadott formátummal.
Ha az illesztőprogram SQL_SUCCESS-t ad, akkor az OutConnectionString argumentumot adja vissza, amely tartalmazza a kapcsolati karakterlánc az alkalmazásnak.
Ha az illezőprogram SQL_SUCCESS_WITH_INFO vagy SQL_ERROR visszaadja az SQLSTATE-t, akkor a Driver Manager visszaadja az SQLSTATE-et az alkalmazásnak.
Vezetői irányelvek
Az illesztőprogram ellenőrzi, hogy a Driver Manager által átadott kapcsolati karakterlánc tartalmazza-e a DSN vagy DRIVER kulcsszót. Ha a kapcsolati karakterlánc tartalmazza a DRIVER kulcsszót, az illesztőprogram nem tudja visszanyerni az adatforrásról szóló információkat a rendszerinformációkból. Ha a kapcsolati karakterlánc tartalmazza a DSN kulcsszót, vagy nem tartalmazza sem a DSN-t, sem a DRIVER kulcsszót, az illesztőprogram az alábbi módon kérheti le az adatforrásról szóló információkat:
Ha a kapcsolati karakterlánc tartalmazza a DSN kulcsszót, az illesztőprogram visszanyeri az adott adatforrás adatait.
Ha a kapcsolati karakterlánc nem tartalmazza a DSN kulcsszót, a megadott adatforrás nem található, vagy a DSN kulcsszó "DEFAULT" lesz, az illesztőprogram lekéri az alapértelmezett adatforrás adatait.
A meghajtó minden információt, amit a rendszerinformációból nyer, felhasználja a kapcsolati karakterlánc által továbbított információ kiegészítésére. Ha a rendszerinformációban lévő információ másolja a kapcsolati karakterlánc információit, akkor a meghajtó a kapcsolati karakterlánc információját használja.
A DriverComplete értéke alapján az illesztőprogram a felhasználó számára a kapcsolati információkat, például a felhasználói azonosítót és jelszót, majd csatlakozik az adatforráshoz:
SQL_DRIVER_PROMPT: Az illesztőprogram egy párbeszédablakot jelenít meg, amely a kapcsolati karakterlánc értékeit és a rendszerinformációkat (ha van) használja kezdeti értékként. Amikor a felhasználó kilép a párbeszédablakból, az illesztőprogram csatlakozik az adatforráshoz. Emellett egy kapcsolati karakterlánc is épít a *InConnectionStringDSN vagy DRIVER kulcsszavajának értékéből, valamint a párbeszédablakból visszaadott információkból. Ezt a kapcsolati karakterlánc a *OutConnectionString pufferbe helyezi.
SQL_DRIVER_COMPLETE vagy SQL_DRIVER_COMPLETE_REQUIRED: Ha a kapcsolati karakterlánc elegendő információt tartalmaz, és az információ helyes, az illesztőprogram csatlakozik az adatforráshoz, és az *InConnectionString-et *OutConnectionString-re másolja. Ha bármilyen információ hiányzik vagy hibás, az illesztőprogram ugyanazokat a lépéseket teszi, mint amikor a DriverCompletion SQL_DRIVER_PROMPT, kivéve, hogy ha a DriverCompletion SQL_DRIVER_COMPLETE_REQUIRED, az illesztőprogram kitiltja azokat az adatokat, amelyek nem szükségesek az adatforráshoz való csatlakozáshoz.
SQL_DRIVER_NOPROMPT: Ha a kapcsolati karakterlánc elegendő információt tartalmaz, az illezőgép csatlakozik az adatforráshoz, és az *InConnectionString-et az *OutConnectionString-re másolja. Ellenkező esetben az illesztőprogram SQL_ERROR SQLDriverConnect esetén ad vissza.
Sikeres kapcsolat esetén az illesztőprogram beállítja a *StringLength2Ptr formátumot annak a kimeneti kapcsolati karakterlánc hosszára, amely az *OutConnectionString-ben vissza van adva.
Ha a felhasználó töröl egy Driver Manager vagy az illesztőprogram által bemutatott párbeszédablakot, az SQLDriverConnect SQL_NO_DATA visszaad.
Arról, hogyan lép kölcsönhatásba a Driver Manager és az illezőgép a csatlakozási folyamat során, lásd: SQLConnect Function.
Ha egy illesztőprogram támogatja az SQLDriverConnect-et, akkor a meghajtó kulcsszavajának tartalmaznia kell a ConnectFunctions kulcsszót, amelynek második karaktere "Y"-re.
Csatlakozás, amikor a kapcsolat feltöltése engedélyezve van
A kapcsolat pooling lehetővé teszi, hogy az alkalmazás újrahasznosítsa a már létrehozott kapcsolatot. Amikor az SQLDriverConnectet hívják, a Driver Manager megpróbálja létrehozni a kapcsolatot egy olyan kapcsolat segítségével, amely egy olyan kapcsolati csoport része, amelyet egy olyan környezetben jelöltek ki, amelyeket a kapcsolat pooling-ra jelöltek. További információért a kapcsolati poolingről lásd: SQLConnect Function.
Egy alkalmazás beállíthatja SQL_ATTR_RESET_CONNECTION az SQLDisconnect hívása előtt egy olyan kapcsolaton, ahol a pooling engedélyezett. További információ: SQLSetConnectAttr függvény.
Az alábbi korlátozások érvényesek, amikor egy alkalmazás SQLDriverConnectet hív egy csoportos kapcsolathoz való csatlakozáshoz:
A kapcsolat pooling feldolgozása nem történik, ha a SAVEFILE kulcsszó meg van jelölve a kapcsolati karakterlánc-ben.
Ha a kapcsolat pooling engedélyezett, az SQLDriverConnect csak SQL_DRIVER_NOPROMPT DriverCompletion argumentummal hívható; ha SQLDriverConnectet bármely más DriverCompletion-lel hívják, akkor visszakerül a SQLSTATE HY110 (Invalid driver completion).
Kapcsolati attribútumok
Az SQL_ATTR_LOGIN_TIMEOUT kapcsolat attribútum, amelyet SQLSetConnectAttr segítségével állítanak be, meghatározza a másodpercek számát, amíg a bejelentkezési kérelmek sikeres a meghajtó által befejeződnek, mielőtt visszatérne az alkalmazáshoz. Ha a felhasználót arra kérik, hogy fejezze be a kapcsolati karakterlánc, minden bejelentkezési kérelmet várakozó idővel kezdődik, amikor az illesztőprogram elindítja a kapcsolati folyamatot.
A meghajtó alapértelmezés szerint SQL_MODE_READ_WRITE hozzáférési módban nyitja meg a kapcsolatot. Ahhoz, hogy a hozzáférési módot SQL_MODE_READ_ONLY-re állítsuk, az alkalmazásnak az SQLDriverConnect hívása előtt az SQLSetConnectAttr-t kell hívnia a SQL_ATTR_ACCESS_MODE attribútummal.
Ha az adatforrás rendszerinformációiban egy alapértelmezett fordítási könyvtár van megadva, az illesztőprogram betölti azt. Egy másik fordító könyvtár betölthető, ha az SQLSetConnectAttr hívása a SQL_ATTR_TRANSLATE_LIB attribútummal működik. Fordítási opció megadható SQLSetConnectAttr hívásával a SQL_ATTR_TRANSLATE_OPTION opcióval.
További információért lásd: Kapcsolat SQLDriverConnect-szel.
// SQLDriverConnect_ref.cpp
// compile with: odbc32.lib user32.lib
#include <windows.h>
#include <sqlext.h>
int main() {
SQLHENV henv;
SQLHDBC hdbc;
SQLHSTMT hstmt;
SQLRETURN retcode;
SQLCHAR OutConnStr[255];
SQLSMALLINT OutConnStrLen;
HWND desktopHandle = GetDesktopWindow(); // desktop's window handle
// Allocate environment handle
retcode = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &henv);
// Set the ODBC version environment attribute
if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO) {
retcode = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION, (SQLPOINTER*)SQL_OV_ODBC3, 0);
// Allocate connection handle
if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO) {
retcode = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);
// Set login timeout to 5 seconds
if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO) {
SQLSetConnectAttr(hdbc, SQL_LOGIN_TIMEOUT, (SQLPOINTER)5, 0);
retcode = SQLDriverConnect( // SQL_NULL_HDBC
hdbc,
desktopHandle,
(SQLCHAR*)"driver=SQL Server",
_countof("driver=SQL Server"),
OutConnStr,
255,
&OutConnStrLen,
SQL_DRIVER_PROMPT );
// Allocate statement handle
if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO) {
retcode = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);
// Process data
if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO) {
SQLFreeHandle(SQL_HANDLE_STMT, hstmt);
}
SQLDisconnect(hdbc);
}
SQLFreeHandle(SQL_HANDLE_DBC, hdbc);
}
}
SQLFreeHandle(SQL_HANDLE_ENV, henv);
}
}
Lásd még a Sample ODBC programot.
Kapcsolódó funkciók
| Információ erről: | Nézze |
|---|---|
| Kiosztás egy fogantyú | SQLAllocHandle függvény |
| Az adatforráshoz való csatlakozáshoz szükséges értékek felfedezése és felsorolása | SQLBrowseConnect függvény |
| Csatlakozás adatforráshoz | SQLConnect-függvény |
| Adatforrásról való kikapcsolás | SQLDisconnect függvény |
| Visszatérő versenyző leírásai és attribútumok | SQLDrivers Function |
| Egy fogantyú felszabadítása | SQLFreeHandle függvény |
| Kapcsolati attribútumot beállítás | SQLSetConnectAttr függvény |