好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

简单的oracle存储过程

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 Developer 的 SQL 窗口中调用存储过程

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(" alert('密码错误');window.location.href='userLogin.aspx'; ");
RegisterClientScriptBlock("msg", " alert(\"密码错误!\"); ");
}
else
RegisterClientScriptBlock("msg", " alert(\"无法认证!\"); ");
}

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=您还没登陆,请先登陆!");
}
}
}

查看更多关于简单的oracle存储过程的详细内容...

  阅读:48次