当前位置:Gxlcms > mysql > 简单的oracle存储过程

简单的oracle存储过程

时间:2021-07-01 10:21:17 帮助过:2人阅读

1、 oracle 存储过程以及 asp.NET 中调用存储过程,实现一个简单的登录功能,只是作为学习的,所以处理可能不太合理。 ① 在 PL/SQLDeveloper 中编写存储过程 新建 Procedures ,一个简单的登录检查存储过程代码如下: createorreplaceprocedureuser_login(s

1、oracle存储过程以及asp.NET中调用存储过程,实现一个简单的登录功能,只是作为学习的,所以处理可能不太合理。

① PL/SQL Developer中编写存储过程

新建Procedures,一个简单的登录检查存储过程代码如下:

create or replace procedure user_login(sname in nvarchar2 ,spassword in nvarchar2, ReturnValue out number)

is --变量声明

Rname nvarchar2(20);

Rpassword nvarchar2(50);

begin

ReturnValue :=0; --赋初值

select username into Rname from userinfo where username=sname;

if Rname is not null then

ReturnValue:=1;--用户名存在

select userpassword into Rpassword from userinfo where username=sname and userpassword=spassword;

if Rpassword is not null then

ReturnValue:=2;--登陆成功

else ReturnValue:=1;--用户名存在,密码不正确

return ;

end if;

else ReturnValue:=0;--用户不存在

end if;

exception

when no_data_found then

DBMS_OUTPUT.put_line('没有找到数据');

end;

② PL/SQL DeveloperSQL窗口中调用存储过程

declare --变量声明

ReturnValue number(10);

begin

user_login('faith','faith',ReturnValue);

if ReturnValue=0 then

DBMS_OUTPUT.put_line('不存在此用户');

elsif ReturnValue=1 then

DBMS_OUTPUT.put_line('存在用户,但密码不正确');

else

DBMS_OUTPUT.put_line('登录成功!!!');

end if;

end;

③ VS2012中调用存储过程

OracleHelper.cs文件中:

public static void iRunProc(string procName, OracleParameter[] paras)

{

OracleConnection conn=new OracleConnection(OracleHelper.strConn);

if (conn.State == ConnectionState.Closed)

{

conn.Open();

}

OracleCommand cmd = new OracleCommand(procName, conn);

cmd.CommandType = CommandType.StoredProcedure;

if (paras != null)

{

for (int i = 0; i < paras.Length; i++)

{

OracleParameter parameter = paras[i];

cmd.Parameters.Add(parameter);

}

}

int result = cmd.ExecuteNonQuery();

cmd.ExecuteNonQuery();

}

DAL层的webtestDal.cs文件中

public static int loginByProc(string name,string password,string procName)

{

OracleParameter[] parameters ={

new OracleParameter("sname", OracleType.NVarChar, 20),

new OracleParameter("spassword", OracleType.NVarChar, 50),

new OracleParameter("ReturnValue", OracleType.Number, 10)

};

parameters[0].Value = name;

parameters[1].Value = password;

//parameters[2].Value = 0;

parameters[0].Direction = ParameterDirection.Input;

parameters[1].Direction = ParameterDirection.Input;

parameters[2].Direction = ParameterDirection.Output;

try

{

OracleHelper.iRunProc(procName, parameters);

int i = int.Parse(parameters[2].Value.ToString());

return i;

}

catch (Exception e)

{

throw e;

}

}

BLL层的webtestBll.cs文件中

public static int loginByProc(string name, string password, string procName)

{

return webtestDal.loginByProc(name, password, procName);

}

在页面代码的登录按钮事件中

protected void btnSubmit_Click(object sender, EventArgs e)
{
string name = this.txtName.Text.Trim();
string password = this.txtPassword.Text.Trim();
//调用存储过程,判断是否登录成功
if (webtestBll.loginByProc(name, password, "user_login")==2)//存储过程输出2表示登录成功
{//登录成功,保存用户名和密码的cookie
HttpCookie mycookie = new HttpCookie("loginCookie");
mycookie.Values.Add("cname", name);
mycookie.Values.Add("cpassword", password);
mycookie.Expires = DateTime.Now.AddHours(4);//cookie的生命期
Response.AppendCookie(mycookie);
Response.Redirect("userinfo.aspx");
}
else if (webtestBll.loginByProc(name, password, "user_login") == 1)
{
// Response.Write("