Как мне получить C# преобразование в SSIS, чтобы я мог вывести ноль - PullRequest
0 голосов
/ 21 апреля 2020

Я читаю некоторый текст из входного файла, разделяю его на соответствующие столбцы, а затем пытаюсь преобразовать эти столбцы в правильный тип данных. Для столбца 2 / корректировки цены важно, чтобы, когда выходные данные столбца были нулевыми, это были выходные данные. Целевой столбец может законно содержать 0 или отрицательные числа, а разница огромна, поэтому фиктивная переменная, такая как -1 или даже 999999, здесь не годится.

Один из столбцов содержит либо допустимое десятичное число, например 125.123, текст NA или пустая строка. Я использую Regexp, чтобы позаботиться о текстовых значениях - или, по крайней мере, они отображаются как инициализированное значение, а также пустые строки при тестировании с ненулевым выводом, так что это нормально.

Однако когда я хочу, чтобы вывод был нулевым, я всегда получаю ошибку.

Есть идеи? Я могу найти все виды вещей, показывающих, как преобразовать его в значение по умолчанию, если оно равно нулю, и я могу инициализировать переменную с -100, чтобы добиться этого по умолчанию, но я хочу, чтобы фактический вывод для этого столбца был нулевым, не какая-либо замена.

Я попытался GenOutputBuffer.priceadj_IsNull = true, но это не помогло, и, возможно, здесь была красная сельдь, поскольку ошибка - это значение NULL, а не то, что поле вывода не может содержать значения NULL. Угадай. Я не могу снять значение. Это подчеркивает красный цвет. Я мог бы попытаться проверить, имеет ли оно значение, используя .HasValue, но тогда как мне сказать, если оно не имеет значения, пожалуйста, все равно поставьте нулевое значение в выводе?

Соответствующие разделы кода:

string col2str, col3str;
decimal? col2decN, col3decN;

col2decN = null; //DOES NOT WORK WHEN THIS IS NULL
col3decN = -100; //DOES WORK BUT DO NOT WANT A DUMMY FOR COLUMN 2

. , .

col2str = Regex.Replace(SplitData[2], "[^0-9.]","");

try
{
col2decN = System.Convert.ToDecimal(col2str);
}
catch
{
//NOTHING
}

GenOutputBuffer.AddRow();
GenOutputBuffer.prodid = SplitData[0];
GenOutputBuffer.priceadj = col2decN.Value;

1 Ответ

1 голос
/ 21 апреля 2020

Просто установите для _IsNull этого столбца значение true, если при разборе строки на десятичную не удается

decimal dOut;
            if (decimal.TryParse(SplitData[1],out dOut))
            {
                Output0Buffer.C2 = dOut;
            }else
            {
                Output0Buffer.C2_IsNull = true;
            }

enter image description here

...