验证输入用户名密码是否正确的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')在运行过程中会显示出来吗?(如果成功运行的话)
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')在运行过程中会显示出来吗?(如果成功运行的话)
解决方案 »
- 为什么不是c呢?
- 请教linux环境下oracle无法连接
- 请教一个高难度的SQL文
- orcle CONTAINS
- 求助,想用Oracle SQL developer进行SQL2000至oracle9i的数据迁移,但是oracle SQl developer 连接SQLSERVER总是不成功,请问有什么可以解决的办法
- 请问一下在oracle里 点样对我所建的表空间里的表进行操作呀?
- 数据恢复问题
- CREATE OR REPLACE PROCEDURE p_test(p_string in varchar2,cur_basic out cursor)是错的?
- oracle双机热备怎么装?急!!
- orcale 奇怪的问题?
- struts2+hibernate+spring中加入oracle(10g) 的CLOB字段出现的错误!
- PLSQL开发:如何动态读取字段值?
2、你建的是个过程不会有返回值的
你真该去补习下数据库的知识