行為變更

行為變更指的是介面的「語法」維持不變,但「語意」已變更。 由於這些變更,ODBC 2.x 中使用的功能與 ODBC 3.x 中使用的相同功能,行為會有所不同。

應用程式要展現 ODBC 2.x 行為或 ODBC 3.x 行為,是由 SQL_ATTR_ODBC_VERSION 環境屬性來決定。 此 32 位的值設為 SQL_OV_ODBC2 會展現 ODBC 2.x 行為,設為 SQL_OV_ODBC3 則會展現 ODBC 3.x 行為。

SQL_ATTR_ODBC_VERSION 環境屬性是透過呼叫 SQLSetEnvAttr 所設定。 在應用程式呼叫 SQLAllocHandle 來配置環境控制代碼之後,必須立即呼叫 SQLSetEnvAttr 來設定其所展現的行為。 (因此,有一個新的環境狀態可用來描述已配置但無版本狀態的環境控制代碼。) 如需詳細資訊,請參閱附錄 B:ODBC 狀態轉換資料表

應用程式狀態會指出其使用 SQL_ATTR_ODBC_VERSION 環境屬性所展現的行為,但該屬性對應用程式是與 ODBC 2.x 或 ODBC 3.x 驅動程式連線不會產生影響。 ODBC 3.x 應用程式可連線至 ODBC 2.x 或 3.x 驅動程式,無論環境屬性設定為何。

ODBC 3. x 應用程式不應呼叫 SQLAllocEnv。 因此,如果驅動程式管理員收到對 SQLAllocEnv 的呼叫,會將應用程式識別為 ODBC 2.x 應用程式。

SQL_ATTR_ODBC_VERSION 屬性會影響 ODBC 3.x 驅動程式的三個不同層面的行為:

  • SQLSTATE

  • 日期、時間及時間戳記的資料類型

  • SQLTables 中的 CatalogName 參數接受 ODBC 3.x 的搜尋模式,但不接受 ODBC 2.x 中的搜尋模式

SQL_ATTR_ODBC_VERSION 環境屬性的設定不會影響 SQLSetParamSQLBindParamSQLColAttribute 也不受此位元的影響。 儘管 SQLColAttribute 會傳回受到 ODBC 版本 (日期類型、精確度、小數位數以及長度) 影響的屬性,但預期的行為是由 FieldIdentifier 引數的值所決定。 當 FieldIdentifier 等於 SQL_DESC_TYPE 時,SQLColAttribute 會傳回日期、時間及時間戳記的 ODBC 3.x 程式碼;當 FieldIdentifier 等於 SQL_COLUMN_TYPE 時,SQLColAttribute 會傳回日期、時間及時間戳記的 ODBC 2.x 程式碼。

此章節包含下列主題。