ORA-01830更新Oracle.ManagedDataAccess.Client

时间:2017-01-30 16:55:54

标签: c# database oracle date oracle11g

我在使用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

但他们实际上并没有为我工作。当我在一个Select中使用SQL Navigator for Oracle运行它时,作为一个魅力,但是当从.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'))

但似乎没有任何效果。

创建程序不是一种选择。

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:0)

如果函数中提供的日期没有格式字符串,则会出现错误' 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方法将其删除。