Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Conformiteit
Versie geïntroduceerd: ODBC 1.0 Standaardnaleving: ODBC
Samenvatting
SQLDescribeParam geeft de beschrijving terug van een parametermarker die is gekoppeld aan een voorbereide SQL-instructie. Deze informatie is ook beschikbaar in de velden van de IPD.
Syntax
SQLRETURN SQLDescribeParam(
SQLHSTMT StatementHandle,
SQLUSMALLINT ParameterNumber,
SQLSMALLINT * DataTypePtr,
SQLULEN * ParameterSizePtr,
SQLSMALLINT * DecimalDigitsPtr,
SQLSMALLINT * NullablePtr);
Arguments
StatementHandle
[Invoer] Instructiehandgreep.
ParameterNumber
[Invoer] Parametermarkernummer opeenvolgend gerangschikt in toenemende parametervolgorde, beginnend bij 1.
DataTypePtr
[Output] Wijs naar een buffer waarin het SQL-datatype van de parameter wordt teruggegeven. Deze waarde wordt gelezen uit het SQL_DESC_CONCISE_TYPE recordveld van de IPD. Dit zal een van de waarden zijn in de sectie SQL Data Types van Appendix D: Data Types, of een driver-specifiek SQL-datatype.
In ODBC 3. x, SQL_TYPE_DATE, SQL_TYPE_TIME of SQL_TYPE_TIMESTAMP worden respectievelijk teruggegeven in *DataTypePtr voor datum-, tijd- of tijdstempelgegevens; in ODBC 2. X, SQL_DATE, SQL_TIME of SQL_TIMESTAMP worden teruggegeven. De Driver Manager voert de vereiste mappings uit wanneer een ODBC 2 is. x applicatie werkt met een ODBC 3. x driver of wanneer een ODBC 3. x-applicatie werkt met een ODBC 2. X-bestuurder .
Wanneer ColumnNumber gelijk is aan 0 (voor een bladwijzerkolom), wordt SQL_BINARY teruggegeven in *DataTypePtr voor bladwijzers van variabele lengte. (SQL_INTEGER wordt teruggegeven als bladwijzers worden gebruikt door een ODBC 3. x applicatie die werkt met een ODBC 2. x driver of door een ODBC 2. x applicatie die werkt met een ODBC 3. X-bestuurder .)
Voor meer informatie, zie SQL Data Types in Appendix D: Data Types. Zie de documentatie van het stuurprogramma voor informatie over stuurprogrammaspecifieke SQL-gegevenstypen.
ParameterSizePtr
[Output] Wijs naar een buffer waarin de grootte, in tekens, van de kolom of expressie van de overeenkomstige parametermarker zoals gedefinieerd door de databron wordt teruggegeven. Voor meer informatie over kolomgrootte, zie Kolomgrootte, Decimale cijfers, Overdracht van de octelengte en Weergavegrootte.
DecimalDigitsPtr
[Output] Richt op een buffer waarin het aantal decimale cijfers van de kolom of uitdrukking van de overeenkomstige parameter wordt teruggegeven zoals gedefinieerd door de databron. Voor meer informatie over decimale cijfers, zie Kolomgrootte, Decimale cijfers, Transfer Octet Length en Display Size.
NullablePtr
[Output] Wijs naar een buffer waarin een waarde wordt teruggegeven die aangeeft of de parameter NULL-waarden toestaat. Deze waarde wordt gelezen uit het SQL_DESC_NULLABLE veld van de IPD. Een van de volgende:
SQL_NO_NULLS: De parameter staat geen NULL-waarden toe (dit is de standaardwaarde).
SQL_NULLABLE: De parameter staat NULL-waarden toe.
SQL_NULLABLE_UNKNOWN: De driver kan niet bepalen of de parameter NULL-waarden toestaat.
Returns
SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_STILL_EXECUTING, SQL_ERROR of SQL_INVALID_HANDLE.
Diagnostics
Wanneer SQLDescribeParam SQL_ERROR of SQL_SUCCESS_WITH_INFO teruggeeft, kan een bijbehorende SQLSTATE-waarde worden verkregen door SQLGetDiagRec aan te roepen met een HandleType van SQL_HANDLE_STMT en een Handle van StatementHandle. De volgende tabel geeft een overzicht van de SQLSTATE-waarden die typisch door SQLDescribeParam worden geretourneerd en legt elk uit in de context van deze functie; de notatie "(DM)" gaat vooraf aan de beschrijvingen van SQLSTATES die door de Driver Manager worden teruggegeven. De retourcode die is gekoppeld aan elke SQLSTATE-waarde is SQL_ERROR, tenzij anders vermeld.
| SQLSTATE | Fout | Description |
|---|---|---|
| 01000 | Algemene waarschuwing | Stuurprogrammaspecifiek informatiebericht. (Functie retourneert SQL_SUCCESS_WITH_INFO.) |
| 07009 | Ongeldige descriptorindex | (DM) De waarde die voor het argument ParameterNumber is gespecificeerd is kleiner dan 1. De waarde die voor het argument ParameterNumber werd gespecificeerd, was groter dan het aantal parameters in de bijbehorende SQL-instructie. De parametermarker maakte deel uit van een niet-DML-statement. De parametermarker maakte deel uit van een SELECT-lijst . |
| 08S01 | Communicatiekoppelingsfout | De communicatiekoppeling tussen het stuurprogramma en de gegevensbron waarmee het stuurprogramma is verbonden, is mislukt voordat de verwerking van de functie is voltooid. |
| 21S01 | Lijst met waarden invoegen komt niet overeen met de kolomlijst | Het aantal parameters in de INSERT verklaring kwam niet overeen met het aantal kolommen in de tabel die in de verklaring werd genoemd. |
| HY000 | Algemene fout | Er is een fout opgetreden waarvoor er geen specifieke SQLSTATE is en waarvoor geen implementatiespecifieke SQLSTATE is gedefinieerd. Het foutbericht dat door SQLGetDiagRec in de *MessageText-buffer wordt geretourneerd, beschrijft de fout en de oorzaak ervan. |
| HY001 | Fout bij geheugentoewijzing | Het stuurprogramma kan geen geheugen toewijzen dat vereist is om de uitvoering of voltooiing van de functie te ondersteunen. |
| HY008 | Bewerking geannuleerd | Asynchrone verwerking is ingeschakeld voor de StatementHandle. De functie is aangeroepen en voordat de uitvoering is voltooid, werd SQLCancel of SQLCancelHandle aangeroepen op de StatementHandle. Vervolgens werd de functie opnieuw aangeroepen op de StatementHandle. De functie is aangeroepen en voordat de uitvoering is voltooid, werd SQLCancel of SQLCancelHandle aangeroepen op de StatementHandle vanuit een andere thread in een multithread-toepassing. |
| HY010 | Fout in functiereeks | (DM) De functie werd aangeroepen voordat SQLPrepare of SQLExecDirect werd aangeroepen voor de StatementHandle. (DM) Er is een asynchroon uitgevoerde functie aangeroepen voor de verbindingsgreep die is gekoppeld aan de StatementHandle. Deze asynchrone functie werd nog uitgevoerd toen de SQLDescribeParam-functie werd aangeroepen. (DM) Er is een asynchroon uitgevoerde functie (niet deze) aangeroepen voor de StatementHandle en werd nog steeds uitgevoerd toen deze functie werd aangeroepen. (DM) SQLExecute, SQLExecDirect, SQLBulkOperations of SQLSetPos werd aangeroepen voor de StatementHandle en geretourneerd SQL_NEED_DATA. Deze functie is aangeroepen voordat gegevens werden verzonden voor alle parameters of kolommen voor uitvoering van gegevens. |
| HY013 | Fout bij geheugenbeheer | De functie-aanroep kan niet worden verwerkt omdat de onderliggende geheugenobjecten niet kunnen worden geopend, mogelijk vanwege weinig geheugen. |
| HY117 | De verbinding is onderbroken vanwege een onbekende transactiestatus. Alleen de verbinding verbreken en alleen-lezenfuncties zijn toegestaan. | (DM) Zie SQLEndTran Function voor meer informatie over de onderbroken status. |
| HYT01 | Time-out voor de verbinding is overschreden | De time-outperiode voor de verbinding is verlopen voordat de gegevensbron op de aanvraag heeft gereageerd. De time-outperiode voor de verbinding wordt ingesteld via SQLSetConnectAttr, SQL_ATTR_CONNECTION_TIMEOUT. |
| IM001 | Stuurprogramma biedt geen ondersteuning voor deze functie | (DM) Het stuurprogramma dat is gekoppeld aan de StatementHandle biedt geen ondersteuning voor de functie. |
| IM017 | Polling is uitgeschakeld in de asynchrone meldingsmodus | Wanneer het meldingsmodel wordt gebruikt, wordt polling uitgeschakeld. |
| IM018 | SQLCompleteAsync is niet aangeroepen om de vorige asynchrone bewerking op deze ingang te voltooien. | Als de vorige functieaanroep op de ingang SQL_STILL_EXECUTING retourneert en als de meldingsmodus is ingeschakeld, moet SQLCompleteAsync worden aangeroepen op de ingang om naverwerking te kunnen uitvoeren en de bewerking te voltooien. |
Comments
Parametermarkers worden genummerd in toenemende parametervolgorde, beginnend met 1, in de volgorde waarin ze in de SQL-instructie voorkomen.
SQLDescribeParam geeft het type (input, input/output of output) van een parameter in een SQL-instructie niet terug. Behalve bij aanroepen van procedures zijn alle parameters in SQL-statements invoerparameters. Om het type van elke parameter in een aanroep van een procedure te bepalen, roept een applicatie SQLProcedureColumns aan.
Voor meer informatie, zie Parameters beschrijven.
Codevoorbeeld
Het volgende voorbeeld vraagt de gebruiker om een SQL-instructie en bereidt die vervolgens voor. Vervolgens roept het SQLNumParams aan om te bepalen of de instructie parameters bevat. Als de instructie parameters bevat, roept het SQLDescribeParam aan om die parameters te beschrijven en SQLBindParameter om ze te binden. Ten slotte vraagt het de gebruiker om de waarden van eventuele parameters en voert vervolgens de instructie uit.
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);
Gerelateerde functies
| Voor informatie over | Zien! |
|---|---|
| Een buffer binden aan een parameter | SQLBindParameter-functie |
| Verwerking van instructie annuleren | SQLCancel, functie |
| Een voorbereide SQL-instructie uitvoeren | SQLExecute, functie |
| Een instructie voorbereiden voor uitvoering | SQLPrepare, functie |