topcat姍舞之間的極度凝聚

分享...是知識累積的開始....(Microsoft ASP/ASP.NET MVP)


My Links

Blog Stats

News

搬家公告:
未來小喵的文章會以點部落為主。
http://www.dotblogs.com.tw/topcat/
小鋪也會同步貼過來。不過在排版上能會比較沒有兼顧到。歡迎舊雨新知多多支持。 有與小喵交換網址或者訂閱的人,也建議連到那邊去。



目前線上人數:

隨筆分類

每月文章

影像集

其他部落格

工具網站

技術論壇

線上教學

語言學習

小喵撰寫COM+元件開始於VB6的年代,撰寫與註冊的方式還算不是很複雜,不過隨著進入了.NET的世界,撰寫的過程也變得比較複雜了許多。

以下是撰寫的步驟

假設要撰寫的是一個資料庫DDMO中的資料表(TDMOMenu)的資料存取元件,要產生一個元件服務中的Package名稱為【KDMO1000】,裡面有個元件PDMOMenu.dll內有兩個COM+元件分別是
Project.Class

  1. PDMOMenu.CDMOMenu1(無Transaction):用以讀取資料
  2. PDMOMenu.CDMOMenu2(有Transaction):用以維護資料

撰寫步驟:

  1. 建專案:
  2. 專案內容:
  3. AssemblyInfo.vb:
  4. Class 內容:
    無Transaction Class(CDMOMenu1.vb):

    有Transaction Class(CDMOMenu2.vb):

撰寫完相關的程式後,接著就是Build專案,然後就會依照Project的Property設定的位置產生dll


補充,感謝網友小魔告知內容有誤,把取得資料庫連線的Function補上

說明:

存取資料會透過ConnString的設定來指定要存取的是哪台Server上的哪個資料庫,使用驗證方式是用什麼方式。如果ConnString寫在元件內,那麼當Server的位址改變、甚至資料庫名稱改變,那麼就必須把元件的程式一個個叫出來修改,然後再編譯註冊,這樣的過程太過繁複

那麼怎麼把ConnString的設定抽離元件,小喵的做法是建立一個.ini的文字檔,放在C:\DataLink,裡面就放著ConnString的內容,然後在元件中透過System.IO讀取該文字檔的內容。

如此一來,未來資料庫有異動(位置、名稱),就可以不需要改寫元件,直接修改設定檔即可。

posted on Wednesday, August 09, 2006 4:21 PM

Feedback

# re: N-Tiers開發方式(如何使用VB.NET撰寫COM+元件) 1/19/2007 5:25 PM 小魔

喵老大

我照著你的步驟做,遇到一些問題,請教你一下


問題1:
在步驟1:
CDMOMenu1.,CDMOMenu2.vb 這兩個是擺在同一專案嗎?

問題2:
步驟3的AssemblyInfo.vb 是在同一專案中,自己再新增一個類別出來的嗎,還是從那裡產出來的?


問題3:
請在最上方Imports加入:
Imports System.EnterpriseServices
請在最下方加入以下指令:
<Assembly: ApplicationName("KDMO1000")> '*設定元件服務的專案名稱
<Assembly: ApplicationAccessControl(False)>
<Assembly: ApplicationActivation(ActivationOption.Server)>
---------^^^^^^^^--------上面這段看不太懂

所以在AssemblyInfo.vb 的內容是否變這樣
1.Imports System.EnterpriseServices
2.<Assembly: ApplicationActivation(ActivationOption.Server)>
3.<Assembly: ApplicationName("KDMO1000")>
4.<Assembly: ApplicationAccessControl(False)>
其中KDMO1000 是否是自訂的名稱?

問題4:
我要建置的時候出現如下錯誤
錯誤 1 名稱 'GetConnStr' 未宣告。 C:\Inetpub\wwwroot\PDMOMenu\PDMOMenu\ClassLibrary2\CDMOMenu1.vb 33 33 PDMOMenu

這是何解呢?
Const DBName as String = "DDMO" <---這個是要指定自己資料庫的名稱嗎?
GUID這些數字是組件資訊裡的那個GUID嗎?

不好意思,我沒接觸過使用COM+連到資料庫,但是很想學這種技巧,
喵大有空再回我就好了,非常感謝你~.~



# re: N-Tiers開發方式(如何使用VB.NET撰寫COM+元件) 1/29/2007 1:58 PM topcat

不好意思這麼晚才回答您的問題

問題1.
>>在步驟1: CDMOMenu1.,CDMOMenu2.vb 這兩個是擺在同一專案嗎?
是的..一個Project中可以放許多個Class檔案,每個檔案在【元件服務】中都可以看到一顆元件球

問題2:
>>步驟3的AssemblyInfo.vb 是在同一專案中,自己再新增一個類別出來的嗎,還是從那裡產出來的?
不是的,這個檔案內建是隱藏的,您需要到右邊的專案總管中有個顯示所有檔案的按鈕,把隱藏的項目打開。
接著展開My Project就會看到了

問題3:
>>其中KDMO1000 是否是自訂的名稱?
是的,這個名稱,會關係到未來註冊元件後,在【元件服務】中的哪個【Package】看到您的元件

問題4:
ConnString這個部分小喵修正了相關程式,請參考
GUID這些必須每次產生新的元件時要建立新的,可以透過VS2005的【工具】→【建立GUID】來產生








# re: N-Tiers開發方式(如何使用VB.NET撰寫COM+元件) 5/18/2007 2:28 PM 小魔

喵老大 我又來麻煩你了@@

基本上照著你的做法算成功了,沒有出現錯誤

可是
GUID這些必須每次產生新的元件時要建立新的,可以透過VS2005的【工具】→【建立GUID】來產生
這裡我在VS2005工具裡找不到@@
還有那裡可以看到GUID呢

還有可以分享
"C:\DataLink\" + DBName + ".ini"

這個INI檔裡大概要寫什麼呢?
是像這樣的內容嗎
Data Source=192.168.10.253;Initial Catalog=IpcBread;Persist Security Info=True;User ID=test;Password=test

感謝喵老大的教學,有空再回就好,謝謝~


# re: N-Tiers開發方式(如何使用VB.NET撰寫COM+元件) 5/18/2007 3:33 PM 小魔

dear喵大,補上註冊COM時的錯誤訊息給你看一下
不知是不是因為GUID亂打的關係才出現這個
因為找不到VS2005的【建立GUID】
我是用專案裡的屬性->應用程式->組件資訊->GUID
以下是在SDK CMD下執行的結果:
------------------------------------------------------------
C:\application\ipcdemo>REGSVCS pdmomenu.dll
Microsoft (R) .NET Framework 服務安裝公用程式版本 2.0.50727.42
Copyright (c) Microsoft Corporation. All rights reserved.


發生下列安裝錯誤:
1: 無法產生 PDMOMenu, Version=1.0.0.0, Culture=neutral, PublicKeyToken=3afc56278
a632a64 的型別程式庫 C:\application\ipcdemo\PDMOMenu.tlb。
2: 型別程式庫匯出工具在處理 'PDMOMenu.CDMOMenu1, PDMOMenu' 時發生錯誤。錯誤: 元
素找不到。

C:\application\ipcdemo>GACUTIL /i pdmomenu.dll
Microsoft (R) .NET Global Assembly Cache Utility. Version 2.0.50727.42
Copyright (c) Microsoft Corporation. All rights reserved.

已成功將組件新增至快取
------------------------------------------------------------


# re: N-Tiers開發方式(如何使用VB.NET撰寫COM+元件) 6/6/2007 3:14 PM DoReMe

GUID 產生另一操作方式

開始->程式集-> Microsoft Visual Studio 2005-> Visual Studio Tools->
到 Vistual Studio 2005 命令提示字元
Key 入: Guidgen


# re: N-Tiers開發方式(如何使用VB.NET撰寫COM+元件) 6/6/2007 3:32 PM topcat

另外提供一個小方法
寫個簡單的Windows Form
放一個TextBox與一個Button
在Button的OnClick事件加入以下這段
Me.TextBox1.Text = Guid.NewGuid.ToString.ToUpper
這樣以後要用就開這個程式產生即可


# 注册ICSharpCode.SharpZipLib.dll到操作系统中让ASP可以透过COM 呼叫 6/8/2008 12:10 AM topcat




# re: N-Tiers開發方式(如何使用VB.NET撰寫COM+元件) 1/10/2009 11:52 AM Cafemice

喵老大:
我是一個VB.Net新手,使用 vb.net 2005
我依照您的方法Step by Step製作,它可以work ,後來我加了一個方法
Public Function RetStr() as Strin
Return "TEST"
End Function
重新建置後,當我在UserControl的元件下呼叫時,會出現
找不到方法 System.String PDMOMenu.CDMOMenu1.ResStr()...
的錯誤訊息,想請問您這個COM+ Component 在 Windows Form使用時沒問題,為何在 UserControl下使用會出現這個訊息

註: 我的UserControl 是建置成Active X 的方式在IE Browser下執行


# re: N-Tiers開發方式(如何使用VB.NET撰寫COM+元件) 1/14/2009 3:06 PM Cafemice

喵老大:
可能您太忙還沒空解答,我自己已找到解決方法,不知道是否是正統作法,不過它可以正常work 了
我在 UserControl 裡加了一段code

Class MyCom
Inherits PDMOMenu.CDMOMenu1
End Class
:
:
另外在
UserControl1_load 裡 加了
Dim MtCom As New MyCom




Post Feedback

Title:
Name:
Url:
驗證碼  
Comments: