將 3.5 驅動程式升級至 3.8 驅動程式

本主題提供將 ODBC 3.5 驅動程式升級至 ODBC 3.8 驅動程式的指南和注意事項。

版本號碼

下列為與版本號碼有關的指南:

  • 驅動程式應支援 SQL_ATTR_ODBC_VERSION 的 SQL_OV_ODBC3_80,並針對 SQL_OV_ODBC2、SQL_OV_ODBC3 和 SQL_OV_ODBC3_80 以外的值傳回 SQL_ERROR。 如果驅動程式從 SQLSetEnvAttr 函式傳回 SQL_SUCCESS,則驅動程式管理員的未來版本會假設驅動程式支援 ODBC 合規性層級。

  • 當 SQL_DRIVER_ODBC_VER 傳遞至 InfoType 時,3.8 版驅動程式應從 SQLGetInfo 傳回 03.80。 不過,舊版 Microsoft Windows 中所包含的舊版驅動程式管理員會將驅動程式視為 3.5 版驅動程式,並發出警告。

    在 Windows 7 中,驅動程式管理員版本為 03.80。 在 Windows 8 中,透過 SQLGetInfo SQL_DM_VER (InfoType參數) 的驅動程式管理員版本為 03.81。 在 Windows 7 和 Windows 8 中,SQL_ODBC_VER 都會將版本報告為 03.80。

驅動程式特定 C 資料類型

當驅動程式與 3.8 版 ODBC 應用程式搭配使用時,便能自訂 C 資料類型。 (如需詳細資訊,請參閱 ODBC 中的 C 資料類型。) 不過,針對 3.8 驅動程式並無規定須實作任何驅動程式特定 C 類型。 但驅動程式仍應執行 C 類型的範圍檢查;驅動程式管理員不會對 3.8 驅動程式執行此動作。 為了方便驅動程式開發,可依照下列格式定義驅動程式特定 C 資料類型的值:

SQL_DRIVER_C_TYPE_BASE+0, SQL_DRIVER_C_TYPE_BASE+1  
驅動程式特定資料類型、描述項類型、資訊類型、診斷類型與屬性

在開發新驅動程式時,應使用驅動程式特定資料類型、描述項類型、資訊類型、診斷類型與屬性範圍。 針對驅動程式特定範圍及其基底類型值,在 驅動程式特定資料類型、描述項類型、資訊類型、診斷類型與屬性中會有相關討論。

連接共用

為了更加妥善管理連線共用,ODBC 3.8 引進 SQLSetConnectAttr 中的 SQL_ATTR_RESET_CONNECTION 連線屬性。 SQL_RESET_CONNECTION_YES 是此屬性的唯一有效值。 SQL_ATTR_RESET_CONNECTION 會在驅動程式管理員將連線放入連線集區之前設定,以便驅動程式將其他連線屬性重設為預設值。

為了避免與伺服器進行不必要的通訊,驅動程式可以在從集區重複使用連線之後,延遲連線屬性重設,直到與遠端伺服器進行下一次通訊為止。

請注意,SQL_ATTR_RESET_CONNECTION 僅用於驅動程式管理員與驅動程式之間的通訊。 應用程式無法直接設定此屬性。 所有 3.8 版驅動程式皆應實作此連線屬性。

串流輸出參數

ODBC 3.8 版引進串流輸出參數,就擷取輸出參數而言,屬於更方便調整的方式。 (如需詳細資訊,請參閱使用 SQLGetData 擷取輸出參數。) 若要支援此功能,當 SQL_GETDATA_EXTENSIONS 為 SQLGetInfo 呼叫中的 InfoType 時,驅動程式應在傳回值中設定 SQL_GD_OUTPUT_PARAMS。 在驅動程式中必須實作具有串流輸出參數的 SQL 類型支援。 驅動程式管理員不會針對無效 SQL 類型產生錯誤。 支援串流輸出參數的 SQL 類型會在驅動程式中定義。

如果應用程式使用 SQLGetData 擷取的參數與 SQLParamData 所傳回的參數不同,則驅動程式便會傳回 SQL_ERROR。

非同步執行連線作業 (輪詢方法)

驅動程式可以啟用各種連線作業的非同步支援。

從 Windows 7 開始,ODBC 支援輪詢方法 (如需詳細資訊,請參閱非同步執行 (輪詢方法)。 針對 3.8 版 ODBC 驅動程式,並無規定須在連線控制代碼上實作非同步作業。 即使驅動程式未在連線控制代碼上實作非同步作業,驅動程式仍應實作 SQL_ASYNC_DBC_FUNCTIONS InfoType 並傳回 SQL_ASYNC_DBC_NOT_CAPABLE

在啟用非同步連線作業時,連線作業的執行時間是所有重複呼叫的總時間。 如果在總時間超過 SQL_ATTR_CONNECTION_TIMEOUT 連線屬性所設定的值之後,發生了最後一次重複呼叫,且作業尚未完成,驅動程式則會傳回 SQL_ERROR,並使用 SQLState HYT01 和訊息「已超過連線逾時」來記錄診斷記錄。 如果作業已完成,則不會逾時。

SQLCancelHandle 函式

ODBC 3.8 支援 SQLCancelHandle 函式,可用於取消連線和陳述式作業。 支援 SQLCancelHandle 的驅動程式必須匯出函式。 如果應用程式在陳述式控制代碼上呼叫 SQLCancelSQLCancelHandle,則驅動程式不該取消任何進行中的同步或非同步連線函式。 同樣地,如果應用程式在連線控制代碼上呼叫 SQLCancelHandle,則驅動程式不該取消任何進行中的同步或非同步陳述式函式。 此外,如果應用程式在連線控制代碼上呼叫 SQLCancelHandle,則驅動程式不該取消瀏覽作業 (SQLBrowseConnect 會傳回SQL_NEED_DATA)。 在這些情況下,驅動程式應傳回 HY010,「函式順序錯誤」。

無須同時支援 SQLCancelHandle 和非同步連線作業。 驅動程式可以支援非同步連線作業,但不支援 SQLCancelHandle,反之亦然。

暫停連線

ODBC 3.8 驅動程式管理員可讓連線處於暫停狀態。 應用程式會呼叫 SQLDisconnect,從而釋放與連線相關聯的資源。 在此情況下,驅動程式應嘗試不檢查連線狀態,並盡可能釋放更多資源。 如需暫停狀態的詳細資訊,請參閱 SQLEndTran 函式

可感知驅動程式的連接共用

Windows 8 中的 ODBC 可讓驅動程式自訂連線集區行為。 如需詳細資訊,請參閱驅動程式感知連接共用

非同步執行 (通知方法)

ODBC 3.8 支援非同步作業的通知方法,從 Windows 8 開始提供。 如需詳細資訊,請參閱非同步執行 (通知方法)

另請參閱

開發 ODBC 驅動程式
Microsoft 提供的 ODBC 驅動程式
ODBC 3.8 的新功能