我正在创建从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
但仍然没有帮助
答案 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特定的情况,这种解释已多次提供。
还需要一些额外的处理,这已在另一篇文章中描述过。