2012-05-31 2 views
2

Я пытаюсь добавить еще некоторую встроенную обработку ошибок в компонент сценария SSIS C# (в потоке данных). Прямо сейчас я заставляю его разбивать компонент на 1/0, который работает, но хакерский.Компонент скрипта SSIS FireError DNE в текущем контексте

Мой скрипт делает некоторые джазы на входных данных, но я хотел бы проверить его на нескольких шагах и вывести из строя компонент, если какие-либо проверки не удались. Источник - это выбор, поэтому мне не нужно откат любых транзакций и т. Д. ... но я хотел бы, чтобы компонент завершил работу с потоком данных, поэтому компонент потока данных потерпит неудачу и последует за обработкой ошибок, которую я задаю в потоке управления.

Вот simplist relavant сниппет, который держит меня:

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

Что такое FireError? – Diego

+0

Я понимаю, что FireError является способ заставить ошибку в SSIS: http://msdn.microsoft.com/en-us/library/microsoft.sqlserver.dts.runtime.idtscomponentevents.fireerror.aspx От мое исследование кажется, что я должен иметь что-то не так с пространством/пространством имен, но я не знаю достаточно, чтобы понять это. спасибо – user1428779

ответ

2

Вы должны просто переместить свой код в метод PostExecute.

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); 
} 
Смежные вопросы