日期:2014-05-17  浏览次数:21692 次

调用oracle存储过程 【输入字符串的格式不正确】问题
本帖最后由 feixiangsunjq 于 2012-12-16 13:14:40 编辑
第一次写调用存储过程的代码 还是没接触过的oracle。菜鸟的不能再菜鸟了( ̄_ ̄|||) 
报错: System.FormatException: 输入字符串的格式不正确。
      [FormatException: 将参数值从 String 转换到 Int32 失败。]

存储过程【超简单尝试一下的】

set serveroutput on format wrapped
create or replace procedure te
(id_ in test.id%type,
name_ out varchar2)
as 
begin
select name into name_ from test where id=id_;
end;
/


然后是c#里的调用:

        OracleParameter p1 = new OracleParameter("id_", OracleType.Int32);
        p1.Direction = ParameterDirection.Input;
       // p1.OracleType = OracleType.Int32;
        p1.Value = Convert.ToInt32(3);
        cmd.Parameters.Add(p1);
        OracleParameter p2 = new OracleParameter("name_", OracleType.VarChar);
        p2.Direction = ParameterDirection.Output;
        p2.Value = "w";
        cmd.Parameters.Add(p2);

        cmd.ExecuteNonQuery();
        Label1.Text = cmd.Parameters[1].ToString();

不知道以上c#得到输出参数的方法对不对=。=网上查的
求各位精通的前辈赐教
------解决方案--------------------
p2.Value = "w"; 
是输出参数,不需要你自己写值,它是存储过程执行完得到的值;只有输入参才需要你填写数值。
而且 Label1.Text = cmd.Parameters[1].ToString(); 
上面应该改为Label1.Text = cmd.Parameters["name_"].ToString();