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