Oracle希望日期采用何种格式

本文关键字:何种 格式 希望 日期 Oracle | 更新日期: 2023-09-27 18:28:00

使用以下C#代码(使用devArt的dotConnect用于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

我想是日期vals造成了问题。我在这里做错了什么?

Oracle希望日期采用何种格式

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

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

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

我意识到我参加聚会有点晚了,但另一个有趣的注意。。。

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

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