共用方式為


SQLInstallDriverEx 函式

一致性
引進的版本:ODBC 3.0

摘要
SQLInstallDriverEx 會將驅動程式的相關信息新增至系統資訊中的Odbcinst.ini專案,並將驅動程式的 UsageCount 遞增 1。 不過,如果驅動程式的版本已經存在,但驅動程式的UsageCount值不存在,新的UsageCount值會設定為2。

此函式實際上不會複製任何檔案。 呼叫程式必須負責正確將驅動程式的檔案複製到目標目錄。

SQLInstallDriverEx 的功能也可以使用 ODBCCONF.EXE來存取

語法

  
BOOL SQLInstallDriverEx(  
     LPCSTR    lpszDriver,  
     LPCSTR    lpszPathIn,  
     LPSTR     lpszPathOut,  
     WORD      cbPathOutMax,  
     WORD *    pcbPathOut,  
     WORD      fRequest,  
     LPDWORD   lpdwUsageCount);  

引數

lpszDriver
[輸入]驅動程式描述(通常是相關聯的 DBMS 名稱)呈現給使用者,而不是實體驅動程式名稱。 lpszDriver 自變數必須包含描述驅動程式之關鍵詞/值組的兩倍結束清單。 如需關鍵詞/值組的詳細資訊,請參閱 驅動程式規格子機碼。 如需多倍 Null 終止字串的詳細資訊,請參閱 ConfigDSN 函式

lpszPathIn
[輸入]安裝目標目錄的完整路徑,或 Null 指標。 如果 lpszPathIn 是 Null 指標,驅動程式將會安裝在系統目錄中。

lpszPathOut
[輸出]應該安裝驅動程式的目標目錄路徑。 如果驅動程式先前尚未安裝, lpszPathOut 應該與 lpszPathIn 相同。 如果先前已安裝驅動程式, lpszPathOut 是先前安裝的路徑。

cbPathOutMax
[輸入]lpszPathOut長度。

pcpathOut
[輸出]可用在 lpszPathOut傳回的位元組總數(不包括 Null 終止字元)。 如果可用的位元組數目大於或等於 cbPathOutMax,lpszPathOut 中的輸出路徑會截斷為 cbPathOutMax 減去 null 終止字元。 對pcspcPathOut 自變數可以是 Null 指標。

fRequest
[輸入]要求的類型。 fRequest 自變數必須包含下列其中一個值:

ODBC_INSTALL_INQUIRY:詢問可以安裝驅動程式的位置。

ODBC_INSTALL_COMPLETE:完成安裝要求。

lpdwUsageCount
[輸出]呼叫此函式之後驅動程式的使用計數。

應用程式不應設定使用量計數。 ODBC 會維護此計數。

傳回

如果函式成功,則傳回 TRUE,如果失敗,則傳回 FALSE。

診斷

當 SQLInstallDriverEx 傳回 FALSE 時,可以呼叫 SQLInstallerError 來取得相關聯的 *pfErrorCode 值。 下表列出 SQLInstallerError 可傳回的 *pfErrorCode 值,並說明此函式內容中的每個值。

*pfErrorCode 錯誤 描述
ODBC_ERROR_GENERAL_ERR 一般安裝程序錯誤 發生錯誤,沒有特定的安裝程序錯誤。
ODBC_ERROR_INVALID_BUFF_LEN 無效的緩衝區長度 lpszPathOut 自變數不夠大,無法包含輸出路徑。 緩衝區包含截斷的路徑。

cbPathOutMax 自變數為 0,且 fRequest ODBC_INSTALL_COMPLETE。
ODBC_ERROR_INVALID_REQUEST_TYPE 要求類型無效 fRequest 自變數不是下列其中一項:

ODBC_INSTALL_INQUIRY ODBC_INSTALL_COMPLETE
ODBC_ERROR_INVALID_KEYWORD_VALUE 無效的關鍵詞/值組 lpszDriver 自變數包含語法錯誤。
ODBC_ERROR_INVALID_PATH 安裝路徑無效 lpszPathIn 自變數包含無效的路徑。
ODBC_ERROR_LOAD_LIBRARY_FAILED 無法載入驅動程式或翻譯工具設定連結庫 無法載入驅動程式設定連結庫。
ODBC_ERROR_INVALID_PARAM_SEQUENCE 無效的參數序列 lpszDriver 自變數未包含關鍵詞/值組的清單。
ODBC_ERROR_USAGE_UPDATE_FAILED 無法遞增或遞減元件使用量計數 安裝程式無法遞增驅動程式的使用計數。

註解

lpszDriver 自變數是關鍵詞/值組形式的屬性清單。 每個配對都會以 Null 位元組終止,而整個清單會以 Null 位元組終止。 (也就是說,兩個 Null 位元組會標示清單的結尾。此清單格式如下所示:

driver-desc\ 0Driver=driver-DLL-filename\0[Setup=setup-DLL-filename\0]

[driver-attr-keyword1=value1\0][driver-attr-keyword2 value2=\0]...\0

其中 \0 是 null 位元組,而 driver-attr-keywordn 是任何驅動程序屬性關鍵詞。 關鍵詞必須以指定的順序顯示。 例如,假設格式化文本文件的驅動程式具有個別的驅動程序和設定 DLL,而且可以使用具有.txt和.csv擴展名的檔案。 此驅動程式的 lpszDriver 自變數可能如下所示:

Text\0Driver=TEXT.DLL\0Setup=TXTSETUP.DLL\0FileUsage=1\0  
FileExtns=*.txt,*.csv\0\0  

假設 SQL Server 的驅動程式沒有個別的設定 DLL,而且沒有任何驅動程式屬性關鍵詞。 此驅動程式的 lpszDriver 自變數可能如下所示:

SQL Server\0Driver=SQLSRVR.DLL\0\0  

在 SQLInstallDriverExlpszDriver 自變數擷取驅動程式的相關信息之後,它會將驅動程式描述新增至系統資訊中Odbcinst.ini專案的 [ODBC Drivers] 區段。 然後,它會建立標題為驅動程式描述的區段,並新增驅動程式 DLL 和設定 DLL 的完整路徑。 最後,它會傳回安裝目標目錄的路徑,但不會將驅動程式檔案複製到其中。 呼叫程式實際上必須將驅動程式檔案複製到目標目錄。

SQLInstallDriverEx 會將已安裝驅動程式的元件使用量計數遞增 1。 如果驅動程式的版本已經存在,但驅動程式的元件使用量計數不存在,新的元件使用計數值會設定為 2。

應用程式安裝程式負責實際複製驅動程式檔案,並維護檔案使用量計數。 如果驅動程式檔案先前尚未安裝,應用程式安裝程式必須複製 lpszPathIn 路徑中的檔案,並建立檔案使用量計數。 如果先前已安裝檔案,安裝程式只會遞增檔案使用量計數,並在 lpszPathOut 自變數中傳回先前安裝的路徑。

注意

如需元件使用量計數和檔案使用量計數的詳細資訊,請參閱 使用量計數

如果應用程式先前已安裝舊版驅動程式檔案,則驅動程式應該卸載再重新安裝,讓驅動程式元件使用計數有效。 應該先呼叫 SQLConfigDriver (具有 fRequest ODBC_REMOVE_DRIVER),然後 呼叫 SQLRemoveDriver 以遞減元件使用量計數。 接著應該呼叫 SQLInstallDriverEx 來重新安裝驅動程式,並遞增元件使用量計數。 應用程式安裝程序必須將舊檔案取代為新檔案。 檔案使用計數會維持不變,而使用舊版檔案的任何其他應用程式現在都會使用較新版本。

注意

如果先前已安裝驅動程式且 呼叫 SQLInstallDriverEx 以在不同的目錄中安裝驅動程式,則函式會傳回 TRUE,但 lpszPathOut 會包含驅動程式已安裝所在的目錄。 它不會包含 lpszDriver 自變數中輸入的目錄。

SQLInstallDriverEx 中 lpszPathOut路徑的長度允許兩階段安裝程式,因此應用程式可以呼叫具有 fRequest ODBC_INSTALL_INQUIRY 模式的 SQLInstallDriverEx 來判斷什麼是 cbPathOutMax 這將會傳回在pcerpathOut 緩衝區中可用的位元組總數。 接著,可以使用 fRequest ODBC_INSTALL_COMPLETE 呼叫 SQLInstallDriverEx,並將 cbPathOutMax 自變數設定為ODBC_INSTALL_COMPLETE緩衝區中的值,加上 null 終止字元。

如果您選擇不使用 SQLInstallDriverEx 的兩階段模型,則必須將 cbPathOutMax 設定為定義目標目錄路徑的記憶體大小,將值_MAX_PATH,如 Stdlib.h 中所定義,以避免截斷。

當 fRequest ODBC_INSTALL_COMPLETE時SQLInstallDriverEx 不允許 lpszPathOut 成為 NULL(或 cbPathOutMax 為 0)。 如果 fRequest 是ODBC_INSTALL_COMPLETE,當可用的位元元組數目大於或等於 cbPathOutMax 時,就會傳回 FALSE,併產生截斷的結果。

呼叫 SQLInstallDriverEx 並複製驅動程式檔案的應用程式安裝程式之後(如有必要),驅動程式安裝程式 DLL 必須呼叫 SQLConfigDriver 來設定驅動程式的組態。

如需下列資訊 請參閱
安裝驅動程式管理員 SQLInstallDriverManager