分享方式:


行為變更和 ODBC 3.x 驅動程式

環境屬性SQL_ATTR_ODBC_VERSION會向驅動程式指出它是否需要展示 ODBC 2.x 行為或 ODBC 3.x 行為。 設定SQL_ATTR_ODBC_VERSION環境屬性的方式取決於應用程式。 ODBC 3.x 應用程式必須呼叫 SQLSetEnvAttr,才能在呼叫 SQLAllocHandle 來配置環境控制碼,以及呼叫 SQLAllocHandle 以配置連接控制碼之前,先呼叫 SQLSetEnvAttr 來設定此屬性。 如果無法這麼做,驅動程式管理員會在後者呼叫 SQLAllocHandle 時傳回 SQLSTATE HY010 (函式順序錯誤)。

注意

如需行為變更及應用程式運作方式的詳細資訊,請參閱 行為變更

使用 ODBC 3.x 標頭檔重新編譯的 ODBC 2.x 應用程式和 ODBC 2.x 應用程式不會呼叫 SQLSetEnvAttr 不過,他們會呼叫 SQLAllocEnv 而不是 SQLAllocHandle 來配置環境控制碼 。 因此,當應用程式在驅動程式管理員中呼叫 SQLAllocEnv 時,驅動程式管理員會在驅動程式中呼叫 SQLAllocHandle SQLSetEnvAttr 。 因此,ODBC 3.x 驅動程式一律可以計入所設定的這個屬性上。

如果使用 ODBC_STD編譯旗標編譯的標準應用程式會呼叫 SQLAllocEnv(這可能是因為 ISO 中的 SQLAllocEnv 未取代,因此呼叫會在編譯時期對應至 SQLAllocHandleStd 。 在執行時間,應用程式會呼叫 SQLAllocHandleStd 。 驅動程式管理員會將SQL_ATTR_ODBC_VERSION環境屬性設定為 SQL_OV_ODBC3。 呼叫 SQLAllocHandleStd 就相當於呼叫 SQLAllocHandle (其 HandleType 為 SQL_HANDLE_ENV),以及呼叫 SQLSetEnvAttr 以將 SQL_ATTR_ODBC_VERSION 設為 SQL_OV_ODBC3。

在某些驅動程式架構中,視連線而定,驅動程式必須顯示為 ODBC 2.x 驅動程式或 ODBC 3.x 驅動程式。 在此情況下,驅動程式可能實際上不是驅動程式,而是位於驅動程式管理員與另一個驅動程式之間的圖層。 例如,它可能會模擬驅動程式,例如 ODBC Spy。 在另一個範例中,它可能會作為閘道,例如 EDA/SQL。 若要顯示為 ODBC 3.x 驅動程式,這類驅動程式必須能夠匯出 SQLAllocHandle ,而且要顯示為 ODBC 2.x 驅動程式,必須能夠匯出 SQLAllocConnect SQLAllocEnv SQLAllocStmt 。 配置環境、連接或語句時,驅動程式管理員會檢查此驅動程式是否匯出 SQLAllocHandle 。 因為驅動程式會執行此動作,驅動程式管理員會在驅動程式中呼叫 SQLAllocHandle 。 如果驅動程式使用 ODBC 2.x 驅動程式,驅動程式必須視需要將 SQLAllocHandle 的呼叫對應至 SQLAllocConnect SQLAllocEnv SQLAllocStmt 當做 ODBC 2.x 驅動程式時,它也必須對 SQLSetEnvAttr 呼叫執行任何動作。

此章節包含下列主題。