SSIS脚本组件转换C#代码日期转换

SSIS脚本组件转换C#代码日期转换,c#,ssis,type-conversion,C#,Ssis,Type Conversion,我正在创建SSIS包以导入大型固定宽度文本文档,并需要转换各种字段。其中一个字段表示日期,宽度为8个字符。格式为“yyyyMMdd”,如下所示: SomeDateField 20130415 20110122 19891023 但是,有些字段只有空格,有些字段将全部为0 00000000。无法转换为日期的值应返回空值。我不允许用1900年1月1日这样的日期代替 在徒劳地尝试将其转换为带有表达式的日期字段后,我转向了C#脚本转换 我的输入列名为sSoldDate,是只读的。我已经配置了一个名为S

我正在创建SSIS包以导入大型固定宽度文本文档,并需要转换各种字段。其中一个字段表示日期,宽度为8个字符。格式为“yyyyMMdd”,如下所示:

SomeDateField
20130415
20110122
19891023
但是,有些字段只有空格,有些字段将全部为0 00000000。无法转换为日期的值应返回空值。我不允许用1900年1月1日这样的日期代替

在徒劳地尝试将其转换为带有表达式的日期字段后,我转向了C#脚本转换

我的输入列名为sSoldDate,是只读的。我已经配置了一个名为SoldDate的DT-DBDATE数据类型的输出

我想出的有效代码是:

DateTime varDate;
        bool isParsed;

        isParsed = DateTime.TryParseExact(Row.sSoldDate, "yyyyMMdd", CultureInfo.InvariantCulture, DateTimeStyles.None, out varDate);
        if (isParsed)
        {
            Row.SoldDate = varDate;
        }
        else
        {
            Row.SoldDate_IsNull = true;
        }
然后,在文本导入中,我通过在同一脚本组件中重复该代码并替换其他字段名,继续使用其他日期字段,如下面的字段。但是,我不必重复变量声明

尽管这是可行的,我还是要重复这个过程很多次,我想确保这是执行这种检查和转换的最方便的方法。有没有更简洁的方法来实现同样的目标

还有更有效的方法吗

是否有一些简单的方法可以将逻辑封装在自定义方法或函数中,从而简化此过程

大卫

我过去做过的一件事是用您反复使用的代码创建(或让别人为您创建)一个.NET程序集。您应该能够在编写的任何脚本中引用此程序集


我已将此用于SQL Server 2008\2008 R2投标。我还没有试过2012年的出价。如果你需要更多信息,请告诉我。我可能会为此写一篇博客。

您可以将逻辑封装到函数中。这将有助于确保跨包拥有一致的方法(当您复制粘贴它时),调用该方法会有一些开销。解析逻辑关注我遇到类似情况时使用的内容(主机数据万岁)。唯一可以为您节省一点的是将varDate升级为成员变量。然后引擎只需要创建一次,并且每行重复使用一次。我很想把它变成一个.Net程序集。但是,我不确定如何处理空部分。如何动态返回Row.FIELDNAME\u IsNull=true;有一个组件?我需要打开出价并测试它。