我想弄清楚Oracle存储过程,因为我是Oracle 11G的新手
这是我的MS SQL存储过程
Create procedure LoadLoginData
@username varchar(50),
@password varchar(50)
as
begin
select * from Employee_table where
username = @username and password = @password
end
当我使用Oracle Scratch Editor时,得到此输出
CREATE OR REPLACE PROCEDURE LoadLoginData
(
v_username IN VARCHAR2 DEFAULT NULL ,
v_password IN VARCHAR2 DEFAULT NULL ,
cv_1 OUT SYS_REFCURSOR
)
AS
BEGIN
OPEN cv_1 FOR
SELECT *
FROM employee_table
WHERE Username = v_username
AND PASSWORD = v_password ;
END;
当我在C#中调用Oracle过程时,它将引发此异常
“ ORA-06550:第1行,第7列:PLS-00306:在调用'LOADLOGINDATA'时参数或参数类型错误ORA-06550:第1行,第7列:”
知道如何解决这个问题吗?
我的C#代码
OracleConnection ocon = new OracleConnection(orastr);
OracleCommand ocmd = new OracleCommand("LoadLoginData", ocon);
ocmd.CommandType = CommandType.StoredProcedure;
ocon.Open();
try
{
ocmd.Parameters.Add("Username", nBo.username);
ocmd.Parameters.Add("Password", nBo.password);
OracleDataAdapter oda = new OracleDataAdapter(ocmd);
DataSet ds = new DataSet();
oda.Fill(ds);
DataTable dt = ds.Tables[0];
return dt;
}
catch (Exception ex)
{
throw ex;
}
finally
{
ocon.Dispose();
ocon.Close();
nBo = null;
}
您的过程具有2个输入参数和1个输出参数....您的C#代码具有2个输入参数但没有输出参数
在Java级别,我将以下面的方式处理它:
callableStatement.registerOutParameter(3, OracleTypes.CURSOR);
在C#中,请寻找相同的东西(如何处理)...我建议
ocmd.Parameters.Add("cv_1", OracleDbType.RefCursor, ParameterDirection.Output);
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句