將 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 的驅動程式必須匯出函式。 如果應用程式在陳述式控制代碼上呼叫 SQLCancel 或 SQLCancelHandle,則驅動程式不該取消任何進行中的同步或非同步連線函式。 同樣地,如果應用程式在連線控制代碼上呼叫 SQLCancelHandle,則驅動程式不該取消任何進行中的同步或非同步陳述式函式。 此外,如果應用程式在連線控制代碼上呼叫 SQLCancelHandle,則驅動程式不該取消瀏覽作業 (SQLBrowseConnect 會傳回SQL_NEED_DATA)。 在這些情況下,驅動程式應傳回 HY010,「函式順序錯誤」。
無須同時支援 SQLCancelHandle 和非同步連線作業。 驅動程式可以支援非同步連線作業,但不支援 SQLCancelHandle,反之亦然。
暫停連線
ODBC 3.8 驅動程式管理員可讓連線處於暫停狀態。 應用程式會呼叫 SQLDisconnect,從而釋放與連線相關聯的資源。 在此情況下,驅動程式應嘗試不檢查連線狀態,並盡可能釋放更多資源。 如需暫停狀態的詳細資訊,請參閱 SQLEndTran 函式。
可感知驅動程式的連接共用
Windows 8 中的 ODBC 可讓驅動程式自訂連線集區行為。 如需詳細資訊,請參閱驅動程式感知連接共用。
非同步執行 (通知方法)
ODBC 3.8 支援非同步作業的通知方法,從 Windows 8 開始提供。 如需詳細資訊,請參閱非同步執行 (通知方法)。