嗯,我沒有發現任何東西,所以我想出了一個解決辦法,所以我會以我的自動迴應:由於沒有辦法直接趕上SSIS包使然後我實現了事件
我
public class SqlPackageEventListener : DefaultEvents
{
public SqlPackageChangedHandler OnPackageError;
public override bool OnError(DtsObject source, int errorCode, string subComponent, string description, string helpFile, int helpContext, string idofInterfaceWithError) {
OnPackageError(this, new PackageErrorEventArgs(source, subComponent, description));
return base.OnError(source, errorCode, subComponent, description, helpFile, helpContext, idofInterfaceWithError);
}
public delegate void SqlPackageChangedHandler(
object sqlPackage,
EventArgs packageInfo
);
}
public class PackageErrorEventArgs : EventArgs
{
private DtsObject source;
public DtsObject Source {
get { return source; }
set { source = value; }
}
private string subcomponent;
public string Subcomponent {
get { return subcomponent; }
set { subcomponent = value; }
}
private string description;
public string Description {
get { return description; }
set { description = value; }
}
public PackageErrorEventArgs(DtsObject source, string subcomponent, string description) {
this.description = description;
this.source = source;
this.subcomponent = subcomponent;
}
}
public class Test
{
SqlPackageEventListener sqlListener = new SqlPackageEventListener();
sqlListener.OnPackageError += new SqlPackageEventListener.SqlPackageChangedHandler(sqlListener_OnPackageError);
Microsoft.SqlServer.Dts.Runtime.Application sqlPackageLoader = new Microsoft.SqlServer.Dts.Runtime.Application();
Microsoft.SqlServer.Dts.Runtime.Package sqlPackage = Microsoft.SqlServer.Dts.Runtime.sqlPackageLoader.LoadPackage(@"path_to\file.dtsx", sqlListener);
sqlPackage.Execute(null, null, sqlListener, null, null)
public void sqlListener_OnPackageError(object sender, EventArgs args) {
//code to handle the event
}
}
所以「絕招」就是一個委託添加到您傳遞給包對象的LoadPackage方法你的「監聽器」對象,這樣一來,我們就可以訪問「的OnError:在我的listener自己的事件「在監聽器內部覆蓋並提出事件。正如你所看到的,我實現了自己的EventArguments類,因此我們可以將重要數據傳遞給我們的處理程序代碼,並查看運行的包或從DefaultEvents繼承時覆蓋方法時可以獲得的任何其他信息。
當然,我在這裏只實現了OnError,你可以實現任何你喜歡的,受SQL Server支持並且可以被覆蓋的處理程序,因爲這是我們提出事件的範圍。
這樣我就可以創建我的SqlPackageEventListener對象,並使用sqlListener_OnPackageError方法處理它的「OnPackageError」事件,並在SSIS包的執行引起任何錯誤時執行我所需的任何操作。
我不知道NLog發生了什麼事,因爲當我將所有數據記錄到不同的位置時。基本上它沒有從主線程獲取動態上下文集。 – Gandarez 2016-01-21 11:58:43