存储过程如下:
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
请问大家这是怎么回事啊!
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
请问大家这是怎么回事啊!
这是function
函数没这么调用过
程序中我一般都是用
构造 sql语句 select CheckOnline(输入参数) from dual;
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();
}