对应再加一个
  OracleParameter IdIn1 = orclCMD.Parameters.Add("sid1", OracleType.Int32, 11); //输入参数
            IdIn1.Direction = ParameterDirection.Input;
            IdIn1.Value = 3;  //这样的形式
orclCMD.ExecuteNonQuery(); 是执行存储

解决方案 »

  1.   

    第二个你给值就行阿, IdIn1.Value = 3; 这就是给值了,通过变量给值,
      

  2.   

    你看看网上的例子http://www.cnblogs.com/furenjun/archive/2007/06/18/orcaleprocedure.html
      

  3.   

      private void button2_Click(object sender, EventArgs e)
            {
                OracleConnection OC1 = new OracleConnection("Data Source=orcl;Persist Security Info=True;User Id=nszs; Password=1");
                OC1.Open();
                OracleCommand orclCMD = new OracleCommand(); //初始化一个命令对象
                orclCMD .Connection = OC1;
                orclCMD.CommandText = "FN_NS_ZYSKJ"; //存储过程名 
                orclCMD .CommandType = CommandType.StoredProcedure;//表面是存储过程
     
                //第一个参数
                //如果创建存储过程是有变量,所以还要声明变量
                OracleParameter IdIn = orclCMD.Parameters.Add("sid", OracleType.Int32, 11); //输入参数
                IdIn.Direction = ParameterDirection.Input;            //IdIn.Value = Convert.ToInt32(textBox1.Text); //获得 stuid 号。
                //测试时,可直接写成   
                IdIn.Value = 2;  //这样的形式            //第二个参数
                OracleParameter IdIn1 = orclCMD.Parameters.Add("sid1", OracleType.Int32, 11); //输入参数
                IdIn1.Direction = ParameterDirection.Input;
                IdIn1.Value = 3;  //这样的形式
                //如果创建存储过程是还定义了输出变量
                OracleParameter NumTitles = orclCMD.Parameters.Add("sname", OracleType.Int32, 110);//输出参数
                NumTitles.Direction = ParameterDirection.Output;
                //测试执行存储过程影响的行数
                orclCMD.ExecuteNonQuery();
                // 注意获得参数的方式: testCMD.Parameters["sname"] ;这个是在存储过程中有输出的变量需要这样子,如果没有输出变量,可以不写。
                MessageBox.Show(orclCMD.Parameters["sname"].Value.ToString());
            }按照楼上的哥们的方法改后。提示错误ORA-06550: 第 1 行, 第 7 列: PLS-00306: 调用 'FN_NS_ZYSKJ' 时参数个数或类型错误ORA-06550: 第 1 行, 第 7 列: 
    但是我的存储过程是没问题的。
    create or replace function FN_NS_ZYSKJ(
                                           ysnd  IN int,      --年度
                                           cxqj      int    --月份
                                      
                                        )
      return types.cursortypes is
      Result types.cursortypes;  v_sql Varchar2(32767);
      v_sql1 Varchar2(32767);
      v_sql2 Varchar2(32767);
      v_sql3 Varchar2(32767);
      v_sql4 Varchar2(32767);
      v_sql5 Varchar2(32767);
      v_sql6 Varchar2(32767);
      v_sql7 Varchar2(32767);Begin  insert into B VALUES(ysnd,cxqj);
      COMMIT;
      --游标生成
      Open Result For
            select * FROM B ;
      return(Result);
      Close Result;
    end FN_NS_ZYSKJ;
      

  4.   

    你的存储过程参数一直没有添进去的吧在执行存储过程语句orclCMD.ExecuteNonQuery();之前加入orclCMD.Parameters.Add(IdIn);
    orclCMD.Parameters.Add(IdIn1);
      

  5.   

                OracleParameter IdIn = orclCMD.Parameters.Add("sid", OracleType.Int32, 11); //输入参数
                IdIn.Direction = ParameterDirection.Input;            //IdIn.Value = Convert.ToInt32(textBox1.Text); //获得 stuid 号。
                //测试时,可直接写成   
                IdIn.Value = 2;  //这样的形式            //第二个参数
                OracleParameter IdIn1 = orclCMD.Parameters.Add("sid1", OracleType.Int32, 11); //输入参数这里添加了啊
      

  6.   

    我使用的是sql2008 换一下oracle试试
     private DataTable Getdt( )
        {
            string strCon = System.Configuration.ConfigurationManager.ConnectionStrings["SQLConnectionString"].ConnectionString.ToString();
            SqlConnection sqlCon = new SqlConnection(strCon);
            sqlCon.Open();        string cmdText = "";
            cmdText = String.Format("EXEC YearOrMonthDecSMPrintAgents '{0}','{1}'","参数1", "参数2");        SqlCommand cmd = new SqlCommand(cmdText, sqlCon);
            SqlDataAdapter da = null;
            da = new SqlDataAdapter(cmd);
            DataSet ds = new DataSet();
            da.Fill(ds, "Proc");        //关闭数据库
            sqlCon.Close();
            sqlCon.Dispose();
            //释放资源
            da.Dispose();        return ds.Tables["Proc"];
        }
      

  7.   

    你的存储过程不符合MSSQL 的语法,不能用SQL2008尝试没写过oracle,不过在MSSql中,参数名称要和存储过程中的参数名称对应起来。
    比如在C#中写 OracleParameter IdIn = orclCMD.Parameters.Add("sid", OracleType.Int32, 11); //输入参数
    那么一个输入参数就应该是sid。貌似你的输入参数是ysnd和cxqj,输出参数就更不对了如果你的代码只是一个示例,那你要确认输出的参数是int类型的数
      

  8.   

    帮楼主顶个贴,。Oracle的语法也不是很熟,楼主可以查询下数据类型有没有错
      

  9.   

    OracleCommand cmd = new OracleCommand("sp_unload_duo");
                    cmd.CommandType = CommandType.StoredProcedure;                OracleParameter para = new OracleParameter();
                    para.ParameterName = "v_boxnum";
                    para.OracleType = OracleType.Int32;
                    para.Direction = ParameterDirection.Input;
                    para.Value = boxnum;
                    cmd.Parameters.Add(para);                para = new OracleParameter();
                    para.ParameterName = "v_boxno1";//
                    para.OracleType = OracleType.VarChar;
                    para.Size = 32;
                    para.Direction = ParameterDirection.Input;
                    para.Value = boxno1;
                    cmd.Parameters.Add(para);                para = new OracleParameter();
                    para.ParameterName = "v_returnValue";
                    para.OracleType = OracleType.Int32;
                    para.Direction = ParameterDirection.Output;
                    cmd.Parameters.Add(para);                cmd.CommandTimeout = 180;
                    int retValue = cmd.ExecuteNonQuery();