我有一个接收SearchCriteria
对象集合的函数:columnName 或 Key、运算符(、、、<
等<=
)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:在需要数字的地方发现了一个非数字字符”}