在 Microsoft Windows 2000 中您可以設定為每個動態連結程式庫 (DLL) 元件安裝在 COM + 執行階段中的唯一物件建構函式字串。這個建構函式字串通常用來指定必須能夠存取元件的所有物件執行個體的初始化字串。本文包含程式碼範例示範如何設定 COM + 物件建構函式字串為元件的物件執行個體可以使用的 Visual Basic 元件。
建構函式字串通常用來指定物件執行個體,元件的使用來建立資料庫連接的資料庫連接字串。為此目的使用建構函式字串的好處是它可防止連接字串被硬式編碼在元件的程式碼中。若要變更資料庫伺服器名稱,指向不同的資料庫或實作其他的修改就只需要修改元件的 COM + 物件建構函式,您不再需要變更元件的程式碼,並重新編譯實際的 DLL。除了儲存資料庫連接資訊中,,您也可以指定必須是可存取到所有的物件執行個體,它被設定的任何的元件初始化字串,以使用 COM + 物件建構函式的字串。
如何設定 COM + 物件建構函式的字串
Visual Basic 元件應該實作
IObjectConstruct COM + 介面來啟用其物件執行個體來存取 COM + 物件建構函式字串設定為它。
IObjectConstruct 公開具名建構 (
IObjectConstruct_Construct) 時建立元件的物件執行個體所引發的單一方法。您可以使用建構函式物件,做為參數傳遞給這個方法以取得設定的 COM + 物件建構函式字串。若要實作一個範例,示範可以這項功能的方式,請執行下列步驟:
- 在 Visual Basic 中開啟一個新的 [ActiveX DLL] 專案。
- 重新命名專案 prjConstruct 」。
- 重新命名類別模組 clsConstruct 」。
- 設定 COM + 服務程式庫 和 ActiveX 資料物件 2.5 程式庫 的專案參考。
- 複製並貼上下列程式碼類別模組中:
'General Declarations Section
Implements IObjectConstruct
Dim connstr As String
Private Sub IObjectConstruct_Construct(ByVal pCtorObj As Object)
Dim mConstructString As IObjectConstructString
Set mConstructString = pCtorObj
connstr = mConstructString.ConstructString
End Sub
Public Function GetAuthors() As ADODB.Recordset
Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset
Set cn = New ADODB.Connection
cn.Open connstr
Set rs = New ADODB.Recordset
rs.CursorLocation = adUseClient
rs.Open "Select * from Authors", cn, adOpenStatic, adLockBatchOptimistic
Set rs.ActiveConnection = Nothing
Set GetAuthors = rs
GetObjectContext.SetComplete
End Function
這個程式碼範例示範如何實作 IObjectConstruct_Construct 存取 COM + 物件建構函式的字串。建構 物件參數必須轉換成 IObjectConstructString 介面。IObjectConstructString 公開呼叫 ConstructString 可以用來存取 COM + 物件建構函式字串的單一屬性。請注意如何建構函式字串是指派給全域變數,而且 GetAuthors 函式中重複使用。 - 編譯 DLL。如果要建立 COM + 伺服器應用程式,以裝載 prjConstruct.clsConstruct 元件,請依照下列步驟執行:
- 在控制台中指向 [系統管理工具],然後再按一下 [元件服務],開啟 [元件服務 Microsoft 管理主控台 (MMC) 嵌入式管理單元]。
- 按一下以展開 [元件服務]、 [電腦]、 [我的電腦,] 及 [COM + 應用程式 節點。按一下 [COM + 應用程式。
- COM + 應用程式 上按一下滑鼠右鍵,指向 [新增],然後再按一下 [應用程式。
- 建立名為 VBComPlusTest,一個空的伺服器端應用程式並設定其身分識別] 屬性來使用互動式使用者的認證。
- 完成此精靈,然後按一下 [完成]。這會建立範例 COM + 應用程式用來裝載 prjConstruct.clsConstruct Visual Basic 元件。
- 如果要安裝 prjConstruct.clsConstruct 元件"VBComPlusTest 「 COM + 應用程式中,請依照下列步驟執行:
- 在 [元件服務 MMC] 嵌入式管理單元中,按一下以展開 [VBComPlusTest 節點。按一下 [元件] 子資料夾。
- 元件 上按一下滑鼠右鍵,指向 [新增],然後再按一下 [元件]。
- [COM 元件安裝精靈] 中,按一下 [下一步]、 按一下 [安裝新元件,和選取 prjConstruct.dll,然後按一下 [下一步]。
- 完成此精靈,然後按一下 [完成]。
- 開啟 Visual Basic 元件 prjConstruct.clsConstruct 的 [屬性] 視窗。
- 在 [啟動] 索引標籤上選取 [啟用物件建構] 核取方塊。
- 在 建構函式字串] 方塊指定下列的 ADO 連接字串,並按一下 [確定]:
注意: 此範例使用 Microsoft SQL Server PUBS 範例資料庫
"Provider=SQLOLEDB;Data Source=<Your SQL Server>;Initial Catalog=pubs;" & _
"User Id=<User Id>;Password=<Password>"
如何使用 COM + 物件建構函式的字串
- 開啟 [Visual Basic 來測試 Visual Basic COM + 元件中的 [新的標準執行檔專案]。預設會建立 Form1。
- 將清單方塊 (清單 1) 和指令按鈕 (Command1) 加入至 Form1。
- 複製並貼上下列程式碼的 Command1 Click 事件中:
Dim obj As Object
Dim rs As Object
Set obj = CreateObject("prjConstruct.clsConstruct")
Set rs = obj.GetAuthors()
Do While Not rs.EOF
List1.AddItem rs.fields("au_fname")
rs.movenext
Loop
Set obj = Nothing
- 儲存標準執行檔的專案,並執行它。
- 按一下 Command1 填入 Authors 資料表中的所有作者的第一個名稱清單方塊。
若要示範 COM + 物件建構函式字串的實用性進行,變更建構函式字串以指向不同的 SQL Server 同時具有 PUBS 範例資料庫中的 [
資料來源] 屬性。當您執行用戶端程式碼時,新資料來源記錄會擷取並顯示。若要確認這,加入新資料錄至作者資料表第二個 SQL Server PUBS 資料庫中。
文章編號: 271284 - 上次校閱: 2004年6月29日 - 版次: 1.2
這篇文章中的資訊適用於:
- Microsoft Visual Basic 5.0 Professional Edition
- Microsoft Visual Basic 6.0 Professional Edition
- Microsoft Visual Basic 5.0 Enterprise Edition
- Microsoft Visual Basic Enterprise Edition for Windows 6.0
| kbmt kbhowto kbmdacnosweep KB271284 KbMtzh |
機器翻譯重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。
按一下這裡查看此文章的英文版本:
271284
(http://support.microsoft.com/kb/271284/en-us/
)
Microsoft及(或)其供應商不就任何在本伺服器上發表的文字資料及其相關圖表資訊的恰當性作任何承諾。所有文字資料及其相關圖表均以「現狀」供應,不負任何擔保責任。Microsoft及(或)其供應商謹此聲明,不負任何對與此資訊有關之擔保責任,包括關於適售性、適用於某一特定用途、權利或不侵權的明示或默示擔保責任。Microsoft及(或)其供應商無論如何不對因或與使用本伺服器上資訊或與資訊的實行有關而引起的契約、過失或其他侵權行為之訴訟中的特別的、間接的、衍生性的損害或任何因使用而喪失所導致的之損害、資料或利潤負任何責任。