日期:2014-05-19  浏览次数:20883 次

在程序中调用Oracle的存储过程
我在执行下面的代码时,系统总在执行第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

------解决方案--------------------
我的异常网推荐解决方案:oracle存储过程,http://www.aiyiweb.com/oracle-develop/177537.html
------解决方案--------------------
OracleCommand cmd=new OracleCommand( "sp_new_glide ",myConn);
下面 加这句
cmd.CommandType = CommandType.StoredProcedure;
------解决方案--------------------
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);