映射中的问题

时间:2017-04-07 01:00:28

标签: c# sql-server postgresql datetime biztalk

我正在创建从PostgreSQL获取数据并插入到MS SQL数据库中。所以PostgreSQL中的字段是数据类型Timestamp without time zone,这需要进入MS SQL DB中DataTime类型的字段。我在地图中使用脚本functoid来转换它们并插入.Below是我正在使用的脚本

public  string ConvertSampDateRec(string dateReceived)
 {
    DateTime recDate;
    DateTime.TryParseExact("yyyy-MM-dd HH:mm:ssZ", dateReceived, System.Globalization.CultureInfo.CurrentCulture, System.Globalization.DateTimeStyles.None, out recDate);
    string returnRec = recDate.ToString("yyyy-MM-ddTHH:mm:ss");
    return returnRec;
 }

我不确定没有时区的TimeStamp格式是否为yyyy-MM-dd HH:mm:ssZ。有了这个,我收到如下错误

Details:"System.Data.SqlTypes.SqlTypeException: SqlDateTime overflow. Must be between 1/1/1753 12:00:00 AM and 12/31/9999 11:59:59 PM.

所有returnRec的{​​{1}}为0001-01-01T00:00:00即使它不为空。我甚至尝试使用dateReceived但仍然没有帮助

2 个答案:

答案 0 :(得分:0)

您不能将0001-01-01T00:00:00放入SQL数据库,因为错误消息显示,可以处理的最小日期是1753-01-01T00:00:00

另外,为什么不处理DateTime.TryParseExact的返回值?您无法知道何时无法解析字符串,因此您将获得DateTime对象的默认值(等于DateTime.MinValue)

确保您正在处理类似于此的回复:

private static DateTime _sqlDefaultDateTime = new DateTime(1753, 01, 01);

private void foo()
{
    string parsedDate;
    if (!DateTime.TryParseExact())
    {
        parsedDate = _sqlDefaultDateTime;
    }
}

答案 1 :(得分:0)

HOLD ON 每个人。对不起,但这种情况一直存在,还有其他两个问题也是如此。

OP需要使用' o'格式,以发出xs:datetime兼容的字符串,以便它可以正确转换为SQL日期时间。

这是BizTalk特定的情况,这种解释已多次提供。

还需要一些额外的处理,这已在另一篇文章中描述过。