存储过程如下:
CREATE OR REPLACE Function CheckOnline(UserID in  varchar2, UserRoleName in varchar2,Url in varchar2,IpAddress in varchar2,Session in varchar2, Islogined in integer)
  RETURN integer
as
 UserID_ varchar2(64) := UserID;
 UserRoleName_ varchar2(32) := UserRoleName;
 Url_ varchar2(128) := Url;
 IpAddress_ varchar2(32) := IpAddress;
 Session_ varchar2(64) := Session;
 Islogined_ integer := Islogined; 
 v_i integer := 0;begin
...
return(0);
end CheckOnline程序代码如下 OleDbConnection con = new OleDbConnection("Provider=msdaora;Data Source=GCRIS2DB;User Id=KODAK;Password=gcris2_2006");
 con.Open();
 OleDbCommand cmd = new OleDbCommand("checkonline", con);
 cmd.Parameters.Clear();
 cmd.Parameters.Add("userid", OleDbType.VarChar);
 cmd.Parameters.Add("userrolename", OleDbType.VarChar);
 cmd.Parameters.Add("url", OleDbType.VarChar);
 cmd.Parameters.Add("ipaddress", OleDbType.VarChar);
 cmd.Parameters.Add("session", OleDbType.VarChar);
 cmd.Parameters.Add("islogined", OleDbType.Integer);
 cmd.Parameters.Add("result", OleDbType.Integer);
 cmd.Parameters["userid"].Value = "tt";
 cmd.Parameters["userrolename"].Value = "tt";
 cmd.Parameters["url"].Value = "tt";
 cmd.Parameters["ipaddress"].Value = "tt";
 cmd.Parameters["session"].Value = "tt";
 cmd.Parameters["islogined"].Value = 0;
           
 cmd.Parameters["userid"].Direction = ParameterDirection.Input;
 cmd.Parameters["userrolename"].Direction = ParameterDirection.Input;
 cmd.Parameters["url"].Direction = ParameterDirection.Input;
 cmd.Parameters["ipaddress"].Direction = ParameterDirection.Input;
 cmd.Parameters["session"].Direction = ParameterDirection.Input;
 cmd.Parameters["islogined"].Direction = ParameterDirection.Input;
 cmd.Parameters["result"].Direction = ParameterDirection.ReturnValue;
 cmd.CommandType = CommandType.StoredProcedure;
 cmd.CommandText = "CheckOnline";
 cmd.ExecuteNonQuery();
 textBox1.Text = cmd.Parameters["result"].Value.ToString();
 con.Close();
程序执行到cmd.ExecuteNonQuery();抛出如下异常
ORA-06550: 第 1 行, 第 7 列: 
PLS-00306: 调用 'CHECKONLINE' 时参数个数或类型错误
ORA-06550: 第 1 行, 第 7 列: 
PL/SQL: Statement ignored
请问大家这是怎么回事啊!

解决方案 »

  1.   

    你传递的参数个数或参数类型不对,仔细检查一下……
    这是function
      

  2.   


    函数没这么调用过
    程序中我一般都是用
    构造 sql语句 select CheckOnline(输入参数) from dual;
      

  3.   

    直接用存储过程吧。
    CREATE OR REPLACE procedure CheckOnline
    (UserID   in     varchar2,   
    UserRoleName   in   varchar2,
    Url   in   varchar2,
    IpAddress   in   varchar2,
    Session   in   varchar2,  
    Islogined   in   integer,
    result out integer) 
    is
      UserID_   varchar2(64)   :=   UserID;
      UserRoleName_   varchar2(32)   :=   UserRoleName;
      Url_   varchar2(128)   :=   Url;
      IpAddress_   varchar2(32)   :=   IpAddress;
      Session_   varchar2(64)   :=   Session;
      Islogined_   integer   :=   Islogined;  
      v_i   integer   :=   0;
    beginresult := 0;
    commit;  
    end CheckOnline;

    调用代码:OleDbConnection   con   =   new   OleDbConnection( "Provider=OraOLEDB.Oracle.1;user id=bwytest;data source=NEC1001;password=bwy");
    try
    {
    con.Open();
    OleDbCommand   cmd   =   new   OleDbCommand( "checkonline",   con);
    cmd.Parameters.Clear();
    cmd.Parameters.Add( "userid",   OleDbType.VarChar);
    cmd.Parameters.Add( "userrolename",   OleDbType.VarChar);
    cmd.Parameters.Add( "url",   OleDbType.VarChar);
    cmd.Parameters.Add( "ipaddress",   OleDbType.VarChar);
    cmd.Parameters.Add( "session",   OleDbType.VarChar);
    cmd.Parameters.Add( "islogined",   OleDbType.Integer);
    cmd.Parameters.Add( "result",   OleDbType.Integer);
    cmd.Parameters[ "userid"].Value   =   "tt ";
    cmd.Parameters[ "userrolename"].Value   =   "tt ";
    cmd.Parameters[ "url"].Value   =   "tt ";
    cmd.Parameters[ "ipaddress"].Value   =   "tt ";
    cmd.Parameters[ "session"].Value   =   "tt ";
    cmd.Parameters[ "islogined"].Value   =   0;
        
    cmd.Parameters[ "userid"].Direction   =   ParameterDirection.Input;
    cmd.Parameters[ "userrolename"].Direction   =   ParameterDirection.Input;
    cmd.Parameters[ "url"].Direction   =   ParameterDirection.Input;
    cmd.Parameters[ "ipaddress"].Direction   =   ParameterDirection.Input;
    cmd.Parameters[ "session"].Direction   =   ParameterDirection.Input;
    cmd.Parameters[ "islogined"].Direction   =   ParameterDirection.Input;
    cmd.Parameters[ "result"].Direction   =   ParameterDirection.Output;
    cmd.CommandType   =   CommandType.StoredProcedure;
    cmd.CommandText   =   "CheckOnline";
    cmd.ExecuteNonQuery();
    return  cmd.Parameters[ "result"].Value.ToString();

    }
    catch (Exception ex)
    {
    return "1";
    }
    finally
    {
    con.Close(); 
    }
      

  4.   

    上边的代码用Oracle9i和VS2003测试通过。