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

问题描述 投票:0回答:2

我遇到一种情况,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
2个回答
0
投票

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


0
投票

您只需将 DTS 对象作为参数传递给子类,并使用该对象来触发信息。在父类上传递 Dts 对象,在子类上定义 ScriptObjectModel 类型的变量,并在子类上使用它

© www.soinside.com 2019 - 2024. All rights reserved.