--储存过程如下
create or replace procedure UpdateIBLocationId(Messages out varchar2,PIBName in varchar2)
as 
  msg varchar2(100);
begin 
    select ibcode into oldIBCode from p010b001.ib_recognize_declare where ibname=PIBName;    
    ......
Messages :="成功!";
end UpdateIBLocationId;
//C#调用如下,
cmd = new OracleCommand("UpdateIBLocationId", con);
            cmd.CommandType = CommandType.StoredProcedure;            p1 = new OracleParameter("result", OracleType.VarChar,500);
            p1.Direction = System.Data.ParameterDirection.ReturnValue;
            cmd.Parameters.Add(p1);            p2 = new OracleParameter("PIBName", OracleType.VarChar, 20);
            p2.Direction = System.Data.ParameterDirection.Input;
            p2.Value = ibName[i]; cmd.Parameters.Add(p2);
try
            {
                con.Open();
                cmd.ExecuteNonQuery();
                //DataSet ds = new DataSet(); 
               //IDbDataAdapter da = new System.Data.OracleClient.OracleDataAdapter(cmd);
                //da.Fill(ds);  
               // Message +=ds.Tables[0] + "<br/>------------------------------------------------------------<br/>";
            }
            finally
            {
                if (con != null)
                {
                    con.Close();
                }
            }//调用报错
“/”应用程序中的服务器错误。
--------------------------------------------------------------------------------ORA-06550: 第 1 行, 第 18 列: 
PLS-00306: 调用 'UPDATEIBLOCATIONID' 时参数个数或类型错误
ORA-06550: 第 1 行, 第 7 列: 
PL/SQL: Statement ignored请问如何得到返回参数Messages 的值

解决方案 »

  1.   

    应修改一下:
    p1   =   new   OracleParameter( "Messages",   OracleType.VarChar,500);
    p1.Direction   =   System.Data.ParameterDirection.Output;
    cmd.Parameters.Add(p1); 
    p2   =   new   OracleParameter( "PIBName",   OracleType.VarChar,   20);
                            p2.Direction   =   System.Data.ParameterDirection.Input;
                            p2.Value   =   ibName[i];   cmd.Parameters.Add(p2); 
    不要有空格,另外参数名要与存储过程的参数名字一样,而且要确保传入的参数不能为null