1

次の C# コードを使用 (devArt の dotConnect for Oracle コンポーネントを使用):

OracleParameter pRes = new OracleParameter("C_REF", OracleDbType.Cursor);
pRes.Direction = ParameterDirection.ReturnValue;

oracleCommand1.Parameters.Clear();
oracleCommand1.Parameters.Add("iStartDate", "01-jan-2011");
oracleCommand1.Parameters.Add("iEndDate", "21-jan-2011");
oracleCommand1.Parameters.Add("iCATEGORYID", 114);
oracleCommand1.Parameters.Add(pRes);
oracleConnection1.Open();
oracleCommand1.ExecuteCursor();

...私は得ています:

Devart.Data.Oracle.OracleException は処理されませんでした メッセージ = ORA-06550: 行 2、列 13: PLS-00306: 'CONN_THRU_DOTNET' ORA-06550 への呼び出しで引数の数または型が間違っています

パラメーターは次のとおりです (ストアド プロシージャからコピー)。

 iStartDate IN DATE
, iEndDate IN DATE
, iCATEGORYID IN NUMBER
, C_REF IN OUT SYS_REFCURSOR

問題を引き起こしているのは日付の値だと思います。ここで何が間違っていますか?

4

3 に答える 3

4

DateTimeaではなく、 aを使用する必要がありstringます。これは、そもそもパラメーター化されたクエリを使用するポイントの 1 つです。

oracleCommand1.Parameters.Add("iStartDate", new DateTime(2011, 1, 1));
oracleCommand1.Parameters.Add("iEndDate", new DateTime(2011, 1, 21));
于 2012-03-15T16:09:04.520 に答える
0

Jon Skeetの回答を補完するものとして、パラメータ化されたクエリを使用していない場合、Oracleはこの'YYYY-MM-DD'形式の日付を想定しています。

于 2012-03-15T16:11:20.597 に答える
0

パーティーに少し遅れたことに気付きましたが、もう 1 つ注目すべき点があります...

ツールボックスから (コンポーネントとして) OracleCommand をインスタンス化し、(デザイナーを介して) CommandText を入力すると、データ型がパラメーターに自然に割り当てられないことがわかりました。パラメータの自動生成を提案した後、中に入ると、それらがすべてVarCharであることがわかると思います。

これらを DateTime に変更すると、上記のようにすべてが完全に機能するはずです。そうでない場合でも、正しいフォーマットを提供すれば、おそらくまだ機能します。ただし、そうしないでください。

于 2012-03-28T15:13:32.260 に答える