SQLColAttribute, functie
conformance
Versie geïntroduceerd: NALEVING van ODBC 3.0-standaarden: ISO 92
Samenvattings-
SQLColAttribute- retourneert descriptorgegevens voor een kolom in een resultatenset. Descriptor-informatie wordt geretourneerd als tekenreeks, een descriptorafhankelijke waarde of een geheel getal.
Notitie
Voor meer informatie over wat de Driver Manager deze functie toe wijst wanneer een ODBC 3.x-toepassing werkt met een ODBC 2.x stuurprogramma raadpleegt u Vervangingsfuncties voor achterwaartse compatibiliteit van toepassingen.
Syntaxis
SQLRETURN SQLColAttribute (
SQLHSTMT StatementHandle,
SQLUSMALLINT ColumnNumber,
SQLUSMALLINT FieldIdentifier,
SQLPOINTER CharacterAttributePtr,
SQLSMALLINT BufferLength,
SQLSMALLINT * StringLengthPtr,
SQLLEN * NumericAttributePtr);
Argumenten
StatementHandle-
[Invoer] Instructiehandgreep.
ColumnNumber
[Invoer] Het nummer van de record in de IRD waaruit de veldwaarde moet worden opgehaald. Dit argument komt overeen met het kolomnummer van resultaatgegevens, opeenvolgend geordend in toenemende kolomvolgorde, beginnend bij 1. Kolommen kunnen in elke volgorde worden beschreven.
Kolom 0 kan worden opgegeven in dit argument, maar alle waarden behalve SQL_DESC_TYPE en SQL_DESC_OCTET_LENGTH retourneren niet-gedefinieerde waarden.
FieldIdentifier-
[Invoer] De descriptorgreep. Met deze ingang wordt gedefinieerd welk veld in de IRD moet worden opgevraagd (bijvoorbeeld SQL_COLUMN_TABLE_NAME).
CharacterAttributePtr-
[Uitvoer] Wijs een buffer aan waarin de waarde in het veld FieldIdentifier van de rij ColumnNumber rij van de IRD als het veld een tekenreeks is. Anders wordt het veld niet gebruikt.
Als CharacterAttributePtr NULL is, retourneert StringLengthPtr- nog steeds het totale aantal bytes (met uitzondering van het null-beëindigingsteken voor tekengegevens) dat beschikbaar is in de buffer die wordt verwezen door CharacterAttributePtr-.
BufferLength-
[Invoer] Als FieldIdentifier- een door ODBC gedefinieerd veld is en CharacterAttributePtr verwijst naar een tekenreeks of binaire buffer, moet dit argument de lengte zijn van *CharacterAttributePtr. Als FieldIdentifier een ODBC-gedefinieerd veld is en *CharacterAttributePtr een geheel getal is, wordt dit veld genegeerd. Als de *CharacterAttributePtr- een Unicode-tekenreeks is (bij het aanroepen van SQLColAttributeW), moet het argument BufferLength een even getal zijn. Als FieldIdentifier- een door het stuurprogramma gedefinieerd veld is, geeft de toepassing de aard van het veld aan bij Driver Manager door het argument BufferLength in te stellen.
BufferLength- kunnen de volgende waarden hebben:
Als CharacterAttributePtr- een aanwijzer naar een aanwijzer is, moet BufferLength- de waarde SQL_IS_POINTER hebben.
Als CharacterAttributePtr een aanwijzer is naar een tekenreeks, is de BufferLength de lengte van de buffer.
Als CharacterAttributePtr- een aanwijzer is naar een binaire buffer, plaatst de toepassing het resultaat van de macro SQL_LEN_BINARY_ATTR(lengte) in BufferLength-. Hiermee wordt een negatieve waarde in BufferLength-geplaatst.
Als CharacterAttributePtr- een aanwijzer is naar een gegevenstype met een vaste lengte, moet BufferLength- een van de volgende zijn: SQL_IS_INTEGER, SQL_IS_UINTEGER, SQL_IS_SMALLINT of SQL_IS_USMALLINT.
StringLengthPtr-
[Uitvoer] Wijs een buffer aan waarin het totale aantal bytes (met uitzondering van de byte null-beëindiging voor tekengegevens) kan worden geretourneerd in *CharacterAttributePtr-.
Als voor tekengegevens het aantal beschikbare bytes groter is dan of gelijk is aan BufferLength-, wordt de beschrijvingsinformatie in *CharacterAttributePtr- afgekapt tot BufferLength minus de lengte van een null-beëindigingsteken en wordt door het stuurprogramma null-beëindigd.
Voor alle andere typen gegevens wordt de waarde van BufferLength genegeerd en wordt door het stuurprogramma uitgegaan van de grootte van *CharacterAttributePtr 32 bits.
NumericAttributePtr-
[Uitvoer] Wijs een geheel getalbuffer aan waarin de waarde in het FieldIdentifier- veld van de ColumnNumber rij van de IRD moet worden geretourneerd als het veld een numeriek descriptortype is, zoals SQL_DESC_COLUMN_LENGTH. Anders wordt het veld niet gebruikt. Houd er rekening mee dat sommige stuurprogramma's mogelijk alleen de lagere 32-bits of 16-bits buffer schrijven en de bit met een hogere volgorde ongewijzigd laten. Daarom moeten toepassingen de waarde initialiseren tot 0 voordat deze functie wordt aangeroepen.
Retourneert
SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_STILL_EXECUTING, SQL_ERROR of SQL_INVALID_HANDLE.
Diagnostiek
Wanneer SQLColAttribute- SQL_ERROR of SQL_SUCCESS_WITH_INFO retourneert, 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 bevat de SQLSTATE-waarden die vaak worden geretourneerd door SQLColAttribute- en legt elke waarden uit in de context van deze functie; de notatie (DM)' voorafgaat aan de beschrijvingen van SQLSTATEs die worden geretourneerd door Driver Manager. De retourcode die is gekoppeld aan elke SQLSTATE-waarde is SQL_ERROR, tenzij anders vermeld.
SQLSTATE | Fout | Beschrijving |
---|---|---|
01000 | Algemene waarschuwing | Stuurprogrammaspecifiek informatiebericht. (Functie retourneert SQL_SUCCESS_WITH_INFO.) |
01004 | Tekenreeksgegevens, rechts afgekapt | De buffer *CharacterAttributePtr was niet groot genoeg om de hele tekenreekswaarde te retourneren, zodat de tekenreekswaarde is afgekapt. De lengte van de niet-uitgevoerde tekenreekswaarde wordt geretourneerd in *StringLengthPtr. (Functie retourneert SQL_SUCCESS_WITH_INFO.) |
07005 | Voorbereide instructie is geen cursorspecificatie | De instructie die is gekoppeld aan de StatementHandle- heeft geen resultatenset geretourneerd en FieldIdentifier- niet is SQL_DESC_COUNT. Er zijn geen kolommen om te beschrijven. |
07009 | Ongeldige descriptorindex | (DM) De waarde die is opgegeven voor ColumnNumber is gelijk aan 0 en het kenmerk SQL_ATTR_USE_BOOKMARKS instructie is SQL_UB_OFF. De waarde die is opgegeven voor het argument ColumnNumber groter was dan het aantal kolommen in de resultatenset. |
HY000 | Algemene fout | Er is een fout opgetreden waarvoor er geen specifieke SQLSTATE is en waarvoor geen implementatiespecifieke SQLSTATE is gedefinieerd. Het foutbericht dat wordt geretourneerd door SQLGetDiagField uit de structuur van diagnostische gegevens, beschrijft de fout en de oorzaak ervan. |
HY001 | Fout bij geheugentoewijzing | Het stuurprogramma kan geen geheugen toewijzen dat nodig 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 werd voltooid, SQLCancel of SQLCancelHandle werd 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- uit een andere thread in een multithread-toepassing. |
HY010 | Fout in functiereeks | (DM) Er is een asynchroon uitgevoerde functie aangeroepen voor de verbindingsgreep die is gekoppeld aan de StatementHandle-. Deze asynchrone functie werd nog steeds uitgevoerd toen SQLColAttribute werd aangeroepen. (DM) SQLExecute, SQLExecDirectof SQLMoreResults is aangeroepen voor de StatementHandle- en SQL_PARAM_DATA_AVAILABLE geretourneerd. Deze functie is aangeroepen voordat gegevens zijn opgehaald voor alle gestreamde parameters. (DM) De functie is aangeroepen vóór het aanroepen van SQLPrepare, SQLExecDirectof een catalogusfunctie voor de StatementHandle-. (DM) Een asynchroon uitgevoerde functie (niet deze) is aangeroepen voor de StatementHandle- en werd nog steeds uitgevoerd toen deze functie werd aangeroepen. (DM) SQLExecute, SQLExecDirect, SQLBulkOperationsof SQLSetPos is aangeroepen voor de StatementHandle- en SQL_NEED_DATA geretourneerd. 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. |
HY090 | Ongeldige tekenreeks- of bufferlengte | (DM) *CharacterAttributePtr is een tekenreeks en BufferLength kleiner was dan 0, maar niet gelijk aan SQL_NTS. |
HY091 | Ongeldige descriptorveld-id | De waarde die is opgegeven voor het argument FieldIdentifier was geen van de gedefinieerde waarden en was geen door de implementatie gedefinieerde waarde. |
HY117 | De verbinding is onderbroken vanwege een onbekende transactiestatus. Alleen de verbinding verbreken en alleen-lezenfuncties zijn toegestaan. | (DM) Zie SQLEndTran Functionvoor meer informatie over de onderbroken status. |
HYC00 | Stuurprogramma is niet geschikt | De waarde die is opgegeven voor het argument FieldIdentifier wordt niet ondersteund door het stuurprogramma. |
HYT01 | Time-out voor verbinding verlopen | 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 de bewerking na verwerking uit te voeren en de bewerking te voltooien. |
Wanneer aangeroepen na SQLPrepare en vóór SQLExecute, kan SQLColAttribute elke SQLSTATE retourneren die kan worden geretourneerd door SQLPrepare- of SQLExecute-, afhankelijk van wanneer de gegevensbron de SQL-instructie evalueert die is gekoppeld aan de StatementHandle-.
Om prestatieredenen moet een toepassing SQLColAttribute- niet aanroepen voordat een instructie wordt uitgevoerd.
Opmerkingen
Zie Metagegevens van de resultatensetvoor informatie over hoe toepassingen de informatie gebruiken die wordt geretourneerd door SQLColAttribute-.
SQLColAttribute retourneert informatie in *NumericAttributePtr of in *CharacterAttributePtr. Gehele getallen worden geretourneerd in *NumericAttributePtr- als een SQLLEN-waarde; alle andere indelingen van informatie worden geretourneerd in *CharacterAttributePtr. Wanneer informatie wordt geretourneerd in *NumericAttributePtr, negeert het stuurprogramma CharacterAttributePtr, BufferLengthen StringLengthPtr. Wanneer informatie wordt geretourneerd in *CharacterAttributePtr, negeert het stuurprogramma NumericAttributePtr.
SQLColAttribute retourneert waarden uit de descriptorvelden van de IRD. De functie wordt aangeroepen met een instructiegreep in plaats van een descriptorgreep. De waarden die worden geretourneerd door SQLColAttribute- voor de FieldIdentifier waarden die verderop in deze sectie worden vermeld, kunnen ook worden opgehaald door SQLGetDescField- aan te roepen met de juiste IRD-ingang.
De momenteel gedefinieerde descriptorvelden, de versie van ODBC waarin ze zijn geïntroduceerd en de argumenten waarin informatie wordt geretourneerd, worden verderop in deze sectie weergegeven; er kunnen meer descriptortypen worden gedefinieerd door stuurprogramma's om te profiteren van verschillende gegevensbronnen.
Een ODBC 3.x stuurprogramma moet een waarde retourneren voor elk van de descriptorvelden. Als een descriptorveld niet van toepassing is op een stuurprogramma of gegevensbron en tenzij anders vermeld, retourneert het stuurprogramma 0 in *StringLengthPtr of een lege tekenreeks in *CharacterAttributePtr.
Compatibiliteit met eerdere versies
De ODBC 3.x functie SQLColAttribute vervangt de afgeschafte ODBC 2.x functie SQLColAttributes. Bij het toewijzen van SQLColAttributes aan SQLColAttribute- (wanneer een ODBC 2.x toepassing werkt met een ODBC 3.x stuurprogramma) of SQLColAttribute- toewijzen aan SQLColAttributes- (wanneer een ODBC 3.x-toepassing werkt met een ODBC 2.x-stuurprogramma), geeft Driver Manager de waarde van FieldIdentifier door, wijst deze als volgt toe aan een nieuwe waarde of retourneert een fout:
Notitie
Het voorvoegsel dat wordt gebruikt in FieldIdentifier waarden in ODBC 3.x- is gewijzigd van die in ODBC 2.x. Het nieuwe voorvoegsel is 'SQL_DESC'; het oude voorvoegsel was 'SQL_COLUMN'.
Als de #define waarde van de ODBC 2.xFieldIdentifier- is hetzelfde als de #define waarde van de ODBC 3.xFieldIdentifier, wordt de waarde in de functieaanroep zojuist doorgegeven.
De #define waarden van de ODBC 2.xFieldIdentifiers SQL_COLUMN_LENGTH, SQL_COLUMN_PRECISION en SQL_COLUMN_SCALE verschillen van de #define waarden van de ODBC 3.xFieldIdentifiers SQL_DESC_PRECISION, SQL_DESC_SCALE en SQL_DESC_LENGTH. Een ODBC 2.x stuurprogramma hoeft alleen de ODBC 2 te ondersteunen.x waarden. Een ODBC 3.x stuurprogramma moet zowel de waarden 'SQL_COLUMN' als 'SQL_DESC' ondersteunen voor deze drie FieldIdentifiers. Deze waarden zijn anders omdat precisie, schaal en lengte verschillend zijn gedefinieerd in ODBC 3.x dan in ODBC 2.x. Zie kolomgrootte, decimale cijfers, octetlengte en weergavegroottevoor meer informatie.
Als de #define waarde van de ODBC 2.xFieldIdentifier verschilt van de #define waarde van odbc 3.xFieldIdentifier-, zoals het geval is met de waarden AANTAL, NAAM en NULL, wordt de waarde in de functieaanroep toegewezen aan de bijbehorende waarde. SQL_COLUMN_COUNT wordt bijvoorbeeld toegewezen aan SQL_DESC_COUNT en SQL_DESC_COUNT is toegewezen aan SQL_COLUMN_COUNT, afhankelijk van de richting van de toewijzing.
Als FieldIdentifier- een nieuwe waarde is in ODBC 3.x, waarvoor geen overeenkomende waarde in ODBC 2 was.x, wordt deze niet toegewezen wanneer een ODBC 3.x toepassing gebruikt deze in een aanroep naar SQLColAttribute- in een ODBC 2.x stuurprogramma en de aanroep retourneert SQLSTATE HY091 (ongeldige descriptorveld-id).
De volgende tabel bevat de beschrijvingstypen die worden geretourneerd door SQLColAttribute. Het type voor NumericAttributePtr waarden is SQLLEN *.
FieldIdentifier- | Informatie geretourneerd in |
Beschrijving |
---|---|---|
SQL_DESC_AUTO_UNIQUE_VALUE (ODBC 1.0) | NumericAttributePtr- | SQL_TRUE als de kolom een automatisch aanmaakkolom is. SQL_FALSE als de kolom geen automatisch aanmaakkolom is of niet numeriek is. Dit veld is alleen geldig voor kolommen met numeriek gegevenstype. Een toepassing kan waarden invoegen in een rij die een kolom voor automatisch maken bevat, maar kan doorgaans geen waarden in de kolom bijwerken. Wanneer een invoeging wordt aangebracht in een kolom met automatische invoer, wordt er op het moment van invoegen een unieke waarde ingevoegd in de kolom. De increment is niet gedefinieerd, maar is gegevensbronspecifiek. Een toepassing mag er niet van uitgaan dat een kolom voor automatisch maken begint op een bepaald punt of met een bepaalde waarde. |
SQL_DESC_BASE_COLUMN_NAME (ODBC 3.0) | CharacterAttributePtr- | De naam van de basiskolom voor de kolom met resultatensets. Als er geen basiskolomnaam bestaat (zoals in het geval van kolommen die expressies zijn), bevat deze variabele een lege tekenreeks. Deze informatie wordt geretourneerd uit het SQL_DESC_BASE_COLUMN_NAME recordveld van de IRD, een alleen-lezen veld. |
SQL_DESC_BASE_TABLE_NAME (ODBC 3.0) | CharacterAttributePtr- | De naam van de basistabel die de kolom bevat. Als de naam van de basistabel niet kan worden gedefinieerd of niet van toepassing is, bevat deze variabele een lege tekenreeks. Deze informatie wordt geretourneerd uit het SQL_DESC_BASE_TABLE_NAME recordveld van de IRD, een alleen-lezen veld. |
SQL_DESC_CASE_SENSITIVE (ODBC 1.0) | NumericAttributePtr- | SQL_TRUE als de kolom wordt behandeld als hoofdlettergevoelig voor sorteringen en vergelijkingen. SQL_FALSE als de kolom niet wordt behandeld als hoofdlettergevoelig voor sorteringen en vergelijkingen of niet-hoofdlettergevoelig is. |
SQL_DESC_CATALOG_NAME (ODBC 2.0) | CharacterAttributePtr- | De catalogus van de tabel die de kolom bevat. De geretourneerde waarde is door de implementatie gedefinieerd als de kolom een expressie is of als de kolom deel uitmaakt van een weergave. Als de gegevensbron geen ondersteuning biedt voor catalogi of als de catalogusnaam niet kan worden bepaald, wordt een lege tekenreeks geretourneerd. Dit VARCHAR-recordveld is niet beperkt tot 128 tekens. |
SQL_DESC_CONCISE_TYPE (ODBC 1.0) | NumericAttributePtr- | Het beknopte gegevenstype. Voor de gegevenstypen datum/tijd en interval retourneert dit veld het beknopte gegevenstype; Bijvoorbeeld SQL_TYPE_TIME of SQL_INTERVAL_YEAR. (Zie voor meer informatie gegevenstype-id's en descriptors in bijlage D: gegevenstypen.) Deze informatie wordt geretourneerd uit het SQL_DESC_CONCISE_TYPE recordveld van de IRD. |
SQL_DESC_COUNT (ODBC 1.0) | NumericAttributePtr- | Het aantal kolommen dat beschikbaar is in de resultatenset. Hiermee wordt 0 geretourneerd als er geen kolommen in de resultatenset staan. De waarde in het argument ColumnNumber wordt genegeerd. Deze informatie wordt geretourneerd uit het veld SQL_DESC_COUNT koptekst van de IRD. |
SQL_DESC_DISPLAY_SIZE (ODBC 1.0) | NumericAttributePtr- | Maximum aantal tekens dat is vereist om gegevens uit de kolom weer te geven. Zie Kolomgrootte, Decimale cijfers, Octetlengte overdragen en Weergavegrootte in bijlage D voor meer informatie over weergavegrootte. |
SQL_DESC_FIXED_PREC_SCALE (ODBC 1.0) | NumericAttributePtr- | SQL_TRUE als de kolom een vaste precisie en een niet-nulschaal heeft die specifiek zijn voor een gegevensbron. SQL_FALSE als de kolom geen vaste precisie en een niet-nulschaal heeft die specifiek zijn voor gegevensbronnen. |
SQL_DESC_LABEL (ODBC 2.0) | CharacterAttributePtr- | Het kolomlabel of de titel. Een kolom met de naam EmpName kan bijvoorbeeld worden gelabeld als Werknemernaam of kan worden gelabeld met een alias. Als een kolom geen label heeft, wordt de kolomnaam geretourneerd. Als de kolom niet is gelabeld en niet-benoemd, wordt een lege tekenreeks geretourneerd. |
SQL_DESC_LENGTH (ODBC 3.0) | NumericAttributePtr- | Een numerieke waarde die de maximale of werkelijke tekenlengte van een tekenreeks of binair gegevenstype is. Dit is de maximale tekenlengte voor een gegevenstype met vaste lengte of de werkelijke tekenlengte voor een gegevenstype met variabele lengte. De waarde sluit altijd de byte null-beëindiging uit die de tekenreeks beëindigt. Deze informatie wordt geretourneerd uit het SQL_DESC_LENGTH recordveld van de IRD. Zie kolomgrootte, decimale cijfers, lengte van octet overdragen en weergavegrootte in bijlage D voor meer informatie over lengte. |
SQL_DESC_LITERAL_PREFIX (ODBC 3.0) | CharacterAttributePtr- | Dit VARCHAR(128)-recordveld bevat het teken of de tekens die het stuurprogramma herkent als voorvoegsel voor een letterlijke waarde van dit gegevenstype. Dit veld bevat een lege tekenreeks voor een gegevenstype waarvoor geen letterlijk voorvoegsel van toepassing is. Zie Letterlijke voorvoegsels en achtervoegselsvoor meer informatie. |
SQL_DESC_LITERAL_SUFFIX (ODBC 3.0) | CharacterAttributePtr- | Dit VARCHAR(128)-recordveld bevat het teken of de tekens die het stuurprogramma herkent als achtervoegsel voor een letterlijke waarde van dit gegevenstype. Dit veld bevat een lege tekenreeks voor een gegevenstype waarvoor een letterlijk achtervoegsel niet van toepassing is. Zie Letterlijke voorvoegsels en achtervoegselsvoor meer informatie. |
SQL_DESC_LOCAL_TYPE_NAME (ODBC 3.0) | CharacterAttributePtr- | Dit VARCHAR(128)-recordveld bevat een gelokaliseerde (systeemeigen taal) naam voor het gegevenstype dat kan afwijken van de normale naam van het gegevenstype. Als er geen gelokaliseerde naam is, wordt er een lege tekenreeks geretourneerd. Dit veld is alleen voor weergavedoeleinden. De tekenset van de tekenreeks is afhankelijk van landinstellingen en is doorgaans de standaardtekenset van de server. |
SQL_DESC_NAME (ODBC 3.0) | CharacterAttributePtr- | De kolomalias, indien van toepassing. Als de kolomalias niet van toepassing is, wordt de kolomnaam geretourneerd. In beide gevallen is SQL_DESC_UNNAMED ingesteld op SQL_NAMED. Als er geen kolomnaam of een kolomalias is, wordt een lege tekenreeks geretourneerd en wordt SQL_DESC_UNNAMED ingesteld op SQL_UNNAMED. Deze informatie wordt geretourneerd uit het SQL_DESC_NAME recordveld van de IRD. |
SQL_DESC_NULLABLE (ODBC 3.0) | NumericAttributePtr- | SQL_ NULLABLE als de kolom NULL-waarden kan hebben; SQL_NO_NULLS als de kolom geen NULL-waarden heeft; of SQL_NULLABLE_UNKNOWN als het niet bekend is of de kolom NULL-waarden accepteert. Deze informatie wordt geretourneerd uit het SQL_DESC_NULLABLE recordveld van de IRD. |
SQL_DESC_NUM_PREC_RADIX (ODBC 3.0) | NumericAttributePtr- | Als het gegevenstype in het SQL_DESC_TYPE veld een numeriek gegevenstype is, bevat dit SQLINTEGER-veld een waarde van 2 omdat het SQL_DESC_PRECISION veld het aantal bits bevat. Als het gegevenstype in het SQL_DESC_TYPE veld een exact numeriek gegevenstype is, bevat dit veld een waarde van 10 omdat het SQL_DESC_PRECISION veld het aantal decimalen bevat. Dit veld is ingesteld op 0 voor alle niet-numerieke gegevenstypen. |
SQL_DESC_OCTET_LENGTH (ODBC 3.0) | NumericAttributePtr- | De lengte, in bytes, van een tekenreeks of binair gegevenstype. Voor tekens met vaste lengte of binaire typen is dit de werkelijke lengte in bytes. Voor tekens met variabele lengte of binaire typen is dit de maximale lengte in bytes. Deze waarde bevat geen null-eindteken. Deze informatie wordt geretourneerd uit het SQL_DESC_OCTET_LENGTH recordveld van de IRD. Zie kolomgrootte, decimale cijfers, lengte van octet overdragen en weergavegrootte in bijlage D voor meer informatie over lengte. |
SQL_DESC_PRECISION (ODBC 3.0) | NumericAttributePtr- | Een numerieke waarde die voor een numeriek gegevenstype de toepasselijke precisie aangeeft. Voor gegevenstypen SQL_TYPE_TIME, SQL_TYPE_TIMESTAMP en alle intervalgegevenstypen die een tijdsinterval vertegenwoordigen, is de bijbehorende waarde de toepasselijke precisie van het onderdeel fractionele seconden. Deze informatie wordt geretourneerd uit het SQL_DESC_PRECISION recordveld van de IRD. |
SQL_DESC_SCALE (ODBC 3.0) | NumericAttributePtr- | Een numerieke waarde die de toepasselijke schaal is voor een numeriek gegevenstype. Voor DECIMAAL- en NUMERIEKE gegevenstypen is dit de gedefinieerde schaal. Het is niet gedefinieerd voor alle andere gegevenstypen. Deze informatie wordt geretourneerd uit het veld SCALE-record van de IRD. |
SQL_DESC_SCHEMA_NAME (ODBC 2.0) | CharacterAttributePtr- | Het schema van de tabel die de kolom bevat. De geretourneerde waarde is door de implementatie gedefinieerd als de kolom een expressie is of als de kolom deel uitmaakt van een weergave. Als de gegevensbron geen schema's ondersteunt of de schemanaam niet kan worden bepaald, wordt een lege tekenreeks geretourneerd. Dit VARCHAR-recordveld is niet beperkt tot 128 tekens. |
SQL_DESC_SEARCHABLE (ODBC 1.0) | NumericAttributePtr- | SQL_PRED_NONE als de kolom niet kan worden gebruikt in een WHERE-component. (Dit is hetzelfde als de SQL_UNSEARCHABLE waarde in ODBC 2.x.) SQL_PRED_CHAR als de kolom kan worden gebruikt in een WHERE-component, maar alleen met het PREdicaat LIKE. (Dit is hetzelfde als de SQL_LIKE_ONLY waarde in ODBC 2.x.) SQL_PRED_BASIC als de kolom kan worden gebruikt in een WHERE-component met alle vergelijkingsoperatoren behalve LIKE. (Dit is hetzelfde als de SQL_EXCEPT_LIKE waarde in ODBC 2.x.) SQL_PRED_SEARCHABLE of de kolom kan worden gebruikt in een WHERE-component met een vergelijkingsoperator. Kolommen van het type SQL_LONGVARCHAR en SQL_LONGVARBINARY retourneren meestal SQL_PRED_CHAR. |
SQL_DESC_TABLE_NAME (ODBC 2.0) | CharacterAttributePtr- | De naam van de tabel die de kolom bevat. De geretourneerde waarde is door de implementatie gedefinieerd als de kolom een expressie is of als de kolom deel uitmaakt van een weergave. Als de tabelnaam niet kan worden bepaald, wordt een lege tekenreeks geretourneerd. |
SQL_DESC_TYPE (ODBC 3.0) | NumericAttributePtr- | Een numerieke waarde waarmee het SQL-gegevenstype wordt opgegeven. Wanneer ColumnNumber gelijk is aan 0, wordt SQL_BINARY geretourneerd voor bladwijzers met variabele lengte en wordt SQL_INTEGER geretourneerd voor bladwijzers met vaste lengte. Voor de gegevenstypen datum/tijd en interval retourneert dit veld het uitgebreide gegevenstype: SQL_DATETIME of SQL_INTERVAL. (Zie gegevenstype-id's en descriptors in bijlage D: gegevenstypen voor meer informatie. Deze informatie wordt geretourneerd uit het SQL_DESC_TYPE recordveld van de IRD. Opmerking: werken met ODBC 2.x stuurprogramma's gebruikt u in plaats daarvan SQL_DESC_CONCISE_TYPE. |
SQL_DESC_TYPE_NAME (ODBC 1.0) | CharacterAttributePtr- | Naam van gegevensbronafhankelijk gegevenstype; Bijvoorbeeld "CHAR", "VARCHAR", "MONEY", "LONG VARBINARY" of "CHAR ( ) FOR BIT DATA". Als het type onbekend is, wordt een lege tekenreeks geretourneerd. |
SQL_DESC_UNNAMED (ODBC 3.0) | NumericAttributePtr- | SQL_NAMED of SQL_UNNAMED. Als het SQL_DESC_NAME veld van de IRD een kolomalias of een kolomnaam bevat, wordt SQL_NAMED geretourneerd. Als er geen kolomnaam of kolomalias is, wordt SQL_UNNAMED geretourneerd. Deze informatie wordt geretourneerd uit het SQL_DESC_UNNAMED recordveld van de IRD. |
SQL_DESC_UNSIGNED (ODBC 1.0) | NumericAttributePtr- | SQL_TRUE als de kolom niet is ondertekend (of niet numeriek). SQL_FALSE als de kolom is ondertekend. |
SQL_DESC_UPDATABLE (ODBC 1.0) | NumericAttributePtr- | Kolom wordt beschreven door de waarden voor de gedefinieerde constanten: SQL_ATTR_READONLY SQL_ATTR_WRITE SQL_ATTR_READWRITE_UNKNOWN SQL_DESC_UPDATABLE beschrijft de updatability van de kolom in de resultatenset, niet de kolom in de basistabel. De updatability van de basiskolom waarop de kolom met resultatensets is gebaseerd, kan afwijken van de waarde in dit veld. Of een kolom kan worden bijgewerkt, kan worden gebaseerd op het gegevenstype, gebruikersbevoegdheden en de definitie van de resultatenset zelf. Als het onduidelijk is of een kolom kan worden bijgewerkt, moet SQL_ATTR_READWRITE_UNKNOWN worden geretourneerd. |
SQLColAttribute- is een uitbreidbaar alternatief voor SQLDescribeCol-. SQLDescribeCol retourneert een vaste set descriptorgegevens op basis van ANSI-89 SQL. SQLColAttribute- biedt toegang tot de uitgebreidere set beschrijvingsgegevens die beschikbaar zijn in ANSI SQL-92- en DBMS-leveranciersextensies.
Verwante functies
Voor informatie over | Zien |
---|---|
Een buffer koppelen aan een kolom in een resultatenset | SQLBindCol-functie |
Verwerking van instructie annuleren | SQLCancel Function- |
Informatie retourneren over een kolom in een resultatenset | SQLDescribeCol-functie |
Een gegevensblok ophalen of door een resultatenset schuiven | SQLFetchScroll-functie |
Meerdere rijen met gegevens ophalen | SQLFetch-functie |
Voorbeeld
De volgende voorbeeldcode biedt geen vrije ingangen en verbindingen. Zie SQLFreeHandle-functie, ODBC-voorbeeldprogrammaen sqlFreeStmt-functie voor codevoorbeelden voor gratis ingangen en instructies.
// SQLColAttribute.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);
}
Zie ook
ODBC-API-verwijzing
ODBC-headerbestanden
odbc-voorbeeldprogramma