C-datatyper i ODBC

ODBC definierar de C-datatyper som används av programvariabler och deras motsvarande typidentifierare. Dessa används av buffertar som är bundna till resultatuppsättningskolumner och instruktionsparametrar. Anta till exempel att ett program vill hämta data från en resultatuppsättningskolumn i teckenformat. Den deklarerar en variabel med datatypen SQLCHAR * och binder den här variabeln till resultatuppsättningskolumnen med en typidentifierare för SQL_C_CHAR. En fullständig lista över C-datatyper och typidentifierare finns i Bilaga D: Datatyper.

ODBC definierar också en standardmappning från varje SQL-datatyp till en C-datatyp. Till exempel mappas ett heltal på 2 byte i datakällan till ett heltal på 2 byte i programmet. Om du vill använda standardmappningen anger ett program SQL_C_DEFAULT typidentifierare. Användningen av denna identifierare rekommenderas dock inte av samverkansskäl.

Alla heltals C-datatyper som definierades i ODBC 1.x var signerade. Osignerade C-datatyper och deras motsvarande typidentifierare lades till i ODBC 2.0. På grund av detta måste program och drivrutiner vara särskilt försiktiga när du hanterar 1.x-versioner .

Utökningsbarhet för C-datatyp

I ODBC 3.8 kan du ange drivrutinsspecifika C-datatyper. På så sätt kan du binda en SQL-typ som en drivrutinsspecifik C-typ i ODBC-program när du anropar SQLBindCol, SQLGetData eller SQLBindParameter. Detta kan vara användbart för stöd för nya servertyper eftersom befintliga C-datatyper kanske inte representerar de nya serverdatatyperna korrekt. Om du använder drivrutinsspecifika C-typer kan du öka antalet konverteringar som drivrutiner kan utföra.

Anta till exempel att ett databashanteringssystem (DBMS) introducerade en ny SQL-typ, DATETIMEOFFSET, för att representera datum och tid med tidszonsinformation. Det skulle inte finnas någon specifik C-typ i ODBC som motsvarar DATETIMEOFFSET. Ett program måste binda DATETIMEOFFSET som SQL_C_BINARY och omvandla det till en användardefinierad datatyp. Från och med ODBC 3.8 med utökningsbarhet för C-datatyp kan en drivrutin definiera en ny motsvarande C-typ. För den nya SQL-typen DATETIMEOFFSET kan drivrutinen till exempel definiera en ny motsvarande C-typ, till exempel SQL_C_DATETIMEOFFSET. Sedan kan ett program binda den nya SQL-typen som en drivrutinsspecifik C-typ.

En C-datatyp definieras i drivrutinen enligt följande:

  • ODBC-efterlevnadsnivån för ett program, ODBC-drivrutin och Driver Manager är 3,8 (eller högre).

  • Dataområdet för en drivrutinsspecifik C-typ ligger mellan 0x4000 och 0x7FFF.

  • Drivrutinen definierar strukturen för de data som motsvarar C-typen. Detta kan göras i det drivrutinsspecifika SDK:et.

Drivrutinshanteraren validerar inte en C-typ som definierats i intervallet för 0x4000 och 0x7FFF. drivrutinen utför valideringen och eventuell datatypskonvertering. Men om dataintervallet för en C-typ som skickas till drivrutinshanteraren är mellan 0x0000 och 0x3FFF eller mellan 0x8000 och 0xFFFF verifierar drivrutinshanteraren C-datatypen.

Anmärkning

Drivrutinsspecifika C-datatyper bör beskrivas i drivrutinsdokumentationen.

För att ange en ODBC-efterlevnadsnivå på 3.8 anropar ett program SQLSetEnvAttr med attributet SQL_ATTR_ODBC_VERSION inställt på SQL_OV_ODBC3_80. För att fastställa drivrutinens version anropar ett program SQLGetInfo med SQL_DRIVER_ODBC_VER.

Mer information om ODBC 3.8 finns i Nyheter i ODBC 3.8.

Se även

C-datatyper