您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息

简单的oracle存储过程

2024/6/18 23:18:21发布20次查看
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();
                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=您还没登陆,请先登陆!);
                }
            }
        }
该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录 Product