在Script Main的子类中引发DTS事件(SSIS脚本任务)

时间:2016-02-25 21:16:40

标签: c# sql-server inheritance ssis dts

我有一种情况,其中ScriptMain的子类(我的SSIS脚本任务的入口点类)需要在try catch语句中触发Dts事件警告。

我遇到的问题是我无法从我的孩子班级访问Dts。我的猜测是,这将是一个试图访问祖父母方法的孙子。作为一个解决方案,我继承了我的子类中的Microsoft.SqlServer.Dts.Tasks.ScriptTask.VSTARTScriptObjectModelBase类。但是,这仍会产生null Dts个实例。

我正在尝试做什么?

[Microsoft.SqlServer.Dts.Tasks.ScriptTask.SSISScriptTaskEntryPointAttribute]
public partial class ScriptMain : Microsoft.SqlServer.Dts.Tasks.ScriptTask.VSTARTScriptObjectModelBase 
{
  public void Main()
  {
    ChildClass hi = new ChildClass();
    hi.Execute();
  }
}

 public class ChildClass : Microsoft.SqlServer.Dts.Tasks.ScriptTask.VSTARTScriptObjectModelBase 
 {
  public void Execute()
  { 
    foreach(var request in createETRequests())
    {
      try{
        //do scary stuff
      }
      catch
      {
        //handle error
        this.TrackError("oh no!");
      }
   }
 }
 private IEnumerable<TriggeredSend> createETRequests()
 {
   TriggeredSend triggeredSendObject = new TriggeredSend();
   //do stuff within another foreach including the below return
      yield return triggeredSendObject;
 }

 private void TrackError(string foo)
 {
    //NULL EXCEPTION when called from child instance
    Dts.Events.FireWarning(2000, "hello there SSIS", foo, String.Empty, 0);
  }
}

1 个答案:

答案 0 :(得分:0)

让子类冒泡到父级(设置公共变量/属性或其他东西),然后从主脚本中触发警告。