使用以下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


我认为是导致问题的日期值。我在这里做错了什么?

最佳答案

您应该完全使用DateTime,而不是string。这就是首先使用参数化查询的要点之一。

oracleCommand1.Parameters.Add("iStartDate", new DateTime(2011, 1, 1));
oracleCommand1.Parameters.Add("iEndDate", new DateTime(2011, 1, 21));

08-27 02:28