Oracle中的存储过程使用Select Command和Variables给出错误

时间:2016-08-02 11:06:53

标签: c# oracle stored-procedures plsql

我正在尝试找出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;
        }

1 个答案:

答案 0 :(得分:2)

您的程序 2输入 参数和 1输出 参数。 ..您的 C#代码有 2输入 参数但 无输出 参数

Java 级别,我会以下面的方式处理它:

<强> callableStatement.registerOutParameter(3, OracleTypes.CURSOR);

C#中,请查找相同的内容(如何处理)...我建议

<强> ocmd.Parameters.Add("cv_1", OracleDbType.RefCursor, ParameterDirection.Output);