为啥将日期时间转换为字符串让我出错:ORA-01843: not a valid month

Posted

技术标签:

【中文标题】为啥将日期时间转换为字符串让我出错:ORA-01843: not a valid month【英文标题】:Why converting datetime to string gets me the error : ORA-01843: not a valid month为什么将日期时间转换为字符串让我出错:ORA-01843: not a valid month 【发布时间】:2013-05-05 02:46:52 【问题描述】:

我有以下列:

CheckingTime
------------
1 7/5/2011
2 
3 
4 5/8/2012

(列格式为日期。) 我正在使用数据读取器读取 DB1 中的所有列和行,并将它们插入 DB 2,如下所示:

while (dr.Read())

string finalratingdate = ((dr[19] != DBNull.Value) ? Convert.ToString(dr[19]) : "");

所以在插入时应该检查是否有DBNull,如果没有,则插入值,如果是则插入“”,但问题是我收到以下错误:

System.Data.OracleClient.OracleException: ORA-01843: 无效月份

我只使用 datetimes 变量得到这个错误。我能够将所有其他变量转换为字符串并插入它们。

你有什么想法吗?

谢谢

【问题讨论】:

【参考方案1】:

我相信异常表明您在数据库中的列是Date 类型,它不能容纳空字符串。您应该使用null 初始化变量,而不是在您的语句中使用空字符串,这将使您能够在Date 列中设置空值。所以你的陈述是:

string finalratingdate = ((dr[19] != DBNull.Value) ? Convert.ToString(dr[19]) : null);

我不确定为什么要将DateTime 字段转换为数据库字符串,您应该使用参数化查询并将DataTime 对象作为参数添加,而不是将其转换为字符串。

【讨论】:

感谢您的回复。我尝试了您的建议,但仍然收到相同的错误: System.Data.OracleClient.OracleException: ORA-01843: not a valid month 我正在将日期时间转换为字符串,因为我在十进制列中遇到 DBNulls 问题和将值转换为字符串更正了问题。现在我用 datetime colomns 尝试了同样的方法,但没有成功

以上是关于为啥将日期时间转换为字符串让我出错:ORA-01843: not a valid month的主要内容,如果未能解决你的问题,请参考以下文章

ISO日期格式从字符串到日期的转换会出错?

json中的String类型的日期为啥自动转换成date类型

将 UTC 日期时间字符串转换为本地日期时间

为啥 datetime.strptime 将日期输出为序列化? [复制]

将 UTC 日期和时间转换为 UNIX 时间会给出错误的(时区不同)值。为啥?

将Dataset中的列类型转换为python中具有特定格式的日期时间类型时出错