【问题标题】:Raise DTS events in child class of Script Main (SSIS Script Task)在 Script Main(SSIS Script Task)的子类中引发 DTS 事件
【发布时间】:2016-02-25 21:16:40
【问题描述】:

我遇到的情况是 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);
  }
}

【问题讨论】:

    标签: c# sql-server inheritance ssis dts


    【解决方案1】:

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

    【讨论】:

    • 这和从子类调用父类中的方法一样吗?几乎把 TrackError 放在父母身上?我试过了,我遇到了同样的问题。我只设置一个变量所面临的问题是 try catch 在一个 for 循环中......我会更新我的问题。
    • 您是否在调试器中单步执行过代码并看到调用了 TrackError 函数?
    • 是的,我设置了多个断点。在所有情况下,Dts 都是空的。除非该事件在 ScriptMain 内由源自该类的请求触发。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-09
    • 2012-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-28
    相关资源
    最近更新 更多