验证输入用户名密码是否正确的oracle存储过程如下:
create or replace procedure PRC_STAT_LOGIN
(v_username in users.username%TYPE,
  v_password in USERS.PASSWORD%TYPE)
IS
begin
  declare 
    iCount1   number;
    iCount2   number;
    iUserlevel   varchar2(20);
    --声明游标  查询出每个每个用户的信息
    cursor cursor_login is select *  from users where username = v_username and password = v_password;
    noPassword  EXCEPTION;
  begin
    if not cursor_login%isopen then
           open cursor_login;
     end if;
        
      select count(*) into iCount1 from users where username = v_username ;
      
      if iCount1 > 0 then
         begin
              select count(*) into iCount2 from users where username = v_username and password = v_password;
              if iCount2 > 0 then--如用户名、密码都正确
                  select user_level into iUserlevel from users where username = v_username and password = v_password;
                  if iUserlevel = 'U' then--如用户名、密码都正确,但是级别不够,管理员是A,一般用户是U,那么返回”级别不够”
                     DBMS_OUTPUT.put_line('Low level!') ;   
                  else   --正常登录,返回”成功登陆”
                     DBMS_OUTPUT.PUT_LINE('Login successfully!');
                  END IF;
              else --如用户名存在,密码错误
                   RAISE noPassword;
              END IF;
         end;
      else
           DBMS_OUTPUT.put_line('The user is not existed!');--如用户名不存在,返回”用户名不存在”
      end if;
    
    exception
        when NO_DATA_FOUND THEN
          DBMS_OUTPUT.put_line('No data found!');
        when noPassword THEN  --如用户名存在,密码错误,返回”密码错误”
          DBMS_OUTPUT.PUT_LINE('PASSWORD ERROR');
      close cursor_login;   
   end;
end PRC_STAT_LOGIN;
经测试,在command Window里运行时正确的,但是我在C#中建立一个控制台解决方案,在两个textbox中分别输入用户名和密码,但是结果总是出现异常,我想应该问题是出在C#语句里了,请各位帮看下:
private void btnLogin_Click(object sender, EventArgs e)
        {
            try
            {
                OracleConnection conn = new OracleConnection("Data Source=ora10;User Id=student;Password=111;");
                OracleCommand cmd = new OracleCommand();
                cmd.Connection = conn;
                cmd.CommandText = "prc_stat_login";
                cmd.CommandType = CommandType.StoredProcedure;                //cmd.Parameters.Add(txtUserName.Text, OracleType.Clob).Direction = ParameterDirection.Output;
                //cmd.Parameters.Add(txtPassword.Text, OracleType.Clob).Direction = ParameterDirection.Output;
                cmd.Parameters.Add(":username",OracleType.NVarChar, 20).Value = txtUserName.Text;
                cmd.Parameters.Add(":password",OracleType.NVarChar, 20).Value = txtPassword.Text;                conn.Open();
                cmd.ExecuteNonQuery();
                conn.Close();                lblError.Text = "successful";
            }
            catch
            {
                lblError.Text = "fail";                
            }
        }
运行结果总是显示fail主要是不清楚cmd.Parameters.Add()代码不知道怎么写,以上那种是对的?另外,在存储过程中输出的结果,比如说DBMS_OUTPUT.PUT_LINE('PASSWORD ERROR')在运行过程中会显示出来吗?(如果成功运行的话)