Dela via


SQLColAttribute-funktion

Efterlevnad
Version introducerad: ODBC 3.0 Standardefterlevnad: ISO 92

Sammanfattning
SQLColAttribute returnerar beskrivningsinformation för en kolumn i en resultatuppsättning. Beskrivningsinformation returneras som en teckensträng, ett deskriptorberoende värde eller ett heltalsvärde.

Not

Mer information om vad Driver Manager mappar den här funktionen till när en ODBC 3.x programmet fungerar med en ODBC 2.x drivrutin finns i Mappningsersättningsfunktioner för bakåtkompatibilitet för program.

Syntax

  
SQLRETURN SQLColAttribute (  
      SQLHSTMT        StatementHandle,  
      SQLUSMALLINT    ColumnNumber,  
      SQLUSMALLINT    FieldIdentifier,  
      SQLPOINTER      CharacterAttributePtr,  
      SQLSMALLINT     BufferLength,  
      SQLSMALLINT *   StringLengthPtr,  
      SQLLEN *        NumericAttributePtr);  

Argument

StatementHandle
[Indata] Instruktionshandtag.

ColumnNumber
[Indata] Numret på posten i IRD som fältvärdet ska hämtas från. Det här argumentet motsvarar kolumnantalet resultatdata, ordnade sekventiellt i ökande kolumnordning, med början 1. Kolumner kan beskrivas i valfri ordning.

Kolumn 0 kan anges i det här argumentet, men alla värden utom SQL_DESC_TYPE och SQL_DESC_OCTET_LENGTH returnerar odefinierade värden.

FieldIdentifier
[Indata] Beskrivningshandtaget. Den här referensen definierar vilket fält i IRD som ska frågas (till exempel SQL_COLUMN_TABLE_NAME).

CharacterAttributePtr
[Utdata] Pekare till en buffert där värdet ska returneras i fältet FieldIdentifier i ColumnNumber rad i IRD, om fältet är en teckensträng. Annars används inte fältet.

Om CharacterAttributePtr är NULL returnerar StringLengthPtr fortfarande det totala antalet byte (exklusive null-avslutningstecknet för teckendata) som är tillgängligt för att returnera i bufferten som pekas på av CharacterAttributePtr.

BufferLength
[Indata] Om FieldIdentifier är ett ODBC-definierat fält och CharacterAttributePtr pekar på en teckensträng eller binär buffert, bör det här argumentet vara längden på *CharacterAttributePtr. Om FieldIdentifier är ett ODBC-definierat fält och *CharacterAttributePtr är ett heltal ignoreras det här fältet. Om *CharacterAttributePtr är en Unicode-sträng (när du anropar SQLColAttributeW) måste argumentet BufferLength vara ett jämnt tal. Om FieldIdentifier är ett drivrutinsdefinierat fält anger programmet fältets natur till Driver Manager genom att ange argumentet BufferLength. BufferLength kan ha följande värden:

  • Om CharacterAttributePtr är en pekare till en pekare bör BufferLength ha värdet SQL_IS_POINTER.

  • Om CharacterAttributePtr är en pekare till en teckensträng är BufferLength längden på bufferten.

  • Om CharacterAttributePtr är en pekare till en binär buffert placerar programmet resultatet av makrot SQL_LEN_BINARY_ATTR(längd) i BufferLength. Detta placerar ett negativt värde i BufferLength.

  • Om CharacterAttributePtr är en pekare till en datatyp med fast längd måste BufferLength vara något av följande: SQL_IS_INTEGER, SQL_IS_UINTEGER, SQL_IS_SMALLINT eller SQL_IS_USMALLINT.

StringLengthPtr
[Utdata] Pekare till en buffert där det totala antalet byte (exklusive null-avslutningsbyte för teckendata) ska returneras i *CharacterAttributePtr.

Om antalet tillgängliga byte för teckendata är större än eller lika med BufferLengthtrunkeras beskrivningsinformationen i *CharacterAttributePtr till BufferLength- minus längden på ett null-avslutningstecken och är null-avslutad av drivrutinen.

För alla andra typer av data ignoreras värdet för BufferLength och drivrutinen antar att storleken på *CharacterAttributePtr är 32 bitar.

NumericAttributePtr
[Utdata] Pekare till en heltalsbuffert där värdet returneras i fältet FieldIdentifier i ColumnNumber rad i IRD, om fältet är en numerisk beskrivningstyp, till exempel SQL_DESC_COLUMN_LENGTH. Annars används inte fältet. Observera att vissa drivrutiner bara kan skriva den nedre 32-bitars eller 16-bitars bufferten och lämna biten i högre ordning oförändrad. Därför bör program initiera värdet till 0 innan den här funktionen anropas.

Returnerar

SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_STILL_EXECUTING, SQL_ERROR eller SQL_INVALID_HANDLE.

Diagnostik

När SQLColAttribute returnerar antingen SQL_ERROR eller SQL_SUCCESS_WITH_INFO kan ett associerat SQLSTATE-värde hämtas genom att anropa SQLGetDiagRec med en HandleType- av SQL_HANDLE_STMT och en Hantera av StatementHandle. I följande tabell visas de SQLSTATE-värden som ofta returneras av SQLColAttribute och förklarar var och en i kontexten för den här funktionen. notationen "(DM)" föregår beskrivningarna av SQLSTATEs som returneras av Driver Manager. Returkoden som är associerad med varje SQLSTATE-värde är SQL_ERROR, om inget annat anges.

SQLSTATE Fel Beskrivning
01000 Allmän varning Informationsmeddelande för drivrutinsspecifikt. (Funktionen returnerar SQL_SUCCESS_WITH_INFO.)
01004 Strängdata, höger trunkerade Bufferten *CharacterAttributePtr var inte tillräckligt stor för att returnera hela strängvärdet, så strängvärdet trunkerades. Längden på det diskreta strängvärdet returneras i *StringLengthPtr. (Funktionen returnerar SQL_SUCCESS_WITH_INFO.)
07005 Förberedd instruktion är inte en markörspecifikation Instruktionen som är associerad med StatementHandle- returnerade inte någon resultatuppsättning och FieldIdentifier inte SQL_DESC_COUNT. Det fanns inga kolumner att beskriva.
07009 Ogiltigt deskriptorindex (DM) Värdet som angavs för ColumnNumber var lika med 0 och SQL_ATTR_USE_BOOKMARKS-instruktionsattributet var SQL_UB_OFF.

Värdet som angavs för argumentet ColumnNumber var större än antalet kolumner i resultatuppsättningen.
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 returneras av SQLGetDiagField från diagnostikdatastrukturen beskriver felet och orsaken.
HY001 Fel vid minnesallokering 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 SQLCancelHandleStatementHandle-. Sedan anropades funktionen igen på StatementHandle-.

Funktionen anropades och innan körningen slutfördes anropades SQLCancel eller SQLCancelHandleStatementHandle- 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-. Den här asynkrona funktionen kördes fortfarande när SQLColAttribute anropades.

(DM) SQLExecute, SQLExecDirecteller 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) Funktionen anropades innan den anropade SQLPrepare, SQLExecDirecteller en katalogfunktion för StatementHandle.

(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) SQLExecute, SQLExecDirect, SQLBulkOperationseller 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) *CharacterAttributePtr är en teckensträng och BufferLength var mindre än 0 men inte lika med SQL_NTS.
HY091 Ogiltig deskriptorfältidentifierare Värdet som angavs för argumentet FieldIdentifier inte var ett av de definierade värdena och var inte ett implementeringsdefinierat värde.
HY117 Anslutningen pausas på grund av okänt transaktionstillstånd. Endast frånkopplings- och skrivskyddade funktioner tillåts. (DM) Mer information om inaktiverat tillstånd finns i SQLEndTran Function.
HYC00 Drivrutinen kan inte Värdet som angavs för argumentet FieldIdentifier stöds inte av drivrutinen.
HYT01 Tidsgränsen för anslutningen har upphört att gälla 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å 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.

När det anropas efter SQLPrepare och före SQLExecutekan SQLColAttribute returnera valfri SQLSTATE som kan returneras av SQLPrepare eller SQLExecute, beroende på när datakällan utvärderar SQL-instruktionen som är associerad med StatementHandle.

Av prestandaskäl bör ett program inte anropa SQLColAttribute- innan en instruktion körs.

Kommentarer

Information om hur program använder informationen som returneras av SQLColAttributefinns i Metadata för resultatuppsättningar.

SQLColAttribute returnerar information antingen i *NumericAttributePtr eller i *CharacterAttributePtr. Heltalsinformation returneras i *NumericAttributePtr som ett SQLLEN-värde. alla andra informationsformat returneras i *CharacterAttributePtr. När information returneras i *NumericAttributePtrignorerar drivrutinen CharacterAttributePtr, BufferLengthoch StringLengthPtr. När information returneras i *CharacterAttributePtrignorerar drivrutinen NumericAttributePtr.

SQLColAttribute returnerar värden från deskriptorfälten i IRD. Funktionen anropas med ett instruktionshandtag i stället för ett beskrivande handtag. Värdena som returneras av SQLColAttribute för FieldIdentifier värden som anges senare i det här avsnittet kan också hämtas genom att anropa SQLGetDescField med lämplig IRD-referens.

De för närvarande definierade deskriptorfälten, den version av ODBC som de introducerades i och argumenten där information returneras för dem visas senare i det här avsnittet. fler deskriptortyper kan definieras av drivrutiner för att dra nytta av olika datakällor.

En ODBC 3.x drivrutin måste returnera ett värde för vart och ett av deskriptorfälten. Om ett deskriptorfält inte gäller för en drivrutin eller datakälla och om inget annat anges returnerar drivrutinen 0 i *StringLengthPtr eller en tom sträng i *CharacterAttributePtr.

Bakåtkompatibilitet

ODBC 3.x-funktionen SQLColAttribute ersätter den inaktuella ODBC 2.x funktion SQLColAttributes. När du mappar SQLColAttributes till SQLColAttribute (när ett ODBC 2.x-program fungerar med en ODBC 3.x drivrutin) eller mappning SQLColAttribute till SQLColAttributes (när ett ODBC 3.x-program fungerar med en ODBC 2.x drivrutin) skickar Driver Manager antingen värdet för FieldIdentifier igenom, mappar det till ett nytt värde eller returnerar ett fel enligt följande:

Not

Prefixet som används i FieldIdentifier värden i ODBC 3.x har ändrats från den som används i ODBC 2.x. Det nya prefixet är "SQL_DESC"; det gamla prefixet var "SQL_COLUMN".

  • Om #define värdet för ODBC 2.xFieldIdentifier är samma som #define värdet för ODBC 3.xFieldIdentifierskickas värdet i funktionsanropet.

  • De #define värdena för ODBC 2.xFieldIdentifiers SQL_COLUMN_LENGTH, SQL_COLUMN_PRECISION och SQL_COLUMN_SCALE skiljer sig från de #define värdena för ODBC 3.xFieldIdentifiers SQL_DESC_PRECISION, SQL_DESC_SCALE och SQL_DESC_LENGTH. En ODBC 2.x drivrutin behöver endast stöd för ODBC 2.x värden. En ODBC 3.x-drivrutin måste ha stöd för både "SQL_COLUMN" och "SQL_DESC"-värden för dessa tre FieldIdentifiers. Dessa värden skiljer sig eftersom precision, skala och längd definieras på olika sätt i ODBC 3.x än i ODBC 2.x. Mer information finns i Kolumnstorlek, Decimalsiffror, Överför oktettlängd och Visningsstorlek.

  • Om #define värdet för ODBC 2.xFieldIdentifier skiljer sig från #define värdet för ODBC 3.xFieldIdentifier, som inträffar med värdena COUNT, NAME och NULLABLE mappas värdet i funktionsanropet till motsvarande värde. Till exempel mappas SQL_COLUMN_COUNT till SQL_DESC_COUNT och SQL_DESC_COUNT mappas till SQL_COLUMN_COUNT, beroende på mappningens riktning.

  • Om FieldIdentifier är ett nytt värde i ODBC 3.x, där det inte fanns något motsvarande värde i ODBC 2.xmappas den inte när en ODBC 3.x-programmet använder det i ett anrop till SQLColAttribute i en ODBC 2.x drivrutin och anropet returnerar SQLSTATE HY091 (ogiltig deskriptorfältidentifierare).

I följande tabell visas de beskrivningstyper som returneras av SQLColAttribute. Typen för NumericAttributePtr värden är SQLLEN *.

FieldIdentifier Information

returneras i
Beskrivning
SQL_DESC_AUTO_UNIQUE_VALUE (ODBC 1.0) NumericAttributePtr SQL_TRUE om kolumnen är en kolumn för automatisk inkrementering.

SQL_FALSE om kolumnen inte är en automatisk kolumn eller inte är numerisk.

Det här fältet är endast giltigt för kolumner av numerisk datatyp. Ett program kan infoga värden i en rad som innehåller en autoincrement-kolumn, men kan vanligtvis inte uppdatera värden i kolumnen.

När en infogning görs i en kolumn för automatisk inmatning infogas ett unikt värde i kolumnen vid infogningstillfället. Inkrementet har inte definierats, men är datakällans specifika. Ett program bör inte förutsätta att en kolumn för automatisk inkrement startar vid en viss punkt eller ökar med ett visst värde.
SQL_DESC_BASE_COLUMN_NAME (ODBC 3.0) CharacterAttributePtr Baskolumnnamnet för resultatuppsättningskolumnen. Om det inte finns något baskolumnnamn (som i fallet med kolumner som är uttryck) innehåller den här variabeln en tom sträng.

Den här informationen returneras från fältet SQL_DESC_BASE_COLUMN_NAME post i IRD, som är ett skrivskyddat fält.
SQL_DESC_BASE_TABLE_NAME (ODBC 3.0) CharacterAttributePtr Namnet på den bastabell som innehåller kolumnen. Om bastabellnamnet inte kan definieras eller inte är tillämpligt innehåller den här variabeln en tom sträng.

Den här informationen returneras från fältet SQL_DESC_BASE_TABLE_NAME post i IRD, som är ett skrivskyddat fält.
SQL_DESC_CASE_SENSITIVE (ODBC 1.0) NumericAttributePtr SQL_TRUE om kolumnen behandlas som skiftlägeskänslig för sortering och jämförelser.

SQL_FALSE om kolumnen inte behandlas som skiftlägeskänslig för sortering och jämförelser eller om den inte är okarakter.
SQL_DESC_CATALOG_NAME (ODBC 2.0) CharacterAttributePtr Katalogen för tabellen som innehåller kolumnen. Det returnerade värdet är implementeringsdefinierat om kolumnen är ett uttryck eller om kolumnen är en del av en vy. Om datakällan inte stöder kataloger eller om katalognamnet inte kan fastställas returneras en tom sträng. Det här VARCHAR-postfältet är inte begränsat till 128 tecken.
SQL_DESC_CONCISE_TYPE (ODBC 1.0) NumericAttributePtr Den koncisa datatypen.

För datatyperna datetime och interval returnerar det här fältet den koncisa datatypen. till exempel SQL_TYPE_TIME eller SQL_INTERVAL_YEAR. (Mer information finns i Identifierare och deskriptorer för datatyp i bilaga D: Datatyper.)

Den här informationen returneras från fältet SQL_DESC_CONCISE_TYPE post i IRD.
SQL_DESC_COUNT (ODBC 1.0) NumericAttributePtr Antalet tillgängliga kolumner i resultatuppsättningen. Detta returnerar 0 om det inte finns några kolumner i resultatuppsättningen. Värdet i argumentet ColumnNumber ignoreras.

Den här informationen returneras från fältet SQL_DESC_COUNT rubrik i IRD.
SQL_DESC_DISPLAY_SIZE (ODBC 1.0) NumericAttributePtr Maximalt antal tecken som krävs för att visa data från kolumnen. Mer information om visningsstorlek finns i Kolumnstorlek, Decimalsiffror, Överför oktettlängd och Visningsstorlek i bilaga D: Datatyper.
SQL_DESC_FIXED_PREC_SCALE (ODBC 1.0) NumericAttributePtr SQL_TRUE om kolumnen har en fast precisions- och icke-zeroskala som är datakällspecifik.

SQL_FALSE om kolumnen inte har en fast precisions- och icke-nollskalning som är datakällspecifik.
SQL_DESC_LABEL (ODBC 2.0) CharacterAttributePtr Kolumnetiketten eller rubriken. En kolumn med namnet EmpName kan till exempel vara märkt Medarbetarnamn eller vara märkt med ett alias.

Om en kolumn inte har någon etikett returneras kolumnnamnet. Om kolumnen är omärkt och namnlös returneras en tom sträng.
SQL_DESC_LENGTH (ODBC 3.0) NumericAttributePtr Ett numeriskt värde som antingen är den maximala eller faktiska teckenlängden för en teckensträng eller en binär datatyp. Det är den maximala teckenlängden för en datatyp med fast längd eller den faktiska teckenlängden för en datatyp med variabel längd. Värdet exkluderar alltid null-avslutningsbytet som avslutar teckensträngen.

Den här informationen returneras från fältet SQL_DESC_LENGTH post i IRD.

Mer information om längd finns i Kolumnstorlek, Decimaltal, Överför oktettlängd och Visningsstorlek i bilaga D: Datatyper.
SQL_DESC_LITERAL_PREFIX (ODBC 3.0) CharacterAttributePtr Det här varchar-postfältet (128) innehåller det tecken eller tecken som drivrutinen känner igen som ett prefix för en literal av den här datatypen. Det här fältet innehåller en tom sträng för en datatyp för vilken ett literalprefix inte är tillämpligt. Mer information finns i Literal Prefixes and Suffixes.
SQL_DESC_LITERAL_SUFFIX (ODBC 3.0) CharacterAttributePtr Det här VARCHAR(128)-postfältet innehåller det tecken eller tecken som drivrutinen känner igen som ett suffix för en literal av den här datatypen. Det här fältet innehåller en tom sträng för en datatyp för vilken ett literalsuffix inte är tillämpligt. Mer information finns i Literal Prefixes and Suffixes.
SQL_DESC_LOCAL_TYPE_NAME (ODBC 3.0) CharacterAttributePtr Det här VARCHAR-postfältet (128) innehåller valfritt lokaliserat namn (internt språk) för datatypen som kan skilja sig från datatypens vanliga namn. Om det inte finns något lokaliserat namn returneras en tom sträng. Det här fältet är endast i visningssyfte. Strängens teckenuppsättning är språkberoende och är vanligtvis serverns standardteckenuppsättning.
SQL_DESC_NAME (ODBC 3.0) CharacterAttributePtr Kolumnaliaset, om det gäller. Om kolumnaliaset inte gäller returneras kolumnnamnet. I båda fallen är SQL_DESC_UNNAMED inställt på SQL_NAMED. Om det inte finns något kolumnnamn eller ett kolumnalias returneras en tom sträng och SQL_DESC_UNNAMED anges till SQL_UNNAMED.

Den här informationen returneras från fältet SQL_DESC_NAME post i IRD.
SQL_DESC_NULLABLE (ODBC 3.0) NumericAttributePtr SQL_ NULLABLE om kolumnen kan ha NULL-värden. SQL_NO_NULLS om kolumnen inte har NULL-värden. eller SQL_NULLABLE_UNKNOWN om det inte är känt om kolumnen accepterar NULL-värden.

Den här informationen returneras från fältet SQL_DESC_NULLABLE post i IRD.
SQL_DESC_NUM_PREC_RADIX (ODBC 3.0) NumericAttributePtr Om datatypen i fältet SQL_DESC_TYPE är en ungefärlig numerisk datatyp innehåller det här SQLINTEGER-fältet värdet 2 eftersom fältet SQL_DESC_PRECISION innehåller antalet bitar. Om datatypen i fältet SQL_DESC_TYPE är en exakt numerisk datatyp innehåller det här fältet värdet 10 eftersom det SQL_DESC_PRECISION fältet innehåller antalet decimalsiffror. Det här fältet är inställt på 0 för alla icke-numeriska datatyper.
SQL_DESC_OCTET_LENGTH (ODBC 3.0) NumericAttributePtr Längden, i byte, på en teckensträng eller binär datatyp. För tecken med fast längd eller binära typer är detta den faktiska längden i byte. För variabellängdstecken eller binära typer är detta den maximala längden i byte. Det här värdet inkluderar inte null-avslutningen.

Den här informationen returneras från fältet SQL_DESC_OCTET_LENGTH post i IRD.

Mer information om längd finns i Kolumnstorlek, Decimaltal, Överför oktettlängd och Visningsstorlek i bilaga D: Datatyper.
SQL_DESC_PRECISION (ODBC 3.0) NumericAttributePtr Ett numeriskt värde som för en numerisk datatyp anger tillämplig precision. För datatyper SQL_TYPE_TIME, SQL_TYPE_TIMESTAMP och alla intervalldatatyper som representerar ett tidsintervall är dess värde den tillämpliga precisionen för komponenten fractional seconds.

Den här informationen returneras från fältet SQL_DESC_PRECISION post i IRD.
SQL_DESC_SCALE (ODBC 3.0) NumericAttributePtr Ett numeriskt värde som är tillämplig skala för en numerisk datatyp. För DECIMAL- och NUMERIC-datatyper är detta den definierade skalan. Den är odefinierad för alla andra datatyper.

Den här informationen returneras från fältet SCALE-post i IRD.
SQL_DESC_SCHEMA_NAME (ODBC 2.0) CharacterAttributePtr Schemat för tabellen som innehåller kolumnen. Det returnerade värdet är implementeringsdefinierat om kolumnen är ett uttryck eller om kolumnen är en del av en vy. Om datakällan inte stöder scheman eller om schemanamnet inte kan fastställas returneras en tom sträng. Det här VARCHAR-postfältet är inte begränsat till 128 tecken.
SQL_DESC_SEARCHABLE (ODBC 1.0) NumericAttributePtr SQL_PRED_NONE om kolumnen inte kan användas i en WHERE-sats. (Detta är samma som värdet för SQL_UNSEARCHABLE i ODBC 2.x.)

SQL_PRED_CHAR om kolumnen kan användas i en WHERE-sats men bara med LIKE-predikatet. (Detta är samma som värdet för SQL_LIKE_ONLY i ODBC 2.x.)

SQL_PRED_BASIC om kolumnen kan användas i en WHERE-sats med alla jämförelseoperatorer utom LIKE. (Detta är samma som värdet för SQL_EXCEPT_LIKE i ODBC 2.x.)

SQL_PRED_SEARCHABLE om kolumnen kan användas i en WHERE-sats med någon jämförelseoperator.

Kolumner av typen SQL_LONGVARCHAR och SQL_LONGVARBINARY returnerar vanligtvis SQL_PRED_CHAR.
SQL_DESC_TABLE_NAME (ODBC 2.0) CharacterAttributePtr Namnet på tabellen som innehåller kolumnen. Det returnerade värdet är implementeringsdefinierat om kolumnen är ett uttryck eller om kolumnen är en del av en vy.

Om tabellnamnet inte kan fastställas returneras en tom sträng.
SQL_DESC_TYPE (ODBC 3.0) NumericAttributePtr Ett numeriskt värde som anger SQL-datatypen.

När ColumnNumber är lika med 0 returneras SQL_BINARY för bokmärken med variabel längd och SQL_INTEGER returneras för bokmärken med fast längd.

För datatyperna datetime och interval returnerar det här fältet den utförliga datatypen: SQL_DATETIME eller SQL_INTERVAL. (Mer information finns i Identifierare och deskriptorer för datatyp i bilaga D: Datatyper.

Den här informationen returneras från fältet SQL_DESC_TYPE post i IRD. Obs! Att arbeta mot ODBC 2.x drivrutiner använder du SQL_DESC_CONCISE_TYPE i stället.
SQL_DESC_TYPE_NAME (ODBC 1.0) CharacterAttributePtr Namn på datakällaberoende datatyp; till exempel "CHAR", "VARCHAR", "MONEY", "LONG VARBINARY" eller "CHAR ( ) FOR BIT DATA".

Om typen är okänd returneras en tom sträng.
SQL_DESC_UNNAMED (ODBC 3.0) NumericAttributePtr SQL_NAMED eller SQL_UNNAMED. Om det SQL_DESC_NAME fältet i IRD innehåller ett kolumnalias eller ett kolumnnamn returneras SQL_NAMED. Om det inte finns något kolumnnamn eller kolumnalias returneras SQL_UNNAMED.

Den här informationen returneras från fältet SQL_DESC_UNNAMED post i IRD.
SQL_DESC_UNSIGNED (ODBC 1.0) NumericAttributePtr SQL_TRUE om kolumnen är osignerad (eller inte numerisk).

SQL_FALSE om kolumnen är signerad.
SQL_DESC_UPDATABLE (ODBC 1.0) NumericAttributePtr Kolumnen beskrivs av värdena för de definierade konstanterna:

SQL_ATTR_READONLY SQL_ATTR_WRITE SQL_ATTR_READWRITE_UNKNOWN

SQL_DESC_UPDATABLE beskriver kolumnens uppdaterbarhet i resultatuppsättningen, inte kolumnen i bastabellen. Uppdatbarheten för den baskolumn som resultatuppsättningskolumnen baseras på kan skilja sig från värdet i det här fältet. Om en kolumn är uppdateringsbar kan baseras på datatypen, användarbehörigheter och definitionen av själva resultatuppsättningen. Om det är oklart om en kolumn är uppdateringsbar bör SQL_ATTR_READWRITE_UNKNOWN returneras.

SQLColAttribute är ett utökningsbart alternativ till SQLDescribeCol. SQLDescribeCol returnerar en fast uppsättning beskrivande information baserat på ANSI-89 SQL. SQLColAttribute ger åtkomst till den mer omfattande uppsättningen beskrivande information som finns i ANSI SQL-92- och DBMS-leverantörstillägg.

Mer information om Se
Binda en buffert till en kolumn i en resultatuppsättning SQLBindCol Function
Avbryta instruktionsbearbetning SQLCancel-funktion
Returnera information om en kolumn i en resultatuppsättning SQLDescribeCol Function
Hämtar ett datablock eller bläddrar igenom en resultatuppsättning SQLFetchScroll Function
Hämtar flera rader med data SQLFetch-funktion

Exempel

Följande exempelkod frigör inte referenser och anslutningar. Se SQLFreeHandle Function, Sample ODBC Programoch SQLFreeStmt Function för kodexempel för kostnadsfria referenser och instruktioner.

// SQLColAttibute.cpp  
// compile with: user32.lib odbc32.lib  
  
#define UNICODE  
  
#include <windows.h>  
#include <sqlext.h>  
#include <strsafe.h>  
  
struct DataBinding {  
   SQLSMALLINT TargetType;  
   SQLPOINTER TargetValuePtr;  
   SQLINTEGER BufferLength;  
   SQLLEN StrLen_or_Ind;  
};  
  
void printStatementResult(SQLHSTMT hstmt) {  
   int bufferSize = 1024, i;  
   SQLRETURN retCode;  
   SQLSMALLINT numColumn = 0, bufferLenUsed;
   
   retCode = SQLNumResultCols(hstmt, &numColumn);  
   
   SQLPOINTER* columnLabels = (SQLPOINTER *)malloc( numColumn * sizeof(SQLPOINTER*) );  
   struct DataBinding* columnData = (struct DataBinding*)malloc( numColumn * sizeof(struct DataBinding) );  
  
   printf( "Columns from that table:\n" );  
   for ( i = 0 ; i < numColumn ; i++ ) {  
      columnLabels[i] = (SQLPOINTER)malloc( bufferSize*sizeof(char) );  
  
      retCode = SQLColAttribute(hstmt, (SQLUSMALLINT)i + 1, SQL_DESC_LABEL, columnLabels[i], (SQLSMALLINT)bufferSize, &bufferLenUsed, NULL);  
      wprintf( L"Column %d: %s\n", i, (wchar_t*)columnLabels[i] );  
   }  
  
   // allocate memory for the binding  
   for ( i = 0 ; i < numColumn ; i++ ) {  
      columnData[i].TargetType = SQL_C_CHAR;  
      columnData[i].BufferLength = (bufferSize+1);  
      columnData[i].TargetValuePtr = malloc( sizeof(unsigned char)*columnData[i].BufferLength );  
   }  
  
   // setup the binding   
   for ( i = 0 ; i < numColumn ; i++ ) {  
      retCode = SQLBindCol(hstmt, (SQLUSMALLINT)i + 1, columnData[i].TargetType,   
         columnData[i].TargetValuePtr, columnData[i].BufferLength, &(columnData[i].StrLen_or_Ind));  
   }  
  
   printf( "Data from that table:\n" );  
   // fetch the data and print out the data  
   for ( retCode = SQLFetch(hstmt) ; retCode == SQL_SUCCESS || retCode == SQL_SUCCESS_WITH_INFO ; retCode = SQLFetch(hstmt) ) {  
      int j;  
      for ( j = 0 ; j < numColumn ; j++ )  
         wprintf( L"%s: %hs\n", columnLabels[j], columnData[j].TargetValuePtr );  
      printf( "\n" );  
   }  
   printf( "\n" );   
}  
  
int main() {  
   int bufferSize = 1024, i, count = 1, numCols = 5;  
   wchar_t firstTableName[1024], * dbName = (wchar_t *)malloc( sizeof(wchar_t)*bufferSize ), * userName = (wchar_t *)malloc( sizeof(wchar_t)*bufferSize );  
   HWND desktopHandle = GetDesktopWindow();   // desktop's window handle  
   SQLWCHAR connStrbuffer[1024];  
   SQLSMALLINT connStrBufferLen, bufferLen;  
   SQLRETURN retCode;  
  
   SQLHENV henv = NULL;   // Environment     
   SQLHDBC hdbc = NULL;   // Connection handle  
   SQLHSTMT hstmt = NULL;   // Statement handle  
  
   struct DataBinding* catalogResult = (struct DataBinding*) malloc( numCols * sizeof(struct DataBinding) );  
   SQLWCHAR* selectAllQuery = (SQLWCHAR *)malloc( sizeof(SQLWCHAR) * bufferSize );  
  
   // connect to database  
   retCode = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &henv);  
   retCode = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION, (SQLCHAR *)(void*)SQL_OV_ODBC3, -1);  
   retCode = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);  
   retCode = SQLSetConnectAttr(hdbc, SQL_LOGIN_TIMEOUT, (SQLPOINTER)10, 0);  
   retCode = SQLDriverConnect(hdbc, desktopHandle, L"Driver={SQL Server}", SQL_NTS, connStrbuffer, 1025, &connStrBufferLen, SQL_DRIVER_PROMPT);  
   retCode = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);  
  
   // display the database information  
   retCode = SQLGetInfo(hdbc, SQL_DATABASE_NAME, dbName, (SQLSMALLINT)bufferSize, (SQLSMALLINT *)&bufferLen);  
   retCode = SQLGetInfo(hdbc, SQL_USER_NAME, userName, (SQLSMALLINT)bufferSize, &bufferLen);  
  
   for ( i = 0 ; i < numCols ; i++ ) {  
      catalogResult[i].TargetType = SQL_C_CHAR;  
      catalogResult[i].BufferLength = (bufferSize + 1);  
      catalogResult[i].TargetValuePtr = malloc( sizeof(unsigned char)*catalogResult[i].BufferLength );  
   }  
  
   // Set up the binding. This can be used even if the statement is closed by closeStatementHandle  
   for ( i = 0 ; i < numCols ; i++ )  
      retCode = SQLBindCol(hstmt, (SQLUSMALLINT)i + 1, catalogResult[i].TargetType, catalogResult[i].TargetValuePtr, catalogResult[i].BufferLength, &(catalogResult[i].StrLen_or_Ind));  
  
   retCode = SQLTables( hstmt, (SQLWCHAR*)SQL_ALL_CATALOGS, SQL_NTS, L"", SQL_NTS, L"", SQL_NTS, L"", SQL_NTS );  
   retCode = SQLFreeStmt(hstmt, SQL_CLOSE);  
  
   retCode = SQLTables( hstmt, dbName, SQL_NTS, userName, SQL_NTS, L"%", SQL_NTS, L"TABLE", SQL_NTS );  
  
   for ( retCode = SQLFetch(hstmt) ; retCode == SQL_SUCCESS || retCode == SQL_SUCCESS_WITH_INFO ; retCode = SQLFetch(hstmt), ++count )  
      if ( count == 1 )  
         StringCchPrintfW( firstTableName, 1024, L"%hs", catalogResult[2].TargetValuePtr );  
   retCode = SQLFreeStmt(hstmt, SQL_CLOSE);  
  
   wprintf( L"Select all data from the first table (%s)\n", firstTableName );  
   StringCchPrintfW( selectAllQuery, bufferSize, L"SELECT * FROM %s", firstTableName );  
  
   retCode = SQLExecDirect(hstmt, selectAllQuery, SQL_NTS);  
   printStatementResult(hstmt);  
}  

Se även

ODBC API-referens
ODBC-huvudfiler
ODBC-exempelprogram