c# - ORA-01858 : a non-numeric character was found where a numeric was expected

标签 c# .net oracle

我有一个函数接收 SearchCriteria 的集合对象: 列名或键、运算符( <<=like 等)和值。

该函数构建了一个命令对象。 我将该值设为命令参数,现在我的单元测试不适用于日期。 但是我所有的单元测试都适用于所有其他数据类型,例如 varchar。

在调试器中,我的一个失败的日期单元测试以如下所示的 cmd 结束:

SELECT * FROM (SELECT DocumentId 
               FROM idx1_AuthLetters a 
               INNER JOIN Documents b ON a.DocumentId = b.Id
               WHERE Status in ('L','S','V')  AND  letter_date <= :1 
               ORDER BY DOCUMENTID ) 
WHERE RowNum <= 14 

我确实有一个名为 :letter_date 的参数。但我可能有 :letter_date >= ### && :letter_date <= ### 我在两个日期之间查找。我不能两次使用相同的参数名称,因此我在遍历所有 SearchCriteria 对象时使用 i++ 计数器作为参数名称。我知道看到这样命名的参数很奇怪,但它在大多数情况下都有效。

如果我把它放入我的查询窗口,检查参数值并将其插入:

SELECT * FROM (SELECT DocumentId 
               FROM idx1_AuthLetters a 
               INNER JOIN Documents b ON a.DocumentId = b.Id 
               WHERE Status in ('L','S','V')  AND  
                     letter_date <= TO_DATE('2013-1-21', 'yyyy-mm-dd') 
               ORDER BY DOCUMENTID ) 
WHERE RowNum <= 14 

它工作正常。 但它不适用于我的单元测试中的 C# 代码。 这同样适用于所有其他数据类型。 在我对 select 语句中的值进行参数化之前,它曾经起作用。

确切的错误是:

{"ORA-01858: a non-numeric character was found where a numeric was expected"}

最佳答案

答案很简单: 在您的命令中,构建以下字符串 TO_DATE(:1, 'yyyy-mm-dd') 。然后,只需确保进入 :1 的字符串格式正确即可。

你的命令文本应该是这样的:

SELECT * FROM (SELECT DocumentId 
           FROM idx1_AuthLetters a 
           INNER JOIN Documents b ON a.DocumentId = b.Id
           WHERE Status in ('L','S','V')  AND  letter_date <= TO_DATE(:1, 'yyyy-mm-dd')  
           ORDER BY DOCUMENTID ) 
WHERE RowNum <= 14

关于c# - ORA-01858 : a non-numeric character was found where a numeric was expected,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17091774/

相关文章:

c# - 我怎样才能优雅地终止一个阻塞的线程?

java - 在运行删除/加载数据脚本之前锁定 Oracle 数据库

c# - Binding Items控制项

c# - 如何使用 DataContractJsonSerializer 反序列化字典?

c# - ExpressMapper/EntityFramework - 没有为此对象定义无参数构造函数

c# - 用于解析完全限定类型名称的现有类/方法

sql - 在 oracle 中插入和更新文件中的行

sql - 在 Oracle SQL 中将许多列放在 group by 子句中

c# - 添加未知 Gridview 数据源的所有行复选框

c# - .NET 在绘制图形时缩放图像