由于对象在C#with oracle数据库中的当前状态,操作无效

由于对象在C#with oracle数据库中的当前状态,操作无效,c#,asp.net,oracle,C#,Asp.net,Oracle,我犯了一个错误 由于对象的当前状态,操作无效。 oracle Sqldeveloper代码:(pl/sql) 任何人都可以解决我的问题。由于对象的当前状态,操作无效。 或者建议修改代码。我想从存储过程返回值。过程不返回任何内容;有两个OUT参数将值传递回调用方,但没有返回类型。但是您似乎在调用Login_Func,而不是您显示的Login_。为什么您要以纯文本形式存储密码并从数据库中检索它?这应该是你纠正的第一件事;有两个OUT参数将值传递回调用方,但没有返回类型。但是您似乎在调用Login_F

我犯了一个错误 由于对象的当前状态,操作无效。 oracle Sqldeveloper代码:(pl/sql)

任何人都可以解决我的问题。由于对象的当前状态,操作无效。
或者建议修改代码。我想从存储过程返回值。

过程不返回任何内容;有两个OUT参数将值传递回调用方,但没有返回类型。但是您似乎在调用Login_Func,而不是您显示的Login_。为什么您要以纯文本形式存储密码并从数据库中检索它?这应该是你纠正的第一件事;有两个OUT参数将值传递回调用方,但没有返回类型。但是您似乎在调用Login_Func,而不是您显示的Login_。为什么您要以纯文本形式存储密码并从数据库中检索它?这应该是你纠正的第一件事。
create or replace PROCEDURE LOGIN_PROCEED 
(P_id  IN LOGIN.ID%TYPE,
P_NAME OUT LOGIN.USERNAME%TYPE,
P_PSWD OUT LOGIN.PASSWORD%TYPE
)
AS
BEGIN 
IF P_id=2 THEN
     SELECT USERNAME, PASSWORD
     INTO  P_NAME,  P_PSWD  from  LOGIN WHERE ID = P_id;  
     DBMS_OUTPUT.PUT_LINE('Correct' );
 ELSE
    DBMS_OUTPUT.PUT_LINE('Wrong username or password' );
 END IF;   
 END LOGIN_PROCEED;

 try
    {
        _oracon.Open();
        OracleCommand cmd = _oracon.CreateCommand();
        cmd.CommandType = CommandType.StoredProcedure;
        cmd.CommandText = "Login_Func";           
                       cmd.Parameters.Add("Return_Value",OracleDbType.NVarchar2,ParameterDirection.ReturnValue);
        OracleParameter P_ID = new OracleParameter();
        P_ID.OracleDbType = OracleDbType.NVarchar2;
        P_ID.Direction = ParameterDirection.Input;
        P_ID.Value = 1;
        cmd.Parameters.Add(P_ID);

        OracleParameter P_name = new OracleParameter();
        P_name.OracleDbType = OracleDbType.Varchar2;
        P_name.Direction = ParameterDirection.Output;
        P_name.Value = txt_username.Text;
        cmd.Parameters.Add(P_name);

        OracleParameter P_Pswd = new OracleParameter();
        P_Pswd.OracleDbType = OracleDbType.Varchar2;
        P_Pswd.Direction = ParameterDirection.Output;
        P_Pswd.Value = txt_password.Text;
        cmd.Parameters.Add(P_Pswd);

        dr = cmd.ExecuteReader();
        if (dr.Read())
        {
            string a = dr[0].ToString();
            Response.Redirect("~/Transactions/intrafundtransfer.aspx");
        }
    }
    catch (Exception ex)
    {
        throw (ex);
    }
    finally
    {
        lbl_msg.Text = dr[0].ToString();
    }
    _oracon.Close();