C# 如何从事件处理程序向SSIS发送Dts信息消息?

C# 如何从事件处理程序向SSIS发送Dts信息消息?,c#,ssis,sql-server-data-tools,smo,script-task,C#,Ssis,Sql Server Data Tools,Smo,Script Task,我有一个SSIS包,其中包含一个脚本任务,它调用一些基本的C代码。我使用SQLSMO将表列表从DB1复制到DB2 我已经做到了,但我正在尝试订阅SMO事件处理程序,并将进度消息发送回SSIS,以便在SSIS包运行时,我知道它在做什么 我找到了要使用的事件处理程序,但问题是我无法访问Dts变量来发送消息……我做错了什么 publicstaticvoiddatatransferreport(对象发送方、datatransferventargs参数) { bool=false; //此行无效。发件人为

我有一个SSIS包,其中包含一个
脚本任务
,它调用一些基本的
C
代码。我使用SQLSMO将表列表从DB1复制到DB2

我已经做到了,但我正在尝试订阅SMO事件处理程序,并将进度消息发送回SSIS,以便在SSIS包运行时,我知道它在做什么

我找到了要使用的事件处理程序,但问题是我无法访问
Dts
变量来发送消息……我做错了什么

publicstaticvoiddatatransferreport(对象发送方、datatransferventargs参数)
{
bool=false;

//此行无效。发件人为“转账”` var Dts=发件人为Microsoft.SqlServer.Dts.Tasks.ScriptTask.ScriptObjectModel; Dts.Events.FireInformation(2,“MySubComponent”、“我的消息测试”、“0,再次引用FireInformation); } 受保护的静态void DiscoveryProgressReport(对象发送方,ProgressReportEventArgs args args) { Console.WriteLine(“1[”+args.Current.Value+“]”); } 受保护的静态无效ScriptingProgressReport(对象发送方,ProgressReportEventArgs args args) { Console.WriteLine(“2[”+args.Current.Value+“]”); } 受保护的静态无效ScriptingErrorReport(对象发送方,ScriptingErrorEventArgs args args) { Console.WriteLine(“3[”+args.Current.Value+“]”); }
下面是显示如何调用事件处理程序的缩写main方法

public void Main()
{
//上面的一些代码。。。
//设置传输和参数
转账=新转账
{
Database=sourceDatabase,
//设置目标服务器和数据库
DestinationServer=edwConnection.Name,
DestinationDatabase=edwConnection.Databases[targetDatabaseName].Name
};
//包括数据
transfer.CopyData=true;
bool=false;
//循环每个表的候选变量
foreach(tableNames中的字符串tableName)
{
//创建一个表对象
Table Table=sourceDatabase.Tables[tableName];
//验证它是否存在且不是系统表
if(table!=null&&!table.IsSystemObject)
{
//将表对象添加到传输列表
transfer.ObjectList.Add(表);
}
}
//订阅事件处理程序
transfer.datatransfervent+=新的datatransferventhandler(DataTransferReport);
transfer.DiscoveryProgress+=新的ProgressReportEventHandler(DiscoveryProgressReport);
transfer.ScriptingProgress+=新的ProgressReportEventHandler(ScriptingProgressReport);
transfer.ScriptingError+=新的ScriptingErrorEventHandler(ScriptingErrorReport);
//做这项工作!
transfer.TransferData();
//下面有更多代码。。。
}

我可能理解不正确……但你能不能删除
静态文件
就行了?这是您的一种方法,您需要对其他方法执行相同的操作
Sender
仍然是订阅事件的
Transfer
对象

public void DataTransferReport(object sender, DataTransferEventArgs args)
{
    bool fireAgain = false;       

    Dts.Events.FireInformation(2, "MySubComponent", "My Message Test", "", 0, ref fireAgain);
}

“此行不起作用。发件人是
Transfer
”帮帮我,扩展方法将成为Transfer对象模型的一部分?噢!比我想做的容易多了。