首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C#.NET 建立 DTS 自訂任務(二):編譯註冊、屬性介面與 Execute 方法完整實作

     編輯:關於C語言

註冊與反註冊函式

[ComRegisterFunction]
static void RegisterServer(Type t)
{
    // 1. COM 分類登錄
    // 2. DTS 任務快取登錄
    // 3. 任務描述寫入
}

[ComUnregisterFunction]
static void UnregisterServer(Type t)
{
    // 從 DTS 快取移除:HKEY_CURRENT_USER\...\Tasks\{GUID}
}

自訂任務介面規範

所有 DTS 自訂任務必須實作 CustomTask 介面:

  • Name / Description 屬性
  • Properties 集合
  • Execute 方法

完整範例程式碼

[assembly: ClassInterface(ClassInterfaceType.AutoDual)]

namespace DTS
{
    [Guid("38ED4F80-9EF4-4752-8478-65D2DB3BA7DD"), ComVisible(true)]
    [ProgId("DTS.SimpleCustomTask")]
    public class SimpleCustomTask : CustomTask
    {
        private string name;
        private string description;

        public SimpleCustomTask()
        {
            name = "";
            description = "SimpleCustomTask description";
        }

        public void Execute(object pPackage, object pPackageEvents, 
            object pPackageLog, ref DTSTaskExecResult pTaskResult)
        {
            pTaskResult = DTSTaskExecResult.DTSTaskExecResult_Failure;
            try
            {
                Package2 pkg = (Package2)pPackage;
                PackageEvents pkgEvents = (PackageEvents)pPackageEvents;
                PackageLog pkgLog = (PackageLog)pPackageLog;
                
                MessageBox.Show(description);  // 示範功能
                
                pTaskResult = DTSTaskExecResult.DTSTaskExecResult_Success;
            }
            catch (COMException e) { Console.WriteLine(e); }
            catch (Exception e) { Console.WriteLine(e); }
        }

        public string Description { get { return description; } set { description = value; } }
        public string Name { get { return name; } set { name = value; } }
        public Properties Properties { get { return null; } }

        [ComVisible(false)]
        public override string ToString() { return base.ToString(); }

        // RegisterServer / UnregisterServer 完整實作見原文
    }
}

編譯與部署步驟

  1. 建立 dtspkg.dll 的 RCW (Runtime Callable Wrapper):
    tlbimp.exe dtspkg.dll /out:Microsoft.SQLServer.DTSPkg80.dll /keyfile:DTSPkg.snk
  2. 產生強式名稱金鑰:sn.exe -k DTSPkg.snk
  3. 安裝至 GAC:gacutil.exe /i Microsoft.SQLServer.DTSPkg80.dll
  4. 專案加入參考 RCW 組件
  5. 編譯自訂任務組件並註冊 (RegAsm /codebase)

擴充方向

  • 實作 CustomTaskUI 介面提供自訂設計介面
  • 若未實作,DTS 設計師會根據屬性自動產生預設 UI
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved