欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  数据库

简单的oracle存储过程

程序员文章站 2022-05-27 22:00:31
...

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

{

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("");
RegisterClientScriptBlock("msg", "");
}
else
RegisterClientScriptBlock("msg", "");
}

2、登录之后,传递cookie

先获取登录界面的cookie值(代码如上)

将登录页面的cookie值传给跳转页面

protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
DataTable dt = webtestBll.getAll();
userInfoGrid.DataSource = dt;
if (dt != null)
userInfoGrid.DataBind();

HttpCookie mycookie = null;
if (Request.Cookies.Get("loginCookie") != null)
{//当用户登录了时,获取页面传来的cookie值
mycookie = Request.Cookies.Get("loginCookie");
this.txtLoginName.Text = mycookie.Values["cname"].ToString();
this.txtLoginPassword.Text = mycookie.Values["cpassword"].ToString();
}
else
{//cookie过期或者没登录
Response.Redirect("userLogin.aspx?errorMsg=您还没登陆,请先登陆!");
}
}
}