我正在尝试向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."
我在这里缺少什么?
谢谢!
答案 0 :(得分:2)
您应该将代码移动到PostExecute方法。
答案 1 :(得分:0)
“通常,在组件设计期间,会调用FireError,FireInformation和FireWarning方法,以便在组件配置不正确时提供用户反馈。”
如果我正确读取此内容,则不适用于脚本任务中的运行时使用,但在设计时使用自定义组件来指示配置错误。
此代码来自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);
}