更新
显然这不是由 0000-00-00 00:00:000
,当值为 2016-04-21 00:00:00.000
知道原因是什么吗?
我有一个vsc程序,它将从mssql中选择,然后在mysql数据库中插入/重复更新。我有一行日期时间是 NULL
,我的mssql查询和结果是:
查询
SELECT UserID,LastPasswordDate,
CASE WHEN LastPasswordDate IS NULL THEN '0000-00-00 00:00:00:000'
ELSE convert(varchar, LastPasswordDate, 121) END as LastPasswordDate2 from users
order by LastPasswordDate
结果
c代码
string LastPasswordDate = row["LastPasswordDate"].ToString(); // Or
//DateTime LastPasswordDate = DateTime.ParseExact(row["LastPasswordDate"].ToString(), "yyyy-MM-dd HH:mm:ss:fff", null);
insertUserCommand.Parameters.AddWithValue("@LastPasswordDate", LastPasswordDate);
insertUserCommand.ExecuteNonQuery();
insertUserCommand.Parameters.Clear();
tran.Commit();
我试着使用c#转换,但得到的错误信息与前面提到的标题相同
3条答案
按热度按时间amrnrhlw1#
问题是,用于检查的字符串“0000-00-00:00:00:000”无法在代码中转换为有效的日期时间,即使它可以像这样保存在数据库中。最好的解决方案是在数据库中设置一个默认值null并查找它
fhity93d2#
你应该知道的第一件事是
datetime
mysql中的数据类型的最小值为1000-01-01 00:00:00.000
,不是0000-00-00 00:00:00.000
当对无效日期使用日期时间转换时,用作“零”值显示。第二,市场DateTime.MinValue
最小值为0001-01-01 00:00:00.000
,不适合与前面提到的mysql的“零值”进行转换。如果mysql db中的目标列具有nullable
datetime
数据类型,应该使用TryParseExact()
使用DBNull.Value
对于无法分析“零”日期时分配空值:但在我看来,最好从t-sql查询中返回空值并用
Convert.IsDBNull()
,然后使用DBNull.Value
对于将空值赋给数据库列:whlutmcx3#
在.net中,datetime.minvalue是1/1/0001 12:00:00 am,因此0000-00-00:00:00超出了有效的datetime值的范围。
请参见datetime.minvalue