Oracle期望日期的格式是什么?

时间:2012-03-15 16:07:41

标签: c# oracle types devart dotconnect

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

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

3 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:0)

作为对Jon Skeet的回答的补充,如果您不使用参数化查询,Oracle会期望采用'YYYY-MM-DD'格式的日期。

答案 2 :(得分:0)

我意识到我对派对来说有点晚了,但另一个感兴趣的是......

如果您从工具箱(作为组件)实例化OracleCommand并输入CommandText(通过设计器),我发现它不会自然地将您的数据类型分配给参数。在它提供自动生成参数后,如果你进去,我想你会发现它们都是VarChar。

如果将它们更改为DateTime,一切都应该完美,如上所述。如果不这样做,只要您提供正确的格式,它可能仍然有效。不过,不要这样做。