gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 23:15:42 27 4
gpt4 key购买 nike

我有一个函数接收 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com