【问题标题】:got ORA-01843 when I try to insert date & time to Oracle当我尝试向 Oracle 插入日期和时间时得到 ORA-01843
【发布时间】:2010-12-06 17:30:38
【问题描述】:

我有字符串格式的 A 和 B

A = 2007 年 1 月 14 日

B = 22:10:39

我尝试插入日期和时间:

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

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

先谢谢了

【问题讨论】:

  • 在显示的赋值之后,变量 SQL 包含什么?
  • 另外,Tdate 和 Ttime 是什么数据类型?

标签: c# sql oracle plsql ora-01843


【解决方案1】:

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

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

【讨论】:

  • +1 用于绑定变量!此外,正如在别处提到的那样,将日期和时间存储在两个单独的字段中是很愚蠢的。
  • 来自MSDN,现在看来OracleCommand 已经过时了。
【解决方案2】:

错误是由于月份,试试:

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

【讨论】:

    【解决方案3】:

    请记住,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 ("
    

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

    【讨论】:

      【解决方案4】:

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

      OracleParameter oPrm;
      oPrm = cmd.CreateParameter();
      oPrm.ParameterName = ":myDate";
      oPrm.OracleDbType = OracleDbType.Date;
      oPrm.Value = DateTime.Now;  //for date
      cmd.Parameters.Add(oPrm);
      

      【讨论】:

        猜你喜欢
        • 2021-11-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-09-05
        • 2021-03-13
        • 2017-04-21
        • 2015-02-17
        相关资源
        最近更新 更多