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 SQLDescribeParam egy előkészített SQL utasításhoz tartozó paraméterjelölő leírását adja vissza. Ez az információ az IPD területein is elérhető.
Syntax
SQLRETURN SQLDescribeParam(
SQLHSTMT StatementHandle,
SQLUSMALLINT ParameterNumber,
SQLSMALLINT * DataTypePtr,
SQLULEN * ParameterSizePtr,
SQLSMALLINT * DecimalDigitsPtr,
SQLSMALLINT * NullablePtr);
Arguments
StatementHandle
[Bemenet] Utasításkezelő.
Paraméterszám
[Bemenet] Paraméterjelölő szám sorrendben, növekvő paramétersorrendben, 1-től kezdve.
DataTypePtr
[Kimenet] Mutató egy pufferre, amelyben vissza lehet adni a paraméter SQL adattípusát. Ezt az értéket az IPD SQL_DESC_CONCISE_TYPE rekordmezőjéből olvassuk. Ez az egyik érték lesz a D. melléklet SQL Data Types szekciójában, vagy egy illesztőgép-specifikus SQL adattípus.
Az ODBC 3-ban. x, SQL_TYPE_DATE, SQL_TYPE_TIME vagy SQL_TYPE_TIMESTAMP a *DataTypePtr formátumban kerül vissza dátum, idő vagy időbélyeg adatokért; az ODBC 2-ben. x, SQL_DATE, SQL_TIME vagy SQL_TIMESTAMP visszakapják. A Driver Manager elvégzi a szükséges leképezéseket, amikor ODBC 2. x alkalmazás ODBC 3-mal működik. x driver vagy ODBC 3. x alkalmazás ODBC 2-vel működik. X driver.
Ha az ColumnNumber 0-val egyenlő (egy könyvjelzőoszlopnál), akkor a * DataTypePtr változatos hosszúságú könyvjelzők esetén SQL_BINARY jelenik meg. (SQL_INTEGER akkor jelenik meg, ha egy ODBC 3 könyvjelzőt használ. x alkalmazás ODBC 2-vel dolgozik. x driver vagy ODBC 2 alapján. x alkalmazás ODBC 3-mal dolgozik. x driver.)
További információért lásd az SQL Data Types (SQL Data Types a D. mellékletben: Data Types). Az illesztőprogram-specifikus SQL-adattípusokkal kapcsolatos információkért tekintse meg az illesztőprogram dokumentációját.
ParameterSizePtr
[Kimenet] Mutató egy pufferre, amelyben vissza lehet adni az oszlop méretét karakterekben vagy a megfelelő paraméterjelölő kifejezését az adatforrás által meghatározott módon. További információért az oszlopméretről lásd: Oszlopméret, tizedes számjegyek, átviteli oktet hossz és megjelenítés mérete.
DecimalDigitsPtr
[Kimenet] Mutató egy pufferre, amelyben vissza lehet adni az oszlop tizedes számjegyeinek számát vagy a megfelelő paraméter kifejezését, ahogy azt az adatforrás definiálja. További információért a tizedes számjegyekről lásd: Oszlopméret, tizedes számjegyek, átviteli oktet hossz és megjelenítés mérete.
NullablePtr
[Kimenet] Mutató egy pufferre, amelyben vissza kell adni egy értéket, amely jelzi, hogy a paraméter engedélyezi-e a NULL értékeket. Ez az érték az IPD SQL_DESC_NULLABLE mezőjéből olvasható. Az alábbiak egyike:
SQL_NO_NULLS: A paraméter nem engedélyezi a NULL értékeket (ez az alapértelmezett érték).
SQL_NULLABLE: A paraméter NULL értékeket engedélyez.
SQL_NULLABLE_UNKNOWN: Az illesztőprogram nem tudja meghatározni, hogy a paraméter engedélyezi-e a NULL értékeket.
Returns
SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_STILL_EXECUTING, SQL_ERROR vagy SQL_INVALID_HANDLE.
Diagnostics
Amikor az SQLDescribeParam SQL_ERROR vagy SQL_SUCCESS_WITH_INFO értéket ad, egy hozzárendelt SQLSTATE érték megkapható SQLGetDiagRec hívásával, amely egy SQL_HANDLE_STMT HandleType és egy HandleType (StatementHandle) segítségével szól. Az alábbi táblázat felsorolja az SQLDescribeParam által általában visszaadott SQLSTATE értékeket, és mindegyiket elmagyarázza ezen függvény kontextusában; 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.) |
| 07009 | Érvénytelen descriptor index | (DM) A ParameterNumber argumentumhoz megadott érték kisebb, mint 1. A ParameterNumber argumentumhoz megadott érték nagyobb volt, mint a hozzá tartozó SQL utasításban szereplő paraméterek száma. A paraméterjelző egy nem DML állítás része volt. A paraméterjelölő egy SELECT lista része volt. |
| 08S01 | Kommunikációs kapcsolat hibája | Az illesztőprogram és az adatforrás közötti kommunikációs kapcsolat, amelyhez az illesztőprogram csatlakoztatva volt, nem sikerült, mielőtt a függvény befejeződött a feldolgozás. |
| 21S01 | Az értéklista beszúrása nem egyezik az oszloplistával | Az állításban szereplő paraméterek INSERT száma nem egyezett a táblázatban szereplő oszlopok számával. |
| 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 *MessageText pufferben visszaadott hibaüzenet leírja a hibát és annak okát. |
| HY001 | Memóriafoglalási hiba | 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élyezve lett a StatementHandle-ben. A függvény meghívása megtörtént, és a végrehajtás befejezése előtt az SQLCancel vagy az SQLCancelHandle meghívása megtörtént az Utasításkezelőben. Ezután a függvény ismét meghívásra került az Utasításkezelőben. A függvény meghívása megtörtént, és a végrehajtás befejezése előtt az SQLCancel vagy az SQLCancelHandle egy másik szálról lett meghívva a StatementHandle-ra egy többszálas alkalmazásból. |
| HY010 | Függvényütemezési hiba | (DM) A függvényt az SQLPrepare vagy SQLExecDirect hívása előtt hívták meg a StatementHandle számára. (DM) A StatementHandle-hez társított kapcsolati leíróhoz aszinkron módon végrehajtó függvény lett meghívva. Ez az aszinkron függvény még akkor futott, amikor az SQLDescribeParam függvényt hívták. (DM) Egy aszinkron módon végrehajtó függvény (nem ez) lett meghívva az StatementHandle-hez , és a függvény meghívásakor továbbra is végrehajtó volt. (DM) SQLExecute, SQLExecDirect, SQLBulkOperations vagy SQLSetPos lett meghívva az Utasításkezelőhöz , és SQL_NEED_DATA. Ezt a függvényt az összes adatvégrehajtási paraméter vagy oszlop adatküldése előtt hívták meg. |
| HY013 | Memóriakezelési hiba | A függvényhívás nem dolgozható fel, mert a mögöttes memóriaobjektumok nem érhetők el, esetleg a memóriahiány miatt. |
| HY117 | A kapcsolat ismeretlen tranzakciós állapot miatt fel van függesztve. Csak a leválasztási és írásvédett függvények engedélyezettek. | (DM) A felfüggesztett állapotról további információt az SQLEndTran függvényben talál. |
| 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) Az StatementHandle-hez társított illesztőprogram nem támogatja a függvényt. |
| 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. |
Comments
A paraméterjelölőket egyre növekvő paramétersorrendben számozzák, 1-től kezdve, abban a sorrendben, ahogy az SQL utasításban megjelennek.
Az SQLDescribeParam nem adja vissza egy SQL utasításban található paraméter típusát (input, input/output vagy output). Kivéve az eljáráshívásokat, az SQL utasítások minden paramétere bemeneti paraméter. Az egyes paraméterek típusának meghatározásához egy eljáráshoz hívásban egy alkalmazás az SQLProcedureColumns nevű rendszert hívja.
További információért lásd: Paraméterek leírása.
Kódpélda
A következő példa SQL utasítást kér a felhasználótól, majd elkészíti azt az utasítást. Ezután az SQLNumParams hívja meg, hogy megállapítsa, tartalmaz-e paramétereket az utasítás. Ha az utasítás paramétereket tartalmaz, akkor az SQLDescribeParam-ot hívja a paraméterek leírására, és SQLBindParameter a kötéshez. Végül a felhasználó bármilyen paraméter értékét kéri, majd végrehajtja az utasítást.
SQLCHAR Statement[100];
SQLSMALLINT NumParams, i, DataType, DecimalDigits, Nullable;
SQLUINTEGER ParamSize;
SQLHSTMT hstmt;
// Prompt the user for a SQL statement and prepare it.
GetSQLStatement(Statement);
SQLPrepare(hstmt, Statement, SQL_NTS);
// Check to see if there are any parameters. If so, process them.
SQLNumParams(hstmt, &NumParams);
if (NumParams) {
// Allocate memory for three arrays. The first holds pointers to buffers in which
// each parameter value will be stored in character form. The second contains the
// length of each buffer. The third contains the length/indicator value for each
// parameter.
SQLPOINTER * PtrArray = (SQLPOINTER *) malloc(NumParams * sizeof(SQLPOINTER));
SQLINTEGER * BufferLenArray = (SQLINTEGER *) malloc(NumParams * sizeof(SQLINTEGER));
SQLINTEGER * LenOrIndArray = (SQLINTEGER *) malloc(NumParams * sizeof(SQLINTEGER));
for (i = 0; i < NumParams; i++) {
// Describe the parameter.
SQLDescribeParam(hstmt, i + 1, &DataType, &ParamSize, &DecimalDigits, &Nullable);
// Call a helper function to allocate a buffer in which to store the parameter
// value in character form. The function determines the size of the buffer from
// the SQL data type and parameter size returned by SQLDescribeParam and returns
// a pointer to the buffer and the length of the buffer.
AllocParamBuffer(DataType, ParamSize, &PtrArray[i], &BufferLenArray[i]);
// Bind the memory to the parameter. Assume that we only have input parameters.
SQLBindParameter(hstmt, i + 1, SQL_PARAM_INPUT, SQL_C_CHAR, DataType, ParamSize,
DecimalDigits, PtrArray[i], BufferLenArray[i],
&LenOrIndArray[i]);
// Prompt the user for the value of the parameter and store it in the memory
// allocated earlier. For simplicity, this function does not check the value
// against the information returned by SQLDescribeParam. Instead, the driver does
// this when the statement is executed.
GetParamValue(PtrArray[i], BufferLenArray[i], &LenOrIndArray[i]);
}
}
// Execute the statement.
SQLExecute(hstmt);
// Process the statement further, such as retrieving results (if any) and closing the
// cursor (if any). Code not shown.
// Free the memory allocated for each parameter and the memory allocated for the arrays
// of pointers, buffer lengths, and length/indicator values.
for (i = 0; i < NumParams; i++) free(PtrArray[i]);
free(PtrArray);
free(BufferLenArray);
free(LenOrIndArray);
Kapcsolódó funkciók
| Információ erről: | Nézze |
|---|---|
| Puffer kötése egy paraméterhez | SQLBindParameter függvény |
| Utasításfeldolgozás megszakítása | SQLCancel függvény |
| Előkészített SQL-utasítás végrehajtása | SQLExecute függvény |
| Utasítás előkészítése végrehajtáshoz | SQLPrepare függvény |