本文描述了如何利用Visual C#net 創建一個DTS 自定義的任務你可以通過C#net創建自定義的任務的方式擴展DTS的功能之後你可以安裝並注冊任務將它出現在DTS設計其中就像默認的DTS任務總之你能夠使用NET Framework創建自定義的任務
在本文中除了講創建一個DTS自定義任務外還包括一下部分內容
這篇文章中自定義的代碼分為編譯注冊和安裝自定義任務
這部分一個有特色的部分就是你可以運行自定義的任務
在開發過程中你可以使用本文提及的一些工具(除非另有說明這些工具已經包含在NET中了您可以通過NET的命令行運行這些工具)
為DTSSpkgdll創建一個及時的包
如果一個基於微軟NET客戶機訪問一個COM組件你必須使用一個包(這個組件包含的)這類的包是及時的運行包(RCW)並且你也可以通過開放Dtspkgdll的類型庫編譯你也可以使用類型庫導出工具(Tlbimpexe)編譯RCW如
tlbimpexe C:\ProgramFiles\Microsoft SQLServer\\tools\Binn\dtspkgdll/out:MicrosoftSQLServverDTSPKGdll/keyfile:DTSPkgsnk /keyfile
參數代表MicrosoftSQLServerDTSPkgdll帶有強類型名用public或private關鍵字使用強類型名工具(snexe)在DTSPkgsnk 前創建關鍵字snexe –k DTSPkgsnk
你應該使用一個強類型名像其他的全局集合緩存因為你安裝了運行包
在全局集合緩存中安裝運行包
用全局集合緩存工具(GaCutilexe)安裝運行包
gacutilexe /I MicrosoftSQLServerDTSPkgdll
安裝了運行包後你可以像添加NETC#工程中的引用一樣的添加
為自定義的任務添加代碼
代碼的自定義注冊NET沒有開放DllReginsterServer 和DllUnregisterServer 像COM組件的入口但是你可以使用ComRegisterFunctionAttribute 類執行任務注冊和撤銷注冊在自定義類聲明之前添加下面代碼
[Guid(AFAEDEAECD) ComVisible(true)]
[ProgId(DTSSimpleTask)]
public class SimpleTask : CustomTask
{
//implementation of custom task
}
下面的代碼是一個函數注冊的范例執行函數的全部代碼在自定義任務的編譯注冊和安裝部分
[SystemRuntimeInteropServicesComRegisterFunctionAttribute()]
static void RegisterServer(Type t)
{
//code to register custom task
}
注冊函數增加下面的鍵值用來注冊
HKEY_CLASSES_ROOT\CLSID\AFAEDEAECD\Implemented Categories\{EBCCFAEEAAAD}
EBCCFAEEAAAD是DTS包對象的類編號因為所有的自定義的任務執行自定義的接口所以必須注冊注冊函數添加下面的注冊鍵值
HKEY_CURRENT_USER\Software\Microsoft\Microsoft SQL Server\\DTS\Enumeration\Tasks\AFAEDEAECD
下面的DTS任務緩存目錄列表使自定義的任務出現在DTS設計器中
HKEY_CURRENT_USER\Software\Microsoft\Microsoft SQL Server\\DTS\Enumeration\Tasks\
下面的代碼示范非注冊函數的任務移出的執行面注冊函數是ComUnregisterFunctionAttribute類在NET運行庫的一部分想浏覽這個函數的完整代碼你可以看編譯注冊和安裝自定義任務部分
[SystemRuntimeInteropServicesComUnregisterFunctionAttribute()]
static void UnregisterServer(Type t)
{
//code to unregister custom task
}
免注冊函數通過從注冊表中刪除下面鍵值從DTS任務緩存中移出任務
HKEY_CURRENT_USER\Software\Microsoft\Microsoft SQL Server\\DTS\Enumeration\Tasks\AFAEDEAECD
最後自定義的任務像dual_interface COM組件一樣被開放您從所有的類的public非靜態的字段屬性和方法創建一個默認的接口在下面的一行代碼在自定義任務源文件中USING應用之後
[assembly:ClassInterface(ClassInterfaceTypeAutoDual)]
這部分的代碼已經完全列舉了
增加功能性的自定義任務
本文編譯注冊和安裝自定義任務部分包含一個簡單的DTS自定義任務代碼 任務有兩個屬性Name 和DescriptionDescription屬性的值就會出現在消息框中這個例子的描述了一個最小化的代碼你可以使用已有的功能性的DTS定義任務然而你可以通過執行CustomTaskUI接口創建一個用戶界面但是那並不作討論通過只執行自定義的接口DTS設計者為自定義任務創建一個默認的有戶界面
所有的DTS自定義任務執行自定義任務接口自定義的用戶接口是由兩個屬性一個集合和一個方法
Name和Description屬性
Properties集
Execute方法
所有的自定義任務應該執行屬性屬性集和Execute方法
From:http://tw.wingwit.com/Article/program/net/201311/15477.html