我在执行下面的代码时,系统总在执行第6行时报错
string billid;
string str_Conn="user id=cm;data source=MOVESOFT;password=123";
this.myConn.ConnectionString=str_Conn;
this.myConn.Open();
OracleCommand cmd=new OracleCommand("sp_new_glide",myConn);
billid=(string)cmd.ExecuteOracleScalar();
this.myConn.Close();
this.textBox1.Text=billid;
但我看不出错在哪,是Oracle的存储过程不能这样调用用吗?请各位高手指点一下
其中的存储过程内容如下:
create or replace procedure cm.sp_new_glide-- 新增一个入库单
(
       v_billid out varchar2
) as
begin 
     
      --累加算出新单据号
      select billid into v_billid from  cm.glide_total where rownum=1 order by billid desc;
      v_billid:=lpad(8,to_char(v_billid+1),'0');--给单据号补零
     
end sp_new_glide;
存储过程是查出上一张的单据号加一并补足位数,生成新的单据号。如:旧0003,新0004

解决方案 »

  1.   

    OracleCommand cmd=new OracleCommand("sp_new_glide",myConn);
    下面 加这句
    cmd.CommandType = CommandType.StoredProcedure;
      

  2.   

    string str_Conn="user id=cm;data source=MOVESOFT;password=123";
    this.myConn.ConnectionString=str_Conn;
    this.myConn.Open();
    //如下为修改部分,拿去运行吧OracleCommand cmd=new OracleCommand("sp_new_glide",myConn);
    cmd.CommandType = CommandType.StoredProcedure;
    OracleParameter op = cmd.Parameters.Add("v_billid",                     OracleType.Varchar,32);
    op_zt_hh2.Direction = ParameterDirection.Output;    
    cmd.ExecuteNonQuery();this.myConn.Close();this.textBox1.Text=op.value.tostring();
      

  3.   

    string str_Conn="user id=cm;data source=MOVESOFT;password=123";
    this.myConn.ConnectionString=str_Conn;
    this.myConn.Open();
    OracleCommand cmd=new OracleCommand("sp_new_glide",myConn);
    OracleParameter op = cmd.Parameters.Add("?", OracleType.VarChar, 32);
    op.Direction = ParameterDirection.Output;
    cmd.ExecuteNonQuery();
    this.myConn.Close();
    this.textBox1.Text = Convert.ToString(op.Value);
      

  4.   

    晕,楼主怎么不来看啊,这么多答案,楼上的,调用oracle存储过程时变量不能使用?来表示
      

  5.   

    谢谢,看到了,还有点问题。如果有传入参数,和传出参数该怎么写?
    create   or   replace   procedure   cm.sp_new_glide--   新增一个入库单
    (
                  v_billid  out   varchar2
                  v_b  in    number
    )   as
    begin  
             
                --累加算出新单据号
                select   billid   into   v_billid   from     cm.glide_total   where   rownum=v_b   order   by   billid   desc;
                v_billid:=lpad(8,to_char(v_billid+1), "0 ");--给单据号补零
             
    end   sp_new_glide;
     
    OracleCommand   cmd=new   OracleCommand("sp_new_glide",myConn);
    cmd.CommandType   =   CommandType.StoredProcedure;
    OracleParameter   op   =   cmd.Parameters.Add("v_billid",                                           OracleType.Varchar,32);
    op_zt_hh2.Direction   =   ParameterDirection.Output;   
    OracleParameter   inp   =   cmd.Parameters.Add("v_b",                                           OracleType.Varchar,32);
    op_zt_hh2.Direction   =   ParameterDirection.Input;     
    cmd.ExecuteNonQuery(); 会报错为什么?