为SSIS编写自定义任务项(Task)之高级篇

本文深入介绍了如何为SSIS创建自定义任务项,包括添加自定义属性、实现IDTSComponentPersist接口以实现持久化,添加输入验证方法,设计并修改编辑窗体代码,以及部署和测试任务项。通过实践,展示了任务属性在包的XML定义文件中的存储位置,并演示了任务执行过程及处理命名空间的复杂情况。
摘要由CSDN通过智能技术生成

上一篇我们已经实现了一个自定义的编辑窗口,但里面没有任何内容,我们也没有真正为其保存属性。这一篇我们将完成这个任务项。

1. 为任务添加几个自定义属性

        #region 属性

        private string source = string.Empty;
        public string Source { get{
  return source;} set{source=value;}}
        private string target = string.Empty;
        public string Target { get { return target; } set { target = value; } }
        private string xpath = string.Empty;
        public string Xpath { get { return xpath; } set { xpath = value; } }
        private string defs = string.Empty;
        public string Namespacedefs { get { return defs; } set { defs = value; } }


        #endregion

【特别注意】这里的属性必须是按照上面的写法。如果用VS2008的简写方式,则会无效

所谓VS 2008的简写方式,是类似下面这样。 我测试发现这样写是不行的,总是报告未将对象设置到引用实例。

public string Source { get; set; }

 

2. 为任务项添加持久化支持

方法是,为任务项实现IDTSComponentPersist接口

        #region IDTSComponentPersist 成员
        /// 
        /// 从包的那个XML文件中加载属性
        /// 
        /// 
        /// 
        public void LoadFromXML(System.Xml.XmlElement node, IDTSInfoEvents infoEvents)
        {
            try
            {
                Source = node.SelectSingleNode("Source").InnerText;
                Target = node.SelectSingleNode("Target").InnerText;
                Xpath = node.SelectSingleNode("Xpath").InnerText;
                Namespacedefs = node.SelectSingleNode("NamespaceDefs").InnerText;
            }
            catch
            {
                throw;
            }
        }
        /// 
        /// 将自定义属性保存到包中
        /// 
        /// 
        /// 
        public void SaveToXML(System.Xml.XmlDocument doc, IDTSInfoEvents infoEvents)
        {
            XmlElement taskElement = doc.CreateElement("MyXMLTask");
            XmlElement source = doc.CreateElement(string.Empty, "Source", string.Empty);
            source.InnerText = this.Source;

            XmlElement target = doc.CreateElement(string.Empty, "Target", string.Empty);
            target.InnerText = this.Target;

            XmlElement xpath = doc.CreateElement(string.Empty, "Xpath", string.Empty);
            xpath.InnerText = this.Xpath;

            XmlElement def = doc.CreateElement(string.Empty, "NamespaceDefs", string.Empty);
            def.InnerText = this.Namespacedefs;

            taskElement.AppendChild(source);
            taskElement.AppendChild(target);
            taskElement.AppendChild(xpath);
            taskElement.AppendChild(def);
            doc.AppendChild(taskElement);

        }

        #endregion

也就是说,任务项的自定义属性肯定是要保存起来的。它保存在哪里呢?保存在包的定义文件中。这其实就是一个XML文件

3. 为任务项添加一个验证输入的方法

        /// 
        /// 验证输入
        /// 
        /// 
        /// 
        /// 
        /// 
        /// 
   
   
        public override DTSExecResult Validate(Connections connections, VariableDispenser variableDispenser, IDTSComponentEvents componentEvents, IDTSLogging log)
        {

            if (string.IsNullOrEmpty(source) || string.IsNullOrEmpty(target) || string.IsNullOrEmpty(xpath))
            {
                componentEvents.FireError(0, "MyXMLTask", "来源文件,目标文件,以及查询表达式不可以为空", string.Empty, 0);
                return DTSExecResult.Failure;
            }

            if (!File.Exists(source))
            {
                componentEvents.FireError(0, "MyXMLTask", "来源文件不存在", string.Empty, 0);
                return DTSExecResult.Failure;
            }

            return DTSExecResult.Success;
        }

4. 为任务项实现Execute方法

        /// 
        /// 这个方法真正执行操作
        /// 
        /// 
        /// 
        /// 
        /// 
        /// 
        /// 
   
   
        public override DTSExecResult Execute(C
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值