У меня есть пакет SSIS с компонентом сценария преобразования. Он загружает около 460 строк, а затем перестает выполнять компонент скрипта (я не знаю, почему он это делает), ofc снова создает мои переменные класса C# и «забывает», где это был «первый раз, когда он запускался», выбирая нули для варибель.Компонент скрипта SSIS забывает мои переменные
Есть ли способ заставить компонент сценария не запускать его снова после 460 строк? Моя партия, которую я вытягиваю, составляет 10000, поэтому она не может быть такой.
И самое странное из всех является то, что после 3 раза запустить пакет (ничего не меняя) он делает все правильно ...
public class ScriptMain : UserComponent
{
string MarkToRem;
string TypeToRem;
string SerToRem;
int IDCnt;
public override void PreExecute()
{
base.PreExecute();
}
public override void PostExecute()
{
base.PostExecute();
}
public override void Input0_ProcessInputRow(Input0Buffer Row)
{
MyOutputBuffer.AddRow();
if(Row.IncomingPrice == "Mark")
{
MarkToRem = Row.IncomingCode ; // Setting ver to remember the mark we are in
MyOutputBuffer.ID = Row.IncomingID.ToString();
MyOutputBuffer.Mark = MarkToRem;
MyOutputBuffer.Type = "";
MyOutputBuffer.Series = "";
MyOutputBuffer.Code = "";
MyOutputBuffer.Price = "";
MyOutputBuffer.Description = "Mark Verander";
}
else if(Row.IncomingPrice == "Sub")
{
TypeToRem = Row.IncomingCode; // Save our current Type
SerToRem = Row.IncomingCode; //Save our current Series
// ============ Output ========================
MyOutputBuffer.ID = Row.IncomingID.ToString();
MyOutputBuffer.Mark = MarkToRem;
MyOutputBuffer.Type = "";
MyOutputBuffer.Series = "";
MyOutputBuffer.Code = "";
MyOutputBuffer.Price = "";
MyOutputBuffer.Description = "Sub en series verander";
}
else if (Row.IncomingPrice == "Series")
{
SerToRem = Row.IncomingCode; //Save our current Series
// ============ Output ========================
MyOutputBuffer.ID = Row.IncomingID.ToString();
MyOutputBuffer.Mark = MarkToRem;
MyOutputBuffer.Type = "";
MyOutputBuffer.Series = SerToRem;
MyOutputBuffer.Code = "";
MyOutputBuffer.Price = "";
MyOutputBuffer.Description = "Series verander";
}
else
{
MyOutputBuffer.ID = Row.IncomingID.ToString();
MyOutputBuffer.Mark = MarkToRem;
MyOutputBuffer.Type = TypeToRem;
MyOutputBuffer.Series =SerToRem;
MyOutputBuffer.Code = Row.IncomingCode;
MyOutputBuffer.Price = Row.IncomingPrice;
MyOutputBuffer.Description = Row.IncomingDiscription;
}
IDCnt = IDCnt + 1;
}
}
Первые 9 строк выглядит следующим образом. Для входящих данных
ID Code Price Discription
1 184pin DDR Mark
2 DDR - Non-ECC Sub
3 ME-A1GDV4 388 Adata AD1U400A1G3-R 1Gb ddr-400 (pc3200) , CL3 - 184pin - lifetime warranty
4 ME-C512DV4 199 Corsair Valueselect VS512MB400 512mb ddr-400 (pc3200) , CL2.5 - 184pin - lifetime warranty
5 ME-C1GDV4 399 Corsair Valueselect VS1GB400C3 1Gb ddr-400 (pc3200) , CL3 - 184pin - lifetime warranty
6 240pin DDR2 Mark
7 DDR2 - Non-ECC Sub
8 Adata - lifetime warranty Series
9 ME-A2VD26C5 345 Adata AD2U667B2G5 Valuselect , 2Gb ddr2-667 (pc2-5400) , CL5 , 1.8v - 240pin - lifetime warranty
Добавлен код - примечание, что он создает строку MarkToRem; stringTypeToRem; строка SerToRem; aggain, потому что по какой-то причине он снова выполняет весь компонент скрипта после + - 430 строк. – Jacquespax
. Я собрал пакет воспроизведения и некоторые примеры данных, но я не могу генерировать ошибки во время выполнения. Возможно, я не понимаю эту проблему. Не могли бы вы пояснить, что будет означать сброс переменных? Каковы некоторые из этих данных для IncomingID, IncomingCode и IncomingPrice? Цена, как правило, ограничена Mark, Sub и Series, но может содержать другие значения. – billinkc
Там не будет никаких ошибок, по какой-то причине он начинается с 437 строк, и он начинает составлять компонент скрипта «с нуля», создавая, таким образом, первые верификации, объявленные сверху, и теряет значение там, где оно было. – Jacquespax