Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Överensstämmelse
Version introducerad: ODBC 1.0 Standardefterlevnad: ISO 92
Summary
SQLDescribeCol returnerar resultatbeskrivaren – kolumnnamn, typ, kolumnstorlek, decimalsiffror och nullbarhet – för en kolumn i resultatuppsättningen. Denna information finns också tillgänglig inom IRD:s områden.
Syntax
SQLRETURN SQLDescribeCol(
SQLHSTMT StatementHandle,
SQLUSMALLINT ColumnNumber,
SQLCHAR * ColumnName,
SQLSMALLINT BufferLength,
SQLSMALLINT * NameLengthPtr,
SQLSMALLINT * DataTypePtr,
SQLULEN * ColumnSizePtr,
SQLSMALLINT * DecimalDigitsPtr,
SQLSMALLINT * NullablePtr);
Arguments
StatementHandle
[Indata] Instruktionshandtag.
Kolumnnummer
[Input] Kolumnnummer för resultatdata, ordnat sekventiellt i ökande kolumnordning, med start från 1.
Argumentet ColumnNumber kan också sättas till 0 för att beskriva bokmärkeskolumnen.
KolumnNamn
[Utdata] Pekare till en nollterminerad buffert där kolumnnamnet ska returneras. Detta värde läses från IRD:ns SQL_DESC_NAME fält. Om kolumnen är namnlös eller kolumnnamnet inte kan bestämmas, returnerar drivrutinen en tom sträng.
Om ColumnName är NULL kommer NameLengthPtr ändå att returnera det totala antalet tecken (exklusive null-termineringstecknet för teckendata) som finns tillgängliga att returnera i bufferten som ColumnName pekar på.
BufferLength
[Input] Längden på *ColumnName-bufferten , i tecken.
NameLengthPtr
[Utdata] Pekare till en buffert där det totala antalet tecken (exklusive null-termination) kan returneras i *KolumnNamn. Om antalet tecken som kan returneras är större än eller lika med BufferLength, förkortas kolumnnamnet i *ColumnName till BufferLength minus längden på ett null-termineringstecken.
DataTypePtr
[Utdata] Peka till en buffert där man returnerar kolumnens SQL-datatyp. Detta värde läses från IRD:ns SQL_DESC_CONCISE_TYPE fält. Detta kommer att vara ett av värdena i SQL Data Types, eller en drivrutinsspecifik SQL-datatyp. Om datatypen inte kan bestämmas, returnerar drivrutinen SQL_UNKNOWN_TYPE.
I ODBC 3. x, SQL_TYPE_DATE, SQL_TYPE_TIME eller SQL_TYPE_TIMESTAMP returneras i *DataTypePtr för datum-, tid- eller tidsstämpeldata, respektive; i ODBC 2. x, SQL_DATE, SQL_TIME eller SQL_TIMESTAMP returneras. Driver Manager utför de nödvändiga mappningarna när en ODBC 2 är en dator. x applikation fungerar med en ODBC 3. x-drivrutin eller när en ODBC 3. x-applikationen fungerar med en ODBC 2. X-drivrutin .
När Kolumnnummer är lika med 0 (för en bokmärkeskolumn) returneras SQL_BINARY i *DataTypePtr för bokmärken med variabel längd. (SQL_INTEGER returneras om bokmärken används av en ODBC 3. x applikation som fungerar med en ODBC 2. x driver eller av en ODBC 2. x applikation som fungerar med en ODBC 3. X-drivrutin .)
För mer information om dessa datatyper, se SQL Data Types i Appendix D: Data Types. Information om drivrutinsspecifika SQL-datatyper finns i drivrutinsdokumentationen.
ColumnSizePtr
[Utdata] Pekare till en buffert där man returnerar kolumnens storlek (i tecken) på datakällan. Om kolumnstorleken inte kan bestämmas, returnerar drivrutinen 0. För mer information om kolumnstorlek, se Kolumnstorlek, decimalsiffror, Transfer Oktett Length och Display Size i Appendix D: Data Types.
DecimalDigitsPtr
[Utdata] Pekare till en buffert där man returnerar antalet decimalsiffror i kolumnen på datakällan. Om antalet decimalsiffror inte kan bestämmas eller inte är tillämpligt, returnerar föraren 0. För mer information om decimalsiffror, se Kolumnstorlek, Decimalsiffror, Överföring av oktettlängd och Visningsstorlek i Appendix D: Datatyper.
NullablePtr
[Utdata] Pekare till en buffert där ett värde returneras som visar om kolumnen tillåter NULL-värden. Detta värde läses från IRD:ns SQL_DESC_NULLABLE fält. Värdet är något av följande:
SQL_NO_NULLS: Kolumnen tillåter inte NULL-värden.
SQL_NULLABLE: Kolumnen tillåter NULL-värden.
SQL_NULLABLE_UNKNOWN: Drivrutinen kan inte avgöra om kolumnen tillåter NULL-värden.
Returns
SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_STILL_EXECUTING, SQL_ERROR eller SQL_INVALID_HANDLE.
Diagnostics
När SQLDescribeCol returnerar antingen SQL_ERROR eller SQL_SUCCESS_WITH_INFO kan ett associerat SQLSTATE-värde erhållas genom att anropa SQLGetDiagRec med en HandleType av SQL_HANDLE_STMT och ett Handle of StatementHandle. Följande tabell listar de SQLSTATE-värden som vanligtvis returneras av SQLDescribeCol och förklarar var och en i kontexten av denna funktion; notationen "(DM)" föregår beskrivningarna av SQLSTATE som returneras av Driver Manager. Returkoden som är associerad med varje SQLSTATE-värde är SQL_ERROR, om inget annat anges.
| SQLSTATE | Error | Description |
|---|---|---|
| 01000 | Allmän varning | Informationsmeddelande för drivrutinsspecifikt. (Funktionen returnerar SQL_SUCCESS_WITH_INFO.) |
| 01004 | Strängdata, höger trunkerade | Bufferten *ColumnName var inte tillräckligt stor för att returnera hela kolumnnamnet, så kolumnnamnet förkortades. Längden på det oavkapade kolumnnamnet returneras i *NameLengthPtr. (Funktionen returnerar SQL_SUCCESS_WITH_INFO.) |
| 07005 | Prepared-satsen, inte en markörspecifikation | Satsen som var kopplad till StatementHandle returnerade inte en resultatuppsättning. Det fanns inga kolumner att beskriva. |
| 07009 | Ogiltigt deskriptorindex | (DM) Värdet som angavs för argumentet Kolumnnummer var lika med 0, och alternativet SQL_ATTR_USE_BOOKMARKS sats var SQL_UB_OFF. Värdet som angavs för argumentet ColumnNumber var större än antalet kolumner i resultatuppsättningen. |
| 08S01 | Kommunikationslänkfel | Kommunikationslänken mellan drivrutinen och datakällan som drivrutinen var ansluten till misslyckades innan funktionen slutförde bearbetningen. |
| HY000 | Allmänt fel | Ett fel uppstod för vilket det inte fanns någon specifik SQLSTATE och för vilken ingen implementeringsspecifik SQLSTATE definierades. Felmeddelandet som returnerades av SQLGetDiagRec i *MessageText-bufferten beskriver felet och dess orsak. |
| HY001 | Minnesallokeringsfel | Drivrutinen kunde inte allokera minne som krävs för körning eller slutförande av funktionen. |
| HY008 | Åtgärden avbröts | Asynkron bearbetning aktiverades för StatementHandle. Funktionen anropades och innan körningen slutfördes anropades SQLCancel eller SQLCancelHandle på StatementHandle. Sedan anropades funktionen igen på StatementHandle. Funktionen anropades och innan körningen slutfördes anropades SQLCancel eller SQLCancelHandle på StatementHandle från en annan tråd i ett flertrådsprogram. |
| HY010 | Funktionssekvensfel | (DM) En asynkront körande funktion anropades för anslutningshandtaget som är associerat med StatementHandle. Denna asynkrona funktion kördes fortfarande när SQLDescribeCol anropades. (DM) SQLExecute, SQLExecDirect eller SQLMoreResults anropades för StatementHandle och returnerades SQL_PARAM_DATA_AVAILABLE. Den här funktionen anropades innan data hämtades för alla strömmade parametrar. (DM) En asynkront körande funktion (inte den här) anropades för StatementHandle och kördes fortfarande när den här funktionen anropades. (DM) Funktionen anropades innan SQLPrepare, SQLExecute eller en katalogfunktion på satshandtaget anropades. (DM) SQLExecute, SQLExecDirect, SQLBulkOperations eller SQLSetPos anropades för StatementHandle och returnerades SQL_NEED_DATA. Den här funktionen anropades innan data skickades för alla data-at-execution-parametrar eller kolumner. |
| HY013 | Minneshanteringsfel | Det gick inte att bearbeta funktionsanropet eftersom det inte gick att komma åt underliggande minnesobjekt, möjligen på grund av minnesbrist. |
| HY090 | Ogiltig sträng- eller buffertlängd | (DM) Värdet som angavs för argumentet BufferLength var mindre än 0. |
| HY117 | Anslutningen pausas på grund av okänt transaktionstillstånd. Endast frånkopplings- och skrivskyddade funktioner tillåts. | (DM) Mer information om pausat tillstånd finns i SQLEndTran-funktion. |
| HYT01 | Tidsgränsen för anslutningen gick ut | Tidsgränsen för anslutningen löpte ut innan datakällan svarade på begäran. Tidsgränsen för anslutningen anges via SQLSetConnectAttr, SQL_ATTR_CONNECTION_TIMEOUT. |
| IM001 | Drivrutinen stöder inte den här funktionen | (DM) Drivrutinen som är associerad med StatementHandle stöder inte funktionen. |
| IM017 | Avsökning är inaktiverat i asynkront meddelandeläge | När meddelandemodellen används inaktiveras avsökningen. |
| IM018 | SQLCompleteAsync har inte anropats för att slutföra den tidigare asynkrona åtgärden på det här handtaget. | Om det tidigare funktionsanropet på handtaget returnerar SQL_STILL_EXECUTING och om meddelandeläget är aktiverat måste SQLCompleteAsync anropas på handtaget för att utföra efterbearbetningen och slutföra åtgärden. |
SQLDescribeCol kan returnera vilken SQLSTATE som helst som kan returneras av SQLPrepare eller SQLExecute när de anropas efter SQLPrepare och före SQLExecute, beroende på när datakällan utvärderar SQL-satsen kopplad till satshandtaget.
Av prestandaskäl bör en applikation inte anropa SQLDescribeCol innan en sats exekveras.
Comments
En applikation anropar vanligtvis SQLDescribeCol efter ett anrop till SQLPrepare och före eller efter det tillhörande anropet till SQLExecute. En applikation kan också anropa SQLDescribeCol efter ett anrop till SQLExecDirect. Mer information finns i Metadata för resultatuppsättning.
SQLDescribeCol hämtar kolumnnamn, typ och längd som genereras av ett SELECT-uttalande . Om kolumnen är ett uttryck är *ColumnName antingen en tom sträng eller ett drivrutinsdefinierat namn.
Note
ODBC stöder SQL_NULLABLE_UNKNOWN som en tillägg, även om Open Group och SQL Access Group Call Level Interface-specifikationen inte specificerar alternativet för SQLDescribeCol.
Relaterade funktioner
| Mer information om | Se |
|---|---|
| Binda en buffert till en kolumn i en resultatuppsättning | SQLBindCol |
| Avbryta instruktionsbearbetning | SQLCancel |
| Returnerar information om en kolumn i en resultatmängd | SQLColAttribute |
| Hämtar flera rader med data | SQLFetch |
| Returnerar antalet resultatuppsättningskolumner | SQLNumResultCols |
| Förbereda en instruktion för körning | SQLPrepare |