当前上下文中的SSIS脚本组件FireError DNE

时间:2012-05-31 15:29:37

标签: c# ssis components

我正在尝试向SSIS C#脚本组件(在数据流中)添加一些本机错误处理。现在我强制它使用1/0的组件崩溃,但它是有效的。

我的脚本在输入数据上做了一些爵士乐,但我想在几个步骤验证它,如果任何验证失败,则会使组件失败。源是一个选择,所以我不需要 回滚任何事务等...但我希望组件使数据流失败,因此数据流组件将失败并遵循我在控制流中规定的错误处理。

这是一个简单的相关代码片段,它阻碍了我:

using System;
using System.Data;
using Microsoft.SqlServer.Dts.Pipeline.Wrapper;
using Microsoft.SqlServer.Dts.Runtime.Wrapper;

[Microsoft.SqlServer.Dts.Pipeline.SSISScriptComponentEntryPointAttribute]
public class ScriptMain : UserComponent
{


public override void PreExecute()
{
    base.PreExecute();
    /*
      Add your code here for preprocessing or remove if not needed
    */

    bool pbCancel = false;
    ////check Row Count>0
    if (Variables.WeeklyLRrowCount == 0)
        this.ComponentMetaData.FireError(-1, "", "Fails Validation due to Empty Table.", "", 0, out pbCancel);
}

public override void PostExecute()
{
    base.PostExecute();
    /*
      Add your code here for postprocessing or remove if not needed
      You can set read/write variables here, for example:
      Variables.MyIntVar = 100
    */

}

public override void Input0_ProcessInputRow(Input0Buffer Row)
{
    /*
      Add your code here
    */

}


}

我从SSIS获得以下信息:

"The name 'FireError' does not exist in the current context."

我在这里缺少什么?

谢谢!

2 个答案:

答案 0 :(得分:2)

您应该将代码移动到PostExecute方法。

答案 1 :(得分:0)

“通常,在组件设计期间,会调用FireError,FireInformation和FireWarning方法,以便在组件配置不正确时提供用户反馈。”

http://msdn.microsoft.com/en-us/library/microsoft.sqlserver.dts.runtime.idtscomponentevents(v=sql.105).aspx

如果我正确读取此内容,则不适用于脚本任务中的运行时使用,但在设计时使用自定义组件来指示配置错误。

此代码来自http://msdn.microsoft.com/en-us/library/ms135912(v=sql.105).aspx 可能是你想要的。

public override void RegisterEvents()
{
string [] parameterNames = new string[2]{"RowCount", "StartTime"};
ushort [] parameterTypes = new ushort[2]{ DtsConvert.VarTypeFromTypeCode(TypeCode.Int32),   DtsConvert.VarTypeFromTypeCode(TypeCode.DateTime)};
string [] parameterDescriptions = new string[2]{"The number of rows to sort.", "The start time of the Sort operation."};
EventInfos.Add("StartingSort","Fires when the component begins sorting the rows.",false,ref parameterNames, ref paramterTypes, ref parameterDescriptions);
}
public override void ProcessInput(int inputID, PipelineBuffer buffer)
{
while (buffer.NextRow())
{
   // Process buffer rows.
}

IDTSEventInfo100 eventInfo = EventInfos["StartingSort"];
object []arguments = new object[2]{buffer.RowCount, DateTime.Now };
ComponentMetaData.FireCustomEvent("StartingSort", "Beginning sort operation.", ref arguments, ComponentMetaData.Name, ref FireSortEventAgain);
}