我有一个 C# windows 窗体 .exe,按下按钮时会加载并执行 SSIS 包。
为了向用户显示进度,它有一个事件处理程序。
class MyEventListener : DefaultEvents
{
public Label MyLabel;
public override void OnProgress(TaskHost taskHost, string progressDescription,
int percentComplete, int progressCountLow, int progressCountHigh, string subComponent, ref bool fireAgain)
{
MyLabel.Text = progressDescription;
return;
}
}
//in the userform button onclick:
MyEventListener eventListener = new MyEventListener();
eventListener.MyLabel = label2;
Microsoft.SqlServer.Dts.Runtime.Application app = new Microsoft.SqlServer.Dts.Runtime.Application();
Package pkg = app.LoadPackage(pkgLocation, eventListener);
DTSExecResult pkgResults = pkg.Execute(null, null, eventListener, null, null);
它可以工作,但是有一个问题。仅验证和执行 SQL 脚本任务显示 OnProgress 消息。我还有许多数据流任务,我希望它们也显示默认消息,例如“执行数据流任务 35”或其他内容。最简单的方法是什么?
请注意,我没有在 SSIS 中配置任何有关事件的内容,因此所有这些事件都是由 SSIS 自行触发的。
注2:我希望只有一个我可以勾选的复选框。我真的不想手动创建脚本任务来在每个数据流之后显式调用事件,这太疯狂了。
注3:我对将事件保存在任何地方不感兴趣,只是在表单标签中简要显示它们。
我找不到 DefaultEvent 类关联的内容,但如果您没有看到信息事件 i.e. 执行数据流任务 35,那么您应该为 OnInformation
实现一个处理程序正如我经常建议编写自己的 SSIS 包运行程序的人一样,要使其在用户桌面或 Web 界面上运行,您需要在目标计算机上安装 SSIS 程序集。这些程序集是 SQL Server 的许可资产,这意味着您需要标准(每个核心约 8k,最少 4 个)或企业版(每个核心约 22k,最少 4 个)许可证才能符合 Microsoft 的要求。在进行审计时,由于这些库不容易意外安装,因此不合规的行为更有可能成为惩罚性赔偿的拳头