从 c# 在 Oracle 数据库中输入日期参数的正确格式是什么



这是我收到的错误消息

ORA-06550: line 1, column 15:
PLS-00306: wrong number or types of arguments in call to 'OBPL_SU_PLAN_UPDATE_PLAN_DTLS'
ORA-06550: line 1, column 7:
PL/SQL: Statement ignored

法典:

OracleCommand cmd = new OracleCommand();
cmd.Connection = conn;
cmd.CommandText = "CWPCDS.OBPL_SU_PROCESS_PKG.OBPL_SU_PLAN_UPDATE_PLAN_DTLS";
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("P_PLAN_DETAIL_ID", OracleDbType.Int32).Value = detailId; 
cmd.Parameters.Add("P_PLAN_USER_DETAIL_ID", OracleDbType.Int32).Value = null; 
cmd.Parameters.Add("P_TRANSACTION_PLAN", OracleDbType.NVarchar2, 20).Value = null;
cmd.Parameters.Add("P_PLAN_REV_ID", OracleDbType.Int64).Value = planRev;                   
cmd.Parameters.Add("P_TRANSACTION_TYPE", OracleDbType.NVarchar2, 20).Value = transType;
cmd.Parameters.Add("P_PLAN_STATUS", OracleDbType.NVarchar2, 30).Value = status;  
cmd.Parameters.Add("P_DOC_ISSUE_DATE", OracleDbType.Date).Value = pid;
cmd.Parameters.Add("P_EST_OBLG_DATE", OracleDbType.Date).Value = eod;
cmd.Parameters.Add("P_AMT_TO_APPLY", OracleDbType.Int32).Value = amtApply;
cmd.Parameters.Add("P_WBS", OracleDbType.NVarchar2, 20).Value = wbs;
cmd.Parameters.Add("P_AMT1_TO_APPLY", OracleDbType.Int32).Value = 0;
cmd.Parameters.Add("P_AMT2_TO_APPLY", OracleDbType.Int32).Value = 0;
cmd.Parameters.Add("P_UPDATE_USER", OracleDbType.NVarchar2, 50).Value =
user;             
cmd.Parameters.Add("P_DESC_WORK", OracleDbType.NVarchar2, 50).Value = dow;
cmd.Parameters.Add("P_RET_CODE", OracleDbType.Int32).Direction =
ParameterDirection.Output;
cmd.Parameters.Add("P_RET_MSG", OracleDbType.Varchar2, 50).Direction =
ParameterDirection.ReturnValue;
cmd.ExecuteNonQuery();

我可以从 Toad 运行该过程而没有任何错误,Toad 中的日期格式是"05-MAY-2012"。如果我尝试在代码隐藏中的日期值中添加 sigle qoute,则会出现"字符文字中的字符过多"错误。任何帮助或指导将不胜感激!

我建议添加一个DateTime .Net值(变量),然后将参数分配给变量。 这将为您处理转换。

DateTime dt = new DateTime(2012, 5, 7, 12, 23, 22, 0);
cmd.Parameters.Add(dt.ToString("dd-MMM-yyyy"), OracleDbType.Date).Value = dt;

您可以使用:

OracleCommandBuilder.DeriveParameters Method

猜测哪个是每个参数所需的数据类型和名称。知道这一点后,您可以相应地修改您的方法。

有时您会收到错误,因为您决定使用的类型不是数据库预期的类型(即,对于 C# DateTime,可以有时间戳、日期、小日期...取决于数据库类型。对参数使用错误的类型可能会导致错误或截断数据)。

切勿尝试将值作为字符串传递。将它们作为相应的 C# 类型传递。即为了传递日期,传递一个日期时间对象。该程序将注意将其转换为数据库可以理解的格式。如果你传递一个字符串,除非它是通用格式,否则如果你改变数据库配置,即默认语言,你可能会遇到麻烦。这就是为什么最好让系统处理转换细节的原因。它将始终以正确的方式做到这一点。

相关内容

  • 没有找到相关文章

最新更新