ASP.NET调用存储过程验证用户登录

    存储过程即存储在DBMS中的SQL语句,使用存储过程好处多多,模块化设计、提高性能、减少网络流量如此云云。最近有时间,自己琢磨着写了个ASP.NET调用存储过程的demo,其实网上已有很多相关的代码,这里我只是按自己的思路改动下。整个demo是相当的简单,用AJAX验证用户登陆。

1)首先我们需要建一张用户表


Id是主键,只验证登录,有UserName和Password就足够了。


2)在表中任意写入几条数据



3)写个简单的存储过程

CREATE PROCEDURE P_Login
@userName varchar(50),
@pwd varchar(50),
@count int output
AS
set @count =(select count(*) from T_Users where UserName=@userName and Password=@pwd)

存储过程的名字是P_Login,有三个参数,@userName和@pwd是输入参数,即用户名和密码,@count是输出参数,为返回查询的记录数。在程序中对输入参数和输出参数的处理稍有区别,要特别注意。


4)在新建的ASP.NET项目中,新建一个一般处理程序,取名LoginHandler.ashx(名字随意),完整代码如下:

public class LoginHandler : IHttpHandler
    {
        public void ProcessRequest(HttpContext context)
        {
            context.Response.ContentType = "text/plain";

    string userName=context.Request["userName"];  //获取客户端传来的 用户名
            string pwd=context.Request["pwd"];   //获取客户端传来的密码
            int count=0;   //执行存储过程返回的记录数存在这个变量


            string connStr = ConfigurationManager.ConnectionStrings["UsersConnectionString"].ToString(); //获取连接字符串
            using (SqlConnection conn=new SqlConnection(connStr)) //新建一个数据库连接
            {
                conn.Open();
                using (SqlCommand comm=new SqlCommand("P_Login",conn)) //新建一个 SqlCommand, P_Login为存储过程名,conn为数据库连接
                {
                    comm.CommandType = CommandType.StoredProcedure; //指定命令的类型为存储过程
                    SqlParameter parUserName = new SqlParameter("@userName", userName); //new一个输入参数传用户名
                    SqlParameter parPwd=new SqlParameter("@pwd",pwd); //new一个输入参数传密码
                    SqlParameter parCount = new SqlParameter("@count",SqlDbType.Int); //new一个输出参数接收执行存储过程后返回的记录数

    //将三个参数都添加到命令
                    comm.Parameters.Add(parUserName);
                    comm.Parameters.Add(parPwd);
                    comm.Parameters.Add(parCount);
                    comm.Parameters["@count"].Direction = ParameterDirection.Output; //对输出参数做特殊处理,即设置参数方向Direction 
                    comm.ExecuteNonQuery(); //执行这个存储过程
                    count = (int)comm.Parameters["@count"].Value; //执行的结果赋给count
                    context.Response.Write(count); //最后向客户端输出count
                }
            }
        }


        public bool IsReusable
        {
            get
            {
                return false;
            }
        }
    }


4)登录页面

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
    <script src="../Scripts/jquery-1.4.1.js" type="text/javascript"></script>
    <script type="text/javascript">
        $("document").ready(function () {
            $("#btnLogin").click(function () { //登录按钮的click事件
                var userName = $("#txtUserName").val(); //获取用户名
                var pwd = $("#txtPwd").val(); //获取密码
                if (userName == '' || pwd == '') { //若有为空的则放回
                    alert("用户名或密码不能为空!");
                }

//post请求LoginHandler.ashx,传入参数 userName和 pwd ,这里要注意一般处理程序所在的路径,不要犯低级错误

//textStatus是 一般处理程序返回的状态,为“ success ”说明成功,data是返回的数据,这里应该是存储过程执行的结果

                $.post("../LoginHandler.ashx", { "userName": userName, "pwd": pwd }, function (data, textStatus) {
                    if (textStatus == "success") {
                        if (data > 0) {
                            alert("登录成功!");
                        }
                        else alert("登录失败!");
                    }
                });
            });
        });
    </script>
</head>
<body>
    用户名:<input id="txtUserName" type="text" /><br />
    密 码:<input id="txtPwd" type="text" /><br />
    <input id="btnLogin" type="button" value="确定" />
</body>
</html>


5)执行结果如下


    很简单,需要注意的是输出参数需要设置参数的方向为输出,“方向”是我意会的不一定准确,差不多是那个意思。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值