我有一个序列化代码,并且在此代码中存在解析时表示日期的数值。
For example, 011756420176654
*Note* array index may be off
Substring(1,2) = 01
Substring(3,2) = 17
我试图忽略该行,而不替换原始行。我有一个派生列,并且正在列中执行此操作。
(dt_date)(Substring([My Code], 1, 2) + "-" + Substring([My Code], 3, 2) + (dt_str,10,1252)datepart("year",getdate()))
如果派生列中的“TryParse”逻辑失败,我的意图是配置我的错误输出以忽略 [My Code] 字段。我知道如果我正在传递派生列,那么在配置上选择忽略将传递 null,但问题是我试图(错误时)忽略源行并将其传递为 null(即 [我的代码])。
一旦这个命中是数据库,另一个进程会使用它并尝试解析日期。它不会在空值上失败,所以我想在允许记录通过或将其设置为空之前验证本质上是“是日期”的逻辑。
编辑:根据基思的解决方案,我来到了这个。我在访问输出缓冲区时遇到问题,但是在一些 MSDN 语法之后,我想出了以下完美的方法。
public override void Input0_ProcessInputRow(Input0Buffer Row)
{
DateTime dateValue;
string test = Row.ReceiptCode.Substring(0, 2) + "/" + Row.ReceiptCode.Substring(2, 2) + "/" + DateTime.Now.Year.ToString();
if (DateTime.TryParse(test, out dateValue) && Row.ReceiptCode.Length ==16)
{
Output0Buffer.AddRow();
Output0Buffer.EndDate = Row.EndDate;
Output0Buffer.Q10 = Row.Q10;
Output0Buffer.Q8 = Row.Q8;
Output0Buffer.ValidatedReceipt = Row.ReceiptCode;
}
else
{
Output1Buffer.AddRow();
Output1Buffer.EndDate = Row.EndDate;
Output1Buffer.Q10 = Row.Q10;
Output1Buffer.Q8 = Row.Q8;
Output1Buffer.Error = Row.ReceiptCode;
}
}