SearchCriteria
オブジェクトのコレクションを受け取る関数があります: columnName または Key、演算子 ( <
、<=
、like
など)、および値。
この関数はコマンド オブジェクトを構築します。値をコマンド パラメーターにしたところ、ユニット テストが日付に対して機能しなくなりました。しかし、私の単体テストはすべて、varchar などの他のすべてのデータ型に対して機能します。
デバッガーでは、失敗した日付単体テストの 1 つが次のような 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 <= ### を持っている可能性があり、2 つの日付の間を探しています。同じパラメーター名を 2 回使用することはできないため、すべての SearchCriteria オブジェクトをループしている間、i++ カウンターをパラメーター名として使用します。このように名前が付けられたパラメーターを見るのは奇妙ですが、ほとんどの場合は機能しています。
これを取得してクエリ ウィンドウに入力し、param 値を調べてプラグインすると、次のようになります。
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: 数値が必要な場所に数値以外の文字が見つかりました"}