行為變更和 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 呼叫執行任何動作。
此章節包含下列主題。