欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

C# 注冊COM+組件步驟

系統 2151 0

1. 編寫Com+組件

在建立C#工程之后必須要給類一個強名稱.

??? 要創建強名稱,可以使用 sn 工具.此命令行工具有許多選項,在命令提示符處鍵入 sn /? 可以查看所有選項.對程序集簽名所需的選項是“-k”,它將創建一個密鑰文件.默認情況下,該文件使用 .snk 作為擴展名.例如,要創建一個名為 MyCom.snk 的密鑰文件,可以使用以下命令行:
sn -k MyCom.snk
然后在工程中引用這個強名稱
方法如下:
( 1 ):注釋掉AssemblyInfo.cs中的[assembly:? AssemblyKeyFile ( "" )]和[assembly:? AssemblyKeyName ( "" )]
( 2 ): 在組件類中寫入
using ?System.Data.OleDb; //引用ADO.net命名空間
using ?System.Data; //引用數據空間
using ?System.Runtime.InteropServices; //為了調用GUID
System.EnterpriseServices命名空間包涵所有COM+的類型庫所以在編寫COM+組件的時候一定要用到System.EnterpriseServices命名空間,這個命名空間在引用中.net頁下可以找到
using ?System.EnterpriseServices; //引用COM+名命空間
using ?System.Runtime.CompilerServices; //運行時編譯服務器
using ?System.Reflection; //用些全局屬性取得強名屬性
[assembly: ApplicationName( "myCom" )]
//強名文件名和文件屬性.用sn.exe生成,用法 sn -k mycom.snk
[assembly: AssemblyKeyFileAttribute( "mycom.snk" )]
[assembly:? AssemblyKeyName ( "mycom.snk" )]
( 3 )組件類的寫法
組件類的寫法有二種一種是以前的那種
一種是基于接口編程的例如:

namespace ?myCom //把所有代碼寫到相應的命名空間內
{
???? //每一個接口一個GUID號
??? [Guid( "549047DE-9F3B-4781-A1F6-F3C852091FC9" )]
???? //接口類型ComInterfaceType.InterfaceIsDual接示接口需要雙重公開給COM+
????
//這個屬性是接口的屬性
??? [InterfaceType( ComInterfaceType.InterfaceIsDual )]
??? ? //定義接口
???? public ? interface ?Add
????
??? {
??????? 接口內的方法返回布爾值有一個整型參數
???????? bool ?AddData(? int ?d );
????????
???????? bool ?AddDataM(? int ?d );
??? }
???? //實現這個接口
??? //事務屬性表示需要新事務
????
//這個屬性用來記錄類是否支持事務有車個選項同VB中類的屬性相同
??? [Transaction( TransactionOption.RequiresNew)]
???? //在類中實現這個接口必須要繼承System.EnterpriseServices;命名空間的ServicedComponent類
????
//在后面繼承前面所定義的接口如果有多個可以用“,”分開
???? public ? class ?myClass:ServicedComponent,Add
??? {
???????? //? public myCom.myClass?? error =new ErrorsLibrary.Class1( );
????????
???????? //定認字符變量用來存放數據庫連接字符串
???????? private ? static ? string ?strConnect ="Provider=MSDAORA.1;Password=erpii;User ID=erpii;Data Source=erpii;Persist Security Info=True";
???????? //創建這個連接
???????? private ?OleDbConnection conConnection =? new ?OleDbConnection (strConnect) ;
????????
????????
??????? ? //實現接口中的查詢方法
???????? public ? bool ?AddData(? int ?id )
??????? {
???????????? try
??????????? {
????????????????
??????????????? //string StrSql="insert into??? TEST1?? values('" + id + "' )";
???????????????? string ?StrSql=" insert into??? test_d? values('" + id + "',"?
??????????????? +"'" + id + "',"
??????????????? + "'" + id + "',"
??????????????? + "'" + id + "' )";
???????????????? //???? string StrSql="DELETE FROM TEST1";?
????????????????
//找開連接
??????????????? conConnection.Open( );? // 打開數據連接
????????????????
//執行查詢
??????????????? OleDbCommand cmd =? new ?OleDbCommand (StrSql , conConnection) ;
??????????????? cmd.ExecuteNonQuery ( );
??????????????? conConnection.Close ( );
????????????????
??????????????? ? //ContextUtil.SetComplete( ) ;
???????????????? return ? true ;
??????????? }
???????????? catch ?( Exception e )?
??????????? {
????????????????
???????????????? //error.Description =e.Message;
????????????????
//??? EnterpriseServices.ContexUtil.
??????????????? ContextUtil.SetAbort( );
???????????????? return ? false ;
??????????????? //????
??????????? }
??????? }
????????
???????? public ? bool ?AddDataM(? int ?id )
??????? {
???????????? try
??????????? {
???????????????? //??? string StrSql="insert into??? TEST21? values(" + id + "' )";
??????????????? //??? string StrSql="DELETE FROM TEST2";?
????????????????
//找開連接
???????????????? string ?StrSql=" insert into??? test_m? values('" + id + "',"?
??????????????? +"'" + id + "',"
??????????????? + "'" + id + "',"
??????????????? + "'" + id + "' )";
??????????????? conConnection.Open( ); // 打開數據連接
???????????????? //執行查詢
??????????????? OleDbCommand cmd =? new ?OleDbCommand (StrSql , conConnection) ;
??????????????? cmd.ExecuteNonQuery ( );
??????????????? conConnection.Close ( );
??????????????? //??? System.EnterpriseServices.ContextUtil.SetComplete( ) ;
???????????????? return ? true ;
????????????????
??????????? }
???????????? catch ?( Exception e )?
??????????? {
??????????????? / /error.Description =e.Message;
??????????????? //??? EnterpriseServices.ContexUtil.
??????????????? //??? System.EnterpriseServices.ContextUtil.SetAbort( );
????????????????
//??? e.Message;
??????????????? ContextUtil.SetAbort ( ) ;
???????????????? return ? false ;
????????????????
??????????? }
????????????
??????? }
????????
??????? ? //如果在方法或類上使用[AutoComplete]則事務類或方法在沒有錯誤的情狀下自動提交事務
??????? [AutoComplete]
???????? public ? bool ?addRs( )
??????? {
????????????
???????????? try
??????????? {
???????????????? for ?(? int ?i=0;i<100;i++ )
??????????????? {
???????????????????? ////?? ?????
???????????????????? if ?( !AddData( i ) )
??????????????????? {???? //事務回滾
??????????????????????? ContextUtil.SetAbort ( ) ;
?????? 函數返回值
???????????????????????? return ? false ;
??????????????????? }
???????????????????? //如函數不等于真則回滾其中(?┫嗟庇赩B中的(NOT)
???????????????????? if ?(!AddDataM( i ) )
????????????????????
??????????????????? {
??????????????????????? ContextUtil.SetAbort ( ) ;
???????????????????????? return ? false ;
??????????????????? }
????????????????????
??????????????? }
?????????????????? 如查成功能提交事務
??????????????? ContextUtil.SetComplete( );?
???????????????? return ?? true ;
????????????????
??????????? }
????????????
????????????
???????????? catch ?( Exception e )?
??????????? {
???????????????? //????? error.Description =e.Message;
??????????????? //??? EnterpriseServices.ContexUtil.
????????????????
//??? ContextUtil.SetAbort( );
??????????????? ContextUtil.SetAbort ( ) ;
???????????????? return ? false ;
?????????????? ?? //? ???
??????????? }
??????? }
????????
???????? public ?myClass( )
??????? {
???????????? //
??????????? // TODO: 在此處添加構造函數邏輯
????????????
//
??????? }
??? }
}

2. 在代碼編寫完成之后要注冊我的組件到COM+服務器上

2.1 編譯成COM+組件

  • ?首先,必須為該程序集創建一個類型庫.類型庫是 .NET 程序集中所包含的元數據的 COM 等效組件.類型庫通常包含在擴展名為 .tlb 的文件中.類型庫包含必要信息,COM 客戶端使用這些信息可以確定在特定服務器中有哪些類,以及這些類支持的方法、屬性和事件..NET 框架 SDK 包含一個名為 tlbexp(類型庫導出程序)的工具,它可以從程序集創建類型庫.tlbexp 包含許多選項,可以在命令提示符處鍵入 tlbexp /? 查看所有選項.其中一個是 / out ?選項,用于指定已生成的類型庫的名稱.(如果您不自己指定名稱,將自動為您創建一個名稱.)例如,要將元數據從一個名為 MyCom.dll 的程序集提取到一個名為 MyCom.tlb 的類型庫中,可以使用以下命令行:
    *注意:tlbexp MyCom.dll / out :MyCom.tlb的命令中 out :MyCom.tlb
    out : 和?? MyCom.tlb?? 就是要導出的類型庫文件中間一定要有一個空格
    tlbexp MyCom.dll / out :MyCom.tlb
  • 應使用 .NET 框架 SDK 中的程序集注冊工具 ( regasm ),通過一次操作同時完成類型庫的創建和注冊.這是在一臺計算機上同時進行 .NET 和 COM 開發所能使用的最簡單的工具.與 tlbexp 類似,regasm 有許多選項.在命令提示符處鍵入 regasm /?,可以查看所有選項.要使用 regasm 創建并注冊一個類型庫,可以使用相應的命令行,如:
    regasm /tlb:MyCom.tlb MyCom.dll

或者:設置項目配置里的生成屬性,為Com Interop 注冊:True

C# 注冊COM+組件步驟

2.2 注冊Com+組件

(2) 最后我們要把我們編寫好的組件放置到COM+服務器上去
Regsvcs /c?? myCom.dll

C# 注冊COM+組件步驟


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 国产精品视频网 | 污污美女 | 中文一区二区 | 91伦理片 | 香港一级毛片 | 2018中文字幕在线观看 | 日本阿v视频高清在线 | 天天射日日操 | 久久久久久久久女黄 | 日本无码V视频一区二区 | 欧美激情精品久久久久久 | 波多野一区 | 亚洲美女亚洲精品久久久久 | 欧美精品h在线播放 | 午夜性刺激在线观看视频 | 小明www永久免费播放平台 | 91在线观 | 日本免费三级网站 | 日本黄色小视频在线观看 | 天天综合久久 | 国产亚洲精品久久无码小说 | 性做爰片免费视频毛片中文ILO | 精品国产91久久久久 | 亚洲成年人免费网站 | 亚洲一区在线播放 | 久草视频福利在线观看 | 国产成人免费 | 国产午夜亚洲精品 | 一级免费黄色免费片 | www.91在线观看 | 成人免费毛片网站 | 国产精品岛国久久久久久久 | www久久久 | 国产亚洲蜜芽精品久久 | 日韩 欧美 国产 亚洲 中文 | 欧美日韩在线视频播放 | 那一个欧美一级毛片 | 欧美精品aaa久久久影院 | 国产一区二区三区在线免费观看 | jvid精品资源在线观看 | 上将的炮灰前妻重生了 |