有一个存储过程:
CREATE OR REPLACE PROCEDURE "SP_DAILY_BILLING_PROCESS_CUST"  (bill_end_date IN Date, Custcode In VARCHAR2, prc_stat out number ) IS
以下略......我的调用代码是:
int i = 0;
System.Data.OracleClient.OracleCommand om = new OracleCommand("sp_add_system_activity",CommonDataDeal.Common.OCMain);
om.CommandType = System.Data.CommandType.StoredProcedure;
om.Parameters.Add("bill_end_date","to_date('"+this.dtBillEndDate.Text+"',null,'yyyy/mm/dd')");
om.Parameters.Add("Custcode",this.MulCustomerCode.Text.Trim());
om.Parameters.Add("prc_stat",i);
if(CommonDataDeal.Common.OCMain.State == System.Data.ConnectionState.Closed )
CommonDataDeal.Common.OCMain.Open();
om.ExecuteNonQuery();
if(CommonDataDeal.Common.OCMain.State == System.Data.ConnectionState.Open )
         CommonDataDeal.Common.OCMain.Close();
i = (int)(om.Parameters["prc_stat"].Value);
MessageBox.Show("Affected records = " + i.ToString());但是怎么说传入的参数不正确??谢谢
  

解决方案 »

  1.   

    忘记了说CommonDataDeal.Common.OCMain是一个oracle静态连接对象
      

  2.   

    System.Data.OracleClient.OracleCommand om = new OracleCommand("sp_add_system_activity",CommonDataDeal.Common.OCMain);
    --你这里的过程名和你给的过程名不相同啊.SP_DAILY_BILLING_PROCESS_CUST" <-----
    在C#里面最好用try catch finally结果.防止出现异常.
    参考:
    public int Exec_tt_computer_configure(string execflag,string p_computer_name,string p_hd_id,string p_segment1,string pro_name)
    {
      int i;
      string proc_name=pro_name;
      cmd.Parameters.Clear();
      cmd.Connection=new clsPublic().ConnectDB();
      cmd.CommandText=proc_name;
      cmd.CommandType=CommandType.StoredProcedure;
      
      cmd.Parameters.Add("execflag",OleDbType.VarChar);
      cmd.Parameters.Add("t_computer_name",OleDbType.VarChar);
      cmd.Parameters.Add("t_hd_id",OleDbType.VarChar);
      cmd.Parameters.Add("t_segment1",OleDbType.VarChar);
      cmd.Parameters.Add("p_out",OleDbType.Integer);
      
      cmd.Parameters["execflag"].Value=execflag;
      cmd.Parameters["t_computer_name"].Value=p_computer_name;
      cmd.Parameters["t_hd_id"].Value=p_hd_id;
      cmd.Parameters["t_segment1"].Value=p_segment1;
      
      cmd.Parameters["execflag"].Direction=ParameterDirection.Input;
      cmd.Parameters["t_computer_name"].Direction=ParameterDirection.Input;
      cmd.Parameters["t_hd_id"].Direction=ParameterDirection.Input;
      cmd.Parameters["t_segment1"].Direction=ParameterDirection.Input;
      cmd.Parameters["p_out"].Direction=ParameterDirection.ReturnValue;
      
      try
      {
        cmd.ExecuteNonQuery();
        i=(int)cmd.Parameters["p_out"].Value;
      }
      catch
      {
        i=-3;
      }
      finally
      {
        if (cmd.Connection.State==ConnectionState.Open)
        {
        cmd.Connection.Close();
        cmd.Parameters.Clear();
        cmd.Dispose();
        }
      }
      return i;
    }
      

  3.   

    --忘了这一句了.  :)
    private OleDbCommand cmd=new OleDbCommand();