3

我有字符串格式的 A anb B

A = 2007 年 1 月 14 日

B = 22:10:39

我尝试插入日期和时间:

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

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

提前致谢

4

4 回答 4

8

不要使用原始 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();
}

(显然要根据实际字段的类型进行调整。)

于 2009-10-14T15:35:39.663 回答
2

错误是由于月份,尝试:

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

于 2009-10-14T15:43:45.597 回答
1

请记住,Oracle 没有时间字段。

您正在尝试将仅时间字段插入日期时间。我的猜测是 CLR 将 B 转换为 00/00/00 22:10:39,这不是有效的预言机日期。例如:

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 ("

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

于 2009-10-14T15:40:31.493 回答
1

但是我尝试了 Jon 方法,它对我的​​约会时间也不起作用。所以我找到了这个日期时间的方法。也许这对未来的某人也有帮助。

OracleParameter oPrm;
oPrm = cmd.CreateParameter();
oPrm.ParameterName = ":myDate";
oPrm.OracleDbType = OracleDbType.Date;
oPrm.Value = DateTime.Now;  //for date
cmd.Parameters.Add(oPrm);
于 2014-11-14T13:03:45.043 回答