文章編號: 248241 - 上次校閱: 2006年9月6日 - 版次: 3.3

INF:不安裝用戶端公用程式而啟用 SQL DMO 用戶端

系統提示本文適用於您使用的作業系統之外的作業系統。與您不相關的文章內容已停用。

在此頁中

全部展開 | 全部摺疊

結論

本文會記錄啟用 SQL Server Distributed Management Objects (SQL-DMO) 用戶端功能的必要步驟,而毋需安裝 SQL Server「用戶端公用程式」。

其他相關資訊

一般狀況

您可以撰寫利用 SQL Server 中 SQL-DMO 物件模型的應用程式。該應用程式在伺服器電腦本身執行順利,而且在已安裝 SQL Server「用戶端公用程式」的用戶端電腦中執行時也順利。但是,應用程式無法單獨執行,而且您可能也會看到與此相關的一些錯誤訊息。最常見的錯誤訊息包括:
ActiveX 無法建立物件
Field is not bound correctly (欄位未正確繫結)
找不到進入點
注意:安裝 Microsoft Data Access Components (MDAC) 無法解決問題。

MDAC 不會安裝 Sqldmo.dll 檔或許多與此 Sqldmo.dll 檔相關聯的其中任何一個相依 DLL。MDAC 中包含的是許多 SQL-DMO 用戶端連線使用的相關 DLL。無論如何,將 MDAC 與您的應用程式安裝搭配在一起並不是最有效率的解決方式,因為您並不需要所有的 MDAC DLL 來讓 DMO 連線正常運作。而且,MDAC 會安裝其他許多您可能永遠都不會在用戶端電腦中使用的功能。在這裡要說明的重點是:您不需要安裝所有的 MDAC 以取得所需的功能,只要安裝必要的 DLL 就夠了。這些 DLL 會在本文中稍後詳細說明。

由於說明了有不同類型的 DLL 以及必須放置的位置,我們要稍微離題一下,簡短地探討一下 Win32 和 COM 兩種 DLL。在本文的討論範圍中,您只需知道如何分辨這兩者,而且分辨清楚之後如何處理 DLL 就夠了。有了這個概念以後,下面就說明您所需要知道的事項:
  • 您必須透過 Regsvr32 公用程式註冊 COM DLL。
  • 您必須將原生 Win32 DLL 放在應用程式路徑中。
  • 您也可以將原生 Win32 DLL 放入 Win32 目錄中。
有時候可能會很難分辨 COM 與非 COM DLL,但是一般來說,COM DLL 一定會有下列進入點:
  • DllGetClassObject
  • DllRegisterServer
  • DllUnregisterServer
  • DllCanUnloadNow
如果要檢視這些進入點,請用滑鼠右鍵按一下 DLL,然後按一下快顯功能表上的 [快速檢視],而出現的資訊是註記在 DLL 資訊的 "Export Table" 區段中。

以下列出從用戶端啟用 DMO 必須要有的 SQL-DMO 相關 DLL 清單:
  • Sqldmo.dll
  • Sqldmo.rll
  • Sqlsvc.dll
  • Sqlsvc.rll
  • Sqlwoa.dll
  • Sqlresld.dll
  • Sqlwid.dll
  • W95scm.dll
在上面這份 DLL 清單中,您只需要 Sqldmo.dll 就能在用戶端電腦中註冊。但是,為了順利註冊 Sqldmo.dll 檔,Sqldmo.rll 檔必須位於用戶端電腦的下列目錄中:
(伺服器端位置):c:\Mssql7\Binn\Resources\1033
(用戶端位置):c:\Winnt\System32\Resources\1033
說到 Sqldmo.rll 檔,大家都有許多問題。.rll 檔是當地語系化的資源檔。資源目錄會視 SQL Server 和用戶端安裝中設定的國家語言而各有不同。在本範例中,目錄 1033 是語言識別碼 0X0409 (代表美式英文) 的十進位數表示。在其中放入 .rll 檔之後,就可以叫用 Regsvr32 公用程式,註冊 Sqldmo.dll 檔。註冊該檔案的命令如下:
C:\Regsvr32 Sqldmo.dll
				
順利註冊完成以後,應該會收到如下內容的訊息:
DLLRegisterServer in SQLDMO.dll succeeded. (SQLDMO.dll 中的 DLLRegisterServer 成功。)
如果要在應用程式的自主式安裝中加入自動化此註冊程序的步驟,請參閱與 Regsvr32 公用程式相關聯的各種不同參數。以無訊息方式註冊該檔案的命令如下:
c:\regsvr32 /s- sqldmo.dll
				
包含 Sqldmo.dll 檔的目錄必須在用戶端電腦中具有特定結構,否則您會收到類似如下內容的錯誤訊息:
LoadLibrary("C:\Winnt\System32\sqldmo.dll") failed.
GetLastError returns 0x0000007e (LoadLibrary("C:\Winnt\System32\sqldmo.dll") 失敗。GetLastError 傳回 0x0000007e)
這個錯誤訊息表示發生錯誤 126 (以十進位表示),此代碼對應的是「找不到指定的模組」錯誤。在本範例中,這個訊息與 Sqldmo.rll 檔有關。也就是說,Regsvr32 公用程式雖然有找到 Sqldmo.dll 檔,但是無法完成其註冊作業,除非 Sqldmo.rll 檔也可以在預期的 1033 子目錄中使用。

如果要避免此錯誤,請依照下列步驟執行:
  1. 在 Sqldmo.dll 所在的位置中加入名為 "Resources" 的目錄。
  2. 在 Resources 目錄下加入名為 "1033" 的子目錄。
  3. 將 Sqldmo.rll 檔複製到此目錄中。
完成以後,目錄結構應該和下列類似:
Directory that contains Sqldmo.dll\Resources\1033
而該 1033 目錄中應該含有 Sqldmo.rll 檔。

除了上文提及的 DLL 以外,也要確定已安裝適當的網路程式庫 DLL。您需要的主要網路程式庫 DLL 如下:
  • 具名管道:Dbnmpntw.dll
  • 通訊端:Dbmssocn.dll
  • 多重通訊協定:Dbmsrpcn.dll
這些都是 Win32 DLL,因此您不需要註冊這些 DLL。只要將這些 DLL 放入 Microsoft Windows NT 的 System32 目錄中,或是 Microsoft Windows 95 或 Windows 98 的 System 目錄中即可。

完成上述步驟之後,用戶端應用程式應該就能啟動,而不會發生本來因為缺少必要檔案所造成的問題。

這篇文章中的資訊適用於:
  • Microsoft SQL Server 2000 Standard Edition
  • Microsoft SQL Server 7.0 Standard Edition
關鍵字:?
kbinfo KB248241
Microsoft及(或)其供應商不就任何在本伺服器上發表的文字資料及其相關圖表資訊的恰當性作任何承諾。所有文字資料及其相關圖表均以「現狀」供應,不負任何擔保責任。Microsoft及(或)其供應商謹此聲明,不負任何對與此資訊有關之擔保責任,包括關於適售性、適用於某一特定用途、權利或不侵權的明示或默示擔保責任。Microsoft及(或)其供應商無論如何不對因或與使用本伺服器上資訊或與資訊的實行有關而引起的契約、過失或其他侵權行為之訴訟中的特別的、間接的、衍生性的損害或任何因使用而喪失所導致的之損害、資料或利潤負任何責任。