zoukankan      html  css  js  c++  java
  • 为SSIS编写自定义任务项(Task)之进阶篇

    上一篇,我们演示了如何编写一个简单的Task,并将其部署到SSIS中去使用。

    using System;
    using System.Collections.Generic;
    using System.Text;
    using Microsoft.SqlServer.Dts.Runtime;
    using System.Windows.Forms;
    namespace MySSISTaskSample
    {
        [DtsTask(
            Description="这是我的一个自定义XML任务,"+
                "它与标准的XML任务的区别就在于可以自动处理命名空间问题",
            DisplayName="超强XML任务",
            TaskContact="陈希章:http://www.xizhang.com"
            )]
        public class MyXMLTask:Task
        {
    
            /// <summary>
            /// 这个方法真正执行操作
            /// </summary>
            /// <param name="connections"></param>
            /// <param name="variableDispenser"></param>
            /// <param name="componentEvents"></param>
            /// <param name="log"></param>
            /// <param name="transaction"></param>
            /// <returns></returns>
            public override DTSExecResult Execute(Connections connections, 
                VariableDispenser variableDispenser, 
                IDTSComponentEvents componentEvents, 
                IDTSLogging log, object transaction)
            {
                
                
                MessageBox.Show("我在工作了");
                return base.Execute(connections, variableDispenser, componentEvents, log, transaction);
            }
        }
    }
    

    上面的代码很简单,这个任务在执行的时候仅仅显示一个对话框。这显然是不够的,我们在这一篇讲解一下,如何为任务添加自定义编辑视图,并且根据用户的设置执行任务。

    1. 添加一个引用

    image

    2. 添加一个类型

    using Microsoft.SqlServer.Dts.Runtime.Design;
        public class MyTaskUI : IDtsTaskUI
        {
    
            #region IDtsTaskUI 成员
    
            public void Delete(IWin32Window parentWindow)
            {
                throw new NotImplementedException();
            }
    
            public ContainerControl GetView()
            {
                throw new NotImplementedException();
            }
    
            public void Initialize(TaskHost taskHost, IServiceProvider serviceProvider)
            {
                throw new NotImplementedException();
            }
    
            public void New(IWin32Window parentWindow)
            {
                throw new NotImplementedException();
            }
    
            #endregion
        }

    3. 添加一个窗体

    image

    为该窗体添加一个特殊的构造器。以便该窗体与宿主环境可以关联。主要是属性的读写。
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;
    
    using Microsoft.SqlServer.Dts.Runtime;
    
    namespace MySSISTaskSample
    {
        public partial class MyTaskEditor : Form
        {
            public MyTaskEditor()
            {
                InitializeComponent();
            }
    
            private TaskHost taskHost = null;
            public MyTaskEditor(TaskHost host):this()
            {
                taskHost = host;//这里接受传递过来的宿主
            }
    
        }
    }
    

    4. 实现MyTaskUI

        public class MyTaskUI : IDtsTaskUI
        {
    
            private TaskHost host = null;
    
            #region IDtsTaskUI 成员
    
            public void Delete(IWin32Window parentWindow)
            {
    
            }
    
            public ContainerControl GetView()
            {
                return new MyTaskEditor(host);
            }
    
            public void Initialize(TaskHost taskHost, IServiceProvider serviceProvider)
            {
                host = taskHost;
            }
    
            public void New(IWin32Window parentWindow)
            {
    
            }
    
            #endregion
        }


     

    5. 将该UI与我们的任务进行关联。

        [DtsTask(
            Description="这是我的一个自定义XML任务,"+
                "它与标准的XML任务的区别就在于可以自动处理命名空间问题",
            DisplayName="超强XML任务",
            TaskContact="陈希章:http://www.xizhang.com",
            UITypeName = "MySSISTaskSample.MyTaskUI,MySSISTaskSample,"+
        "Version=1.0.0.0,Culture=Neutral,PublicKeyToken=44246bec88cb6c06"
            )]
        public class MyXMLTask:Task
        {
    
            /// <summary>
            /// 这个方法真正执行操作
            /// </summary>
            /// <param name="connections"></param>
            /// <param name="variableDispenser"></param>
            /// <param name="componentEvents"></param>
            /// <param name="log"></param>
            /// <param name="transaction"></param>
            /// <returns></returns>
            public override DTSExecResult Execute(Connections connections, 
                VariableDispenser variableDispenser, 
                IDTSComponentEvents componentEvents, 
                IDTSLogging log, object transaction)
            {
                
                
                MessageBox.Show("我在工作了");
                return base.Execute(connections, variableDispenser, componentEvents, log, transaction);
            }
        }

    这里的关键,在于要完整地描述出来UI的名称。里面有一个PublicKeyToken,可以通过下面这样的方式取得

    image

    6. 重新生成,部署

    为了方便部署,我们可以编写如下的生成后事件

    image

    7. 测试该任务

    image

    现在,我们去点击“超级XML任务”,右键中选择“编辑”

    image

    我们欣喜地看到,虽然我们的窗体没有任何内容,但无论如何,它已经显示出来了

    我们下一篇还要探讨到底如何设计这个编辑界面

    本文由作者:陈希章 于 2009/6/20 17:16:40 发布在:http://www.cnblogs.com/chenxizhang/
    本文版权归作者所有,可以转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
    更多博客文章,以及作者对于博客引用方面的完整声明以及合作方面的政策,请参考以下站点:陈希章的博客中心
  • 相关阅读:
    JavaScript高级:JavaScript面向对象,JavaScript内置对象,JavaScript BOM,JavaScript封装
    JavaScript基础:javaScript基本语法,javaScript DOM,javaScript事件,javaScript综合案例
    Mybatis基础:Mybatis映射配置文件,Mybatis核心配置文件,Mybatis传统方式开发
    【笔记】Bagging和Pasting以及oob(Out-of-Bag)
    【笔记】集成学习入门之soft voting classifier和hard voting classifier
    8.23(day22)ATM+购物车系统
    Configure Dynamics 365 for Operations Virtual Machine/Virtual Hard Disk (VHD)
    Capture pictures to Power Platform
    How to convert HTML file to PDF using Power Automate
    Add B2B SSO to a Power Apps Portal
  • 原文地址:https://www.cnblogs.com/chenxizhang/p/1507423.html
Copyright © 2011-2022 走看看