【问题标题】:Geeting error ORA-01036 while executing Oracle Procedure using C#使用 C# 执行 Oracle 过程时出现错误 ORA-01036
【发布时间】:2016-06-05 02:02:24
【问题描述】:

在 C# 中执行 oracle 过程时出现错误

这是我的 C# 代码粘贴在下面,有 30 个字段我想插入到数据库中

OracleCommand orclCMD = new OracleCommand();
                orclCMD.Connection = CGlobalVariable.orclDB.opneCon();
                orclCMD.CommandText = "SPKFIL_HPT_SPECTRO";
                orclCMD.CommandType = CommandType.StoredProcedure;
                orclCMD.Parameters.Add("P_AMPLE_TASK ", OracleType.VarChar).Value = SAMPLE_TASK;
                orclCMD.Parameters.Add("P_TSK_TYPE", OracleType.VarChar).Value = TSK_TYPE;
              orclCMD.Parameters.Add("P_PRG", OracleType.VarChar).Value = PRG;
                orclCMD.Parameters.Add("P_TYPE_STD", OracleType.VarChar).Value = TYPE_STD;
                orclCMD.Parameters.Add("P_QUALITY", OracleType.VarChar).Value = QUALITY;
                orclCMD.Parameters.Add("P_SAMPLE_DATE", OracleType.DateTime).Value = SAMPLE_DATE;
                orclCMD.Parameters.Add("P_SAMPLE_TIME", OracleType.VarChar).Value = SAMPLE_TIME;
                orclCMD.Parameters.Add("P_SID1", OracleType.VarChar).Value = SID1;
                orclCMD.Parameters.Add("P_SID2", OracleType.VarChar).Value = SID2;
                orclCMD.Parameters.Add("P_SID3", OracleType.VarChar).Value = SID3;
                orclCMD.Parameters.Add("P_SID4", OracleType.VarChar).Value = SID4;
                orclCMD.Parameters.Add("P_SID5", OracleType.VarChar).Value = SID5;
                orclCMD.Parameters.Add("P_SID6", OracleType.VarChar).Value = SID6;
                orclCMD.Parameters.Add("P_SID7", OracleType.VarChar).Value = SID7;
                orclCMD.Parameters.Add("P_SID8", OracleType.VarChar).Value = SID8;
                orclCMD.Parameters.Add("P_SID9", OracleType.VarChar).Value = SID9;
                orclCMD.Parameters.Add("P_SID10", OracleType.VarChar).Value = SID10;
                orclCMD.Parameters.Add("P_SAMPLE_TYPE", OracleType.Number).Value = SAMPLE_TYPE;
                orclCMD.Parameters.Add("P_C_2", OracleType.Double).Value = C_2;
                orclCMD.Parameters.Add("P_SI1", OracleType.Double).Value = SI1;
                orclCMD.Parameters.Add("P_MN3", OracleType.Double).Value = MN3;
                orclCMD.Parameters.Add("P_S", OracleType.Double).Value = S;
                orclCMD.Parameters.Add("P_P_1", OracleType.Double).Value = P_1;
                orclCMD.Parameters.Add("P_CU5", OracleType.Double).Value = CU5;
                orclCMD.Parameters.Add("P_CR1", OracleType.Double).Value = CR1;
                orclCMD.Parameters.Add("P_PB", OracleType.Double).Value = PB;
                orclCMD.Parameters.Add("P_SN2", OracleType.Double).Value = SN2;
                orclCMD.Parameters.Add("P_TI4", OracleType.Double).Value = TI4;
                orclCMD.Parameters.Add("P_CE", OracleType.Double).Value = CE;
                orclCMD.Parameters.Add("P_MO2", OracleType.Double).Value = MO2;
                int i = orclCMD.ExecuteNonQuery();

我这里是oracle程序代码的代码

CREATE OR REPLACE Procedure SPKFIL_HPT_SPECTRO
(
  P_SAMPLE_TASK  VARCHAR2,
  P_TSK_TYPE     VARCHAR2,
  P_PRG          VARCHAR2,
  P_TYPE_STD     VARCHAR2,
  P_QUALITY      VARCHAR2,
  P_SAMPLE_DATE  DATE,
  P_SAMPLE_TIME  VARCHAR2,
  P_SID1         VARCHAR2,
  P_SID2         VARCHAR2,
  P_SID3         VARCHAR2,
  P_SID4         VARCHAR2,
  P_SID5         VARCHAR2,
  P_SID6         VARCHAR2,
  P_SID7         VARCHAR2,
  P_SID8         VARCHAR2,
  P_SID9         VARCHAR2,
  P_SID10        VARCHAR2,
  P_SAMPLE_TYPE  NUMBER,
  P_C_2          NUMBER,
  P_SI1          NUMBER,
  P_MN3          NUMBER,
  P_S            NUMBER,
  P_P_1          NUMBER,
  P_CU5          NUMBER,
  P_CR1          NUMBER,
  P_PB           NUMBER,
  P_SN2          NUMBER,
  P_TI4          NUMBER,
  P_CE           NUMBER,
  P_MO2          NUMBER )
As
cnt number;
Begin
  select nvl(count(P_SAMPLE_TYPE),0) into cnt from KFIL_HPT_SPECTRO where SAMPLE_TYPE=P_SAMPLE_TYPE;
  if cnt=0 then  
   insert into KFIL_HPT_SPECTRO (SAMPLE_TASK,TSK_TYPE,PRG,TYPE_STD,QUALITY,SAMPLE_DATE,SAMPLE_TIME,SID1,
                                SID2,SID3,SID4,SID5,SID6,SID7,SID8,SID9,SID10,SAMPLE_TYPE,C_2, SI1, MN3,S,p_1, CU5,CR1, PB, SN2,TI4, CE, MO2)
                                Values
                                (P_SAMPLE_TASK,P_TSK_TYPE,P_PRG,P_TYPE_STD,P_QUALITY,P_SAMPLE_DATE,P_SAMPLE_TIME,P_SID1,P_SID2,P_SID3,P_SID4,
                                P_SID5,P_SID6,P_SID7,P_SID8,P_SID9,P_SID10,P_SAMPLE_TYPE,P_C_2,P_SI1,P_MN3,P_S,P_P_1,P_CU5,P_CR1,P_PB,P_SN2,
                                P_TI4,P_CE,P_MO2);
  else
    Update KFIL_HPT_SPECTRO set SAMPLE_TASK = P_SAMPLE_TASK,TSK_TYPE = P_TSK_TYPE,PRG = P_PRG ,TYPE_STD  = P_TYPE_STD  ,QUALITY = P_QUALITY ,
                                SAMPLE_DATE = P_SAMPLE_DATE ,SAMPLE_TIME = P_SAMPLE_TIME ,SID1  = P_SID1  ,SID2  = P_SID2  ,SID3  = P_SID3  ,
                                SID4  = P_SID4  ,SID5  = P_SID5  ,SID6  = P_SID6  ,SID7  = P_SID7  ,SID8  = P_SID8  ,SID9  = P_SID9  ,
                                SID10 = P_SID10 ,C_2 = P_C_2 , SI1  = P_SI1 , MN3  = P_MN3 ,S = P_S ,p_1 = P_P_1 , CU5  = P_CU5 ,CR1 = P_CR1 ,
                                PB = P_PB  , SN2  = P_SN2 ,TI4 = P_TI4 , CE = P_CE  , MO2  = P_MO2 
                                Where  SAMPLE_TYPE = P_SAMPLE_TYPE ;

  end if;

end;

在执行ExecuteNonQuery() 时获取 ORA-01036 错误代码。 请提前帮助我,谢谢

【问题讨论】:

  • 抱歉我是新来的,如果你知道请告诉我
  • 先检查是否有30个字段和30个值
  • yes dr r 所有 30 个字段和值
  • 错误信息是什么意思?

标签: c# oracle stored-procedures oracle11g


【解决方案1】:

您正在构建的 oracle 命令中的第一个参数是指一个不存在的投标变量。

您的 .net oracle 命令对象必须引用您在实际 sql 中指定的投标变量。 P_SAMPLE_TASK 不会发生这种情况。

orclCMD.Parameters.Add("P_AMPLE_TASK ", OracleType.VarChar).Value = SAMPLE_TASK;

在上面的行中,您告诉 .net 在执行 sql 时将 SAMPLE_TASK 的值放入绑定变量“P_AMPLE_TASK”中。

另一方面,您的 sql 引用 P_SAMPLE_TASK(您缺少 S)。

VALUES (
    P_SAMPLE_TASK

SET SAMPLE_TASK = P_SAMPLE_TASK

这是一个错误。可能还有其他人:)

【讨论】:

  • thnq 这对我有很大帮助
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-27
  • 2014-11-01
  • 2015-09-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多