5

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: 数値が必要な場所に数値以外の文字が見つかりました"}

4

1 に答える 1

6

ここでの答えは非常に簡単です。コマンドで、次の文字列を作成します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
于 2013-08-23T21:48:07.463 に答える