【问题标题】:ORA-01830 update Oracle.ManagedDataAccess.ClientORA-01830 更新 Oracle.ManagedDataAccess.Client
【发布时间】:2017-06-15 22:18:19
【问题描述】:

我在尝试通过 C# 中的 Oracle.ManagedDataAccess.Client 更新我的数据库时遇到此错误。 ORA-01830: 日期格式图片在转换整个输入字符串之前结束

我已经阅读了这些帖子:

ORA-01830: date format picture [duplicate]ORA-01830: date format picture ends before converting entire input string / Select sum where date query

但它们实际上对我不起作用。当我在 SQL Navigator for Oracle 中的 Select 中运行它时,它起到了一种魅力,但是当我从 .Net 调用下面的更新时,它会抛出这个错误。

update tbUser
   set dt_inactive =
          case
             when trim(to_date(:dt_inactive, 'dd/mm/yyyy HH24:MI:SS')) is not null
                then to_date(:dt_inactive, 'dd/mm/yyyy HH24:MI:SS')
             else
                to_date(dt_inactive, 'dd/mm/yyyy HH24:MI:SS')
          end
 where user_code = 'DEV01'

在 Visual Studio 中调试,我检查了日期是这样的::dt_inactive = 30/01/2017 14:05:25,这正是我想要发送到我的数据库的格式。但是错误仍然存​​在。

我已经尝试发送这个:

TO_DATE(:dt_inactive, 'dd/mm/yyyy HH:MI:SS') -- Throws me ORA-01849: hour must be between 1 and 12
TO_DATE(:dt_inactive, 'dd/mm/yyyy hh24:mi:ss')
TO_DATE(:dt_inactive, 'dd/mm/yyyy HH24:MI:SS')
TO_DATE(TO_CHAR(:dt_inactive), 'dd/mm/yyyy hh24:mi:ss')
TO_DATE(TO_CHAR(:dt_inactive), TO_CHAR('dd/mm/yyyy hh24:mi:ss'))

但似乎没有任何效果。

创建过程不是一种选择。

任何帮助将不胜感激。

【问题讨论】:

  • 请提供一些您想更新的示例日期。
  • @JSapkota 恐怕我不明白你的评论。更新在帖子中。以及参数的值..但是任何日期都返回相同的错误。 207 年 1 月 31 日 18:15:25、2017 年 1 月 25 日 13:45:15,以此类推。
  • 是的@JSapkota,这个字段是数据库中的一个日期。我这样发送:Case When Trim(TO_CHAR(:dt_inactive)) IS NOT NULL Then TO_CHAR(:dt_inactive, 'DD/MM/YYYY HH24:MI:SS') Else TO_CHAR(dt_inactive, 'DD/MM/YYYY HH24: MI:SS') 结束,错误依旧。

标签: c# database oracle date oracle11g


【解决方案1】:

当函数中提供的日期没有格式字符串时,会发生错误“ORA_01830”。例如,在下面的代码中,没有时区偏移的格式处理程序,所以我们得到了错误。

根据您的信息,日期没有时区信息,但我怀疑您提供的日期不正确。

SQL> select to_Date('06/10/11 15:24:16 +00:00', 'dd/mm/yyyy hh24:mi:ss') from dual;
select to_Date('06/10/11 15:24:16 +00:00', 'dd/mm/yyyy hh24:mi:ss') from dual
               *
ERROR at line 1:
ORA-01830: date format picture ends before converting entire input string

如果它包含时区,那么您可以使用DateTimeOffset.Parse 方法将其删除。

【讨论】:

    猜你喜欢
    • 2016-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多