Megosztás:


ODBC 64 bites információ

A Windows Server 2003-tól kezdve a Microsoft operációs rendszerei támogatták a 64 bites ODBC-kódtárakat. Az MDAC 2.7 SDK-val először szállított ODBC-fejlécek és kódtárak olyan módosításokat tartalmaznak, amelyekkel a programozók könnyen írhatnak kódot az új 64 bites platformokhoz. Ha biztosítja, hogy a kód az alább felsorolt ODBC-típusokat használja, a _WIN64 vagy WIN32 makrók alapján lefordíthatja ugyanazt a forráskódot a 64 bites és a 32 bites platformokra is.

A 64 bites processzorok programozása során több szempontot is figyelembe kell venni:

  • Bár a mutató mérete 4 bájtról 8 bájtra változott, az egész számok és a hosszúságok továbbra is 4 bájtos értékek. Az INT64 és az UINT64 típus 8 bájt egész számhoz lett definiálva. Az új SQLLEN és SQLULEN ODBC-típusok int64 és UINT64 formátumban vannak definiálva az ODBC fejlécfájlban , amikor _WIN64 definiálva van.

  • Az ODBC számos függvénye mutatóparaméterként van deklarálva. A 32 bites ODBC-ben a mutatóként definiált paramétereket gyakran használták arra, hogy a hívás környezetétől függően egész számértéket vagy mutatót adjanak át egy puffernek. Ez természetesen lehetséges volt, mivel a mutatók és az egész számok mérete megegyezik. A 64 bites Windows esetében ez nem így van.

  • Az SQLINTEGER és az SQLUINTEGER paraméterekkel korábban definiált ODBC-függvények némelyike szükség szerint módosult az új SQLLEN- és SQLULEN-típusdefinitek használatához. Ezek a módosítások a függvénydeklaráció módosításainak következő szakaszában jelennek meg.

  • A különböző SQLSet - és SQLGet-függvényeken keresztül beállítható leíró mezők némelyike 64 bites értékeket tartalmaz, míg mások még mindig 32 bites értékek. Győződjön meg arról, hogy a megfelelő méretű változót használja a mezők beállításakor és beolvasásakor. Azon jellemzők, amelyek leírómezői megváltoztak, a függvénydeklaráció módosításai alatt jelennek meg.

Függvénydeklaráció módosításai

A 64 bites programozáshoz az alábbi függvény-aláírások módosultak. A félkövér szövegben szereplő elemek különböző paraméterek.

SQLBindCol (SQLHSTMT StatementHandle, SQLUSMALLINT ColumnNumber,  
   SQLSMALLINT TargetType, SQLPOINTER TargetValuePtr, SQLLEN BufferLength,   SQLLEN * StrLen_or_Ind);  
  
SQLBindParam (SQLHSTMT StatementHandle, SQLUSMALLINT ParameterNumber,  
   SQLSMALLINT ValueType, SQLSMALLINT ParameterType,   
   SQLULEN ColumnSize, SQLSMALLINT DecimalDigits,   
   SQLPOINTER ParameterValuePtr, SQLLEN *StrLen_or_Ind);  
  
SQLBindParameter (SQLHSTMT StatementHandle, SQLUSMALLINT ParameterNumber,   
   SQLSMALLINT InputOutputType, SQLSMALLINT ValueType,   
   SQLSMALLINT ParameterType, SQLULEN ColumnSize, SQLSMALLINT DecimalDigits,   
   SQLPOINTER ParameterValuePtr, SQLLEN BufferLength, SQLLEN *StrLen_or_IndPtr);  
  
SQLColAttribute (SQLHSTMT StatementHandle, SQLUSMALLINT ColumnNumber,  
    SQLUSMALLINT FieldIdentifier, SQLPOINTER CharacterAttributePtr,   
   SQLSMALLINT BufferLength, SQLSMALLINT * StringLengthPtr,   
   SQLLEN* NumericAttributePtr)  
  
SQLColAttributes (SQLHSTMT hstmt, SQLUSMALLINT icol,   
   SQLUSMALLINT fDescType, SQLPOINTER rgbDesc,   
   SQLSMALLINT cbDescMax, SQLSMALLINT *pcbDesc, SQLLEN * pfDesc);  
  
SQLDescribeCol (SQLHSTMT StatementHandle, SQLUSMALLINT ColumnNumber,   
   SQLCHAR *ColumnName, SQLSMALLINT BufferLength,   
   SQLSMALLINT *NameLengthPtr, SQLSMALLINT *DataTypePtr, SQLULEN *ColumnSizePtr,   
   SQLSMALLINT *DecimalDigitsPtr, SQLSMALLINT *NullablePtr);  
  
SQLDescribeParam (SQLHSTMT StatementHandle, SQLUSMALLINT ParameterNumber,   
   SQLSMALLINT *DataTypePtr, SQLULEN *ParameterSizePtr, SQLSMALLINT *DecimalDigitsPtr,   
   SQLSMALLINT *NullablePtr);  
  
SQLExtendedFetch(SQLHSTMT StatementHandle, SQLUSMALLINT FetchOrientation, SQLLEN FetchOffset,   
   SQLULEN * RowCountPtr, SQLUSMALLINT * RowStatusArray);  
  
SQLFetchScroll (SQLHSTMT StatementHandle, SQLSMALLINT FetchOrientation,   
   SQLLEN FetchOffset);  
  
SQLGetData (SQLHSTMT StatementHandle, SQLUSMALLINT ColumnNumber,   
   SQLSMALLINT TargetType, SQLPOINTER TargetValuePtr, SQLLEN BufferLength,    SQLLEN *StrLen_or_Ind);  
  
SQLGetDescRec (SQLHDESC DescriptorHandle, SQLSMALLINT RecNumber,   
   SQLCHAR *Name, SQLSMALLINT BufferLength,   
   SQLSMALLINT *StringLengthPtr, SQLSMALLINT *TypePtr,   
   SQLSMALLINT *SubTypePtr, SQLLEN *LengthPtr,   
   SQLSMALLINT *PrecisionPtr, SQLSMALLINT *ScalePtr,   
   SQLSMALLINT *NullablePtr);  
  
SQLParamOptions(SQLHSTMT hstmt, SQLULEN crow, SQLULEN * pirow);  
  
SQLPutData (SQLHSTMT StatementHandle, SQLPOINTER DataPtr,   
   SQLLEN StrLen_or_Ind);  
  
SQLRowCount (SQLHSTMT StatementHandle, SQLLEN* RowCountPtr);  
  
SQLSetConnectOption(SQLHDBC ConnectHandle, SQLUSMALLINT Option,   
   SQLULEN Value);  
  
SQLSetPos (SQLHSTMT StatementHandle, SQLSETPOSIROW RowNumber, SQLUSMALLINT Operation,  
   SQLUSMALLINT LockType);  
  
SQLSetParam (SQLHSTMT StatementHandle, SQLUSMALLINT ParameterNumber,   
   SQLSMALLINT ValueType, SQLSMALLINT ParameterType,   
   SQLULEN LengthPrecision, SQLSMALLINT ParameterScale,   
   SQLPOINTER ParameterValue, SQLLEN *StrLen_or_Ind);  
  
SQLSetDescRec (SQLHDESC DescriptorHandle, SQLSMALLINT RecNumber,   
   SQLSMALLINT Type, SQLSMALLINT SubType, SQLLEN Length,   
   SQLSMALLINT Precision, SQLSMALLINT Scale, SQLPOINTER DataPtr,   
   SQLLEN *StringLengthPtr, SQLLEN *IndicatorPtr);  
  
SQLSetScrollOptions (SQLHSTMT hstmt, SQLUSMALLINT fConcurrency,   
   SQLLEN crowKeyset, SQLUSMALLINT crowRowset);  
  
SQLSetStmtOption (SQLHSTMT StatementHandle, SQLUSMALLINT Option,   
   SQLULEN Value);  

Az SQL-adattípusok változásai

A következő négy SQL-típus továbbra is támogatott csak 32 bitesen; 64 bites fordítókhoz nincsenek definiálva. Ezek a típusok már nem használhatók az MDAC 2.7-ben lévő paraméterekhez; az ilyen típusok használata fordítóhibákat fog okozni a 64 bites platformokon.

#ifdef WIN32   
typedef SQLULEN SQLROWCOUNT;   
typedef SQLULEN SQLROWSETSIZE;   
typedef SQLULEN SQLTRANSID;   
typedef SQLLEN SQLROWOFFSET;   
#endif  

Az SQLSETPOSIROW definíciója a 32 bites és a 64 bites fordítók esetében is megváltozott:

#ifdef _WIN64   
typedef UINT64 SQLSETPOSIROW;   
#else   
#define SQLSETPOSIROW SQLUSMALLINT   
#endif  

Az SQLLEN és az SQLULEN definíciói megváltoztak a 64 bites fordítók esetében:

#ifdef _WIN64   
typedef INT64 SQLLEN;   
typedef UINT64 SQLULEN;   
#else   
#define SQLLEN SQLINTEGER   
#define SQLULEN SQLUINTEGER   
#endif  

Bár SQL_C_BOOKMARK elavult az ODBC 3.0-ban, a 2.0-s ügyfelek 64 bites fordítói esetében ez az érték megváltozott:

#ifdef _WIN64   
#define SQL_C_BOOKMARK SQL_C_UBIGINT   
#else   
#define SQL_C_BOOKMARK SQL_C_ULONG   
#endif  

A KÖNYVJELZŐ típus az újabb fejlécekben eltérően van definiálva:

typedef SQLULEN BOOKMARK;  

OdBC API-hívásokból visszaadott értékek mutatókkal

A következő ODBC-függvényhívások bemeneti paraméterként egy olyan pufferre mutató mutatót vesznek fel, amelyben az illesztőprogram adatokat ad vissza. A visszaadott adatok kontextusát és jelentését a függvények más bemeneti paraméterei határozzák meg. Bizonyos esetekben ezek a metódusok a 32 bites (4 bájtos) egész számok helyett 64 bites (8 bájtos egész szám) értékeket adhatnak vissza. Ezek az esetek a következők:

SQLColAttribute

Ha a FieldIdentifier paraméter az alábbi értékek egyikével rendelkezik, a *NumericAttribute függvény egy 64 bites értéket ad vissza:

SQL_DESC_AUTO_UNIQUE_VALUE

SQL_LEÍRÁS_KIS-nagybetű_ÉRZÉKENY

SQL_DESC_CONCISE_TYPE

SQL_DESC_COUNT

SQL leíró megjelenítési mérete

SQL_DESC_FIXED_PREC_SCALE

SQL_DESC_LENGTH

SQL_DESC_NULLABLE

SQL_DESC_NUM_PREC_RADIX

SQL_DESC_OCTET_LENGTH

SQL_DESC_PRECISION

SQL_DESC_SCALE

SQL_DESC_SEARCHABLE

SQL_DESC_TYPE

SQL_DESC_UNNAMED

SQL_DESC_UNSIGNED

SQL_DESC_UPDATABLE

SQLColAttributes

Ha az fDescType paraméter az alábbi értékek egyikével rendelkezik, a rendszer egy 64 bites értéket ad vissza a *pfDesc fájlban:

SQL_COLUMN_COUNT

SQL_COLUMN_DISPLAY_SIZE (SQL oszlop megjelenítési méret)

SQL_COLUMN_LENGTH

SQL_DESC_AUTO_UNIQUE_VALUE

SQL_LEÍRÁS_KIS-nagybetű_ÉRZÉKENY

SQL_DESC_CONCISE_TYPE

SQL_DESC_FIXED_PREC_SCALE

SQL_DESC_SEARCHABLE

SQL_DESC_UNSIGNED

SQL_DESC_UPDATABLE

SQLGetConnectAttr

Ha az Attribútum paraméter az alábbi értékek egyikével rendelkezik, a függvény egy 64 bites értéket ad vissza az Érték értékben:

SQL_ATTR_ASYNC_ENABLE

SQL_ATTR_ENLIST_IN_DTC

SQL_ATTR_ODBC_CURSORS

SQL_ATTR_QUIET_MODE

SQLGetConnectOption

Ha az Attribútum paraméter az alábbi értékek egyikével rendelkezik, a függvény egy 64 bites értéket ad vissza az Érték értékben:

SQL_ATTR_QUIET_MODE

SQLGetDescField

Ha a FieldIdentifier paraméter az alábbi értékek egyikével rendelkezik, a *ValuePtr függvény egy 64 bites értéket ad vissza:

SQL_DESC_ARRAY_SIZE

SQL_DESC_ARRAY_STATUS_PTR

SQL_DESC_BIND_OFFSET_PTR

SQL_DESC_DATA_PTR

SQL leíró megjelenítési mérete

SQL_DESC_INDICATOR_PTR

SQL_DESC_LENGTH

SQL_DESC_OCTET_LENGTH

SQL_DESC_OCTET_LENGTH_PTR

SQL_DESC_ROWS_PROCESSED_PTR

SQLGetDiagField

Ha a DiagIdentifier paraméter az alábbi értékek egyikével rendelkezik, a *DiagInfoPtr 64 bites értéket ad vissza:

SQL_DIAG_CURSOR_ROW_COUNT

SQL_DIAG_ROW_COUNT

SQL_DIAG_ROW_NUMBER

SQLGetInfo

Ha az InfoType paraméter az alábbi értékek egyikével rendelkezik, a *InfoValuePtr függvény 64 bites értéket ad vissza:

SQL_DRIVER_HDBC

SQL_DRIVER_HENV

SQL_DRIVER_HLIB

Ha az InfoType a következő 2 érték egyikével rendelkezik *Az InfoValuePtr 64 bites bemeneten és kimeneten egyaránt:

SQL_DRIVER_HDESC

SQL_DRIVER_HSTMT

SQLGetStmtAttr

Ha az Attribútum paraméter az alábbi értékek egyikével rendelkezik, a *ValuePtr függvény 64 bites értéket ad vissza:

SQL_ATTR_APP_PARAM_DESC

SQL_ATTR_APP_ROW_DESC

SQL_ATTR_ASYNC_ENABLE

SQL_ATTR_CONCURRENCY

SQL_ATTR_CURSOR_SCROLLABLE

SQL_ATTR_CURSOR_SENSITIVITY

SQL_ATTR_CURSOR_TYPE

SQL_ATTR_ENABLE_AUTO_IPD

SQL_ATTR_FETCH_BOOKMARK_PTR

SQL_ATTR_ROWS_FETCHED_PTR

SQL_ATTR_IMP_PARAM_DESC

SQL_ATTR_IMP_ROW_DESC

SQL_ATTR_KEYSET_SIZE

SQL_ATTR_MAX_LENGTH

SQL_ATTR_MAX_ROWS

SQL_ATTR_METADATA_ID

SQL_ATTR_NOSCAN

SQL_ATTR_PARAM_BIND_OFFSET_PTR

SQL_ATTR_PARAM_BIND_TYPE

SQL_ATTR_PARAM_OPERATION_PTR

SQL_ATTR_PARAM_STATUS_PTR

SQL_ATTR_PARAMS_PROCESSED_PTR

SQL_ATTR_PARAMSET_SIZE

SQL_ATTR_QUERY_TIMEOUT

SQL_ATTR_RETRIEVE_DATA

SQL_ATTR_ROW_ARRAY_SIZE

SQL_ATTR_ROW_BIND_OFFSET_PTR

SQL_ATTR_ROW_NUMBER

SQL_ATTR_ROW_OPERATION_PTR

SQL_ATTR_ROW_STATUS_PTR

SQL_ATTR_SIMULATE_CURSOR

SQL_ATTR_USE_BOOKMARKS

SQLGetStmtOption

Ha az Option paraméter az alábbi értékek egyikével rendelkezik, a függvény egy 64 bites értéket ad vissza a *Érték értékben:

SQL_KEYSET_SIZE

SQL_MAX_LENGTH

SQL_MAX_ROWS

SQL_ROWSET_SIZE

SQLSetConnectAttr

Ha az Attribútum paraméter az alábbi értékek egyikével rendelkezik, a függvény 64 bites értéket ad át az Érték értékben:

SQL_ATTR_ASYNC_ENABLE

SQL_ATTR_ENLIST_IN_DTC

SQL_ATTR_ODBC_CURSORS

SQL_ATTR_QUIET_MODE

SQLSetConnectOption

Ha az Attribútum paraméter az alábbi értékek egyikével rendelkezik, a függvény 64 bites értéket ad át az Érték értékben:

SQL_ATTR_QUIET_MODE

SQLSetDescField

Ha a FieldIdentifier paraméter az alábbi értékek egyikével rendelkezik, a ValuePtr 64 bites értéket ad át:

SQL_DESC_ARRAY_SIZE

SQL_DESC_ARRAY_STATUS_PTR

SQL_DESC_BIND_OFFSET_PTR

SQL_DESC_DATA_PTR

SQL leíró megjelenítési mérete

SQL_DESC_INDICATOR_PTR

SQL_DESC_LENGTH

SQL_DESC_OCTET_LENGTH

SQL_DESC_OCTET_LENGTH_PTR

SQL_DESC_ROWS_PROCESSED_PTR

SQLSetStmtAttr

Ha az Attribútum paraméter az alábbi értékek egyikével rendelkezik, a 64 bites érték a ValuePtrben lesz átadva:

SQL_ATTR_APP_PARAM_DESC

SQL_ATTR_APP_ROW_DESC

SQL_ATTR_ASYNC_ENABLE

SQL_ATTR_CONCURRENCY

SQL_ATTR_CURSOR_SCROLLABLE

SQL_ATTR_CURSOR_SENSITIVITY

SQL_ATTR_CURSOR_TYPE

SQL_ATTR_ENABLE_AUTO_IPD

SQL_ATTR_FETCH_BOOKMARK_PTR

SQL_ATTR_IMP_PARAM_DESC

SQL_ATTR_IMP_ROW_DESC

SQL_ATTR_KEYSET_SIZE

SQL_ATTR_MAX_LENGTH

SQL_ATTR_MAX_ROWS

SQL_ATTR_METADATA_ID

SQL_ATTR_NOSCAN

SQL_ATTR_PARAM_BIND_OFFSET_PTR

SQL_ATTR_PARAM_BIND_TYPE

SQL_ATTR_PARAM_OPERATION_PTR

SQL_ATTR_PARAM_STATUS_PTR

SQL_ATTR_PARAMS_PROCESSED_PTR

SQL_ATTR_PARAMSET_SIZE

SQL_ATTR_QUERY_TIMEOUT

SQL_ATTR_RETRIEVE_DATA

SQL_ATTR_ROW_ARRAY_SIZE

SQL_ATTR_ROW_BIND_OFFSET_PTR

SQL_ATTR_ROW_NUMBER

SQL_ATTR_ROW_OPERATION_PTR

SQL_ATTR_ROW_STATUS_PTR

SQL_ATTR_ROWS_FETCHED_PTR

SQL_ATTR_SIMULATE_CURSOR

SQL_ATTR_USE_BOOKMARKS

SQLSetStmtOption

Ha az Option paraméter az alábbi értékek egyikével rendelkezik, a függvény egy 64 bites értéket ad át az Érték értékben:

SQL_KEYSET_SIZE

SQL_MAX_LENGTH

SQL_MAX_ROWS

SQL_ROWSET_SIZE

Lásd még:

Az ODBC bemutatása