---c#调用oracle存储过程的调用问题---

哈哈007哈 2004-08-19 09:16:19


有一个存储过程:
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());

但是怎么说传入的参数不正确??

谢谢

...全文
81 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
哈哈007哈 2004-08-19
  • 打赏
  • 举报
回复
忘记了说CommonDataDeal.Common.OCMain是一个oracle静态连接对象
dinya2003 2004-08-19
  • 打赏
  • 举报
回复
--忘了这一句了. :)
private OleDbCommand cmd=new OleDbCommand();
dinya2003 2004-08-19
  • 打赏
  • 举报
回复
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,491

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 高级技术相关讨论专区
社区管理员
  • 高级技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧