我在字符串格式甲ANB乙

A = 14/01/2007

B = 22时十分39秒

我尝试插入日期和时间:

SQL = "insert into MyTbl(Tdate,Ttime) value ('" + Convert.ToDateTime(A) + "','" + Convert.ToDateTime(B) + "')";

我得到ORA-01843错误,我该怎么办?

感谢的预先

有帮助吗?

解决方案

的错误是由于月,尝试:

TO_DATE(A, 'DD / MM / YYYY')

其他提示

不要使用原始的SQL语句来插入值。使用参数化查询来代替。解析您字符串到.NET DateTime(或DateTimeOffset)和TimeSpan值以正常的方式,然后使用这样的:

string sql = "insert into MyTbl(Tdate,Ttime) values (:date, :time)";
using (OracleCommand cmd = new OracleCommand(sql, connection))
{
    cmd.CommandType = CommandType.Text;
    cmd.Parameters.Add("date", OracleType.DateTime).Value = date;
    cmd.Parameters.Add("time", OracleType.IntervalDayToSecond).Value = time;
    cmd.ExecuteNonQuery();
}

(显然调整为类型实际的字段。)

记住,Oracle没有一个唯一的时间字段。

您正试图插入一个唯一的一次场成日期时间。我的猜测是,CLR被拨动B为00/00/00 22点十分39秒,这是不是一个有效的Oracle日期。例如:

SQL> select to_date('00/00/00', 'MM/DD/YY') from dual;
select to_date('00/00/00', 'MM/DD/YY') from dual
               *
ERROR at line 1:
ORA-01843: not a valid month

无论哪种方式,Convert.ToDateTime(B)可能没有返回正确的事。

此外,这样的:

"insert into MyTbl(Tdate,Ttime) value ("

应该是这样的:

"insert into MyTbl(Tdate,Ttime) values ("

...但我猜在这里,这只是一个错字。

然而,我试图乔恩方法,它没有工作对我来说日期还时间。所以我找到了日期时间这种方法。也许这可以帮助别人在明年以后也是。

OracleParameter oPrm;
oPrm = cmd.CreateParameter();
oPrm.ParameterName = ":myDate";
oPrm.OracleDbType = OracleDbType.Date;
oPrm.Value = DateTime.Now;  //for date
cmd.Parameters.Add(oPrm);
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top