Home  >  Article  >  Database  >  简单的oracle存储过程

简单的oracle存储过程

WBOY
WBOYOriginal
2016-06-07 15:38:36761browse

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", "<script>alert(\"密码错误!\");</script>");
            }
            else
                RegisterClientScriptBlock("msg", "<script>alert(\"无法认证!\");</script>");
        }

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

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn