勿谓今日不学而有来日,勿谓今年不学而有来年。
日月逝矣,岁不我延。

STUMS系统登录逻辑 一种简单的实现

一个Conn类

用于创建数据库连接和查询操作。

这一个单纯以学习ASP.NET Web中数据库连接查询操作的小段代码,可以说成以“VC”模式(因为没有使用模型)实现的。

接下来有两种处理这个类的方向:

  1. 完善Conn类,借鉴Jsp中的Conn Bean来增加方法。
  2. 舍弃该类,采用MVC模式设计完整的模型和控制器。

而以上两种处理方式我应该会都去实现一下,前者同样是为了学习数据库操作,而后者应该服务于STUMS的整个设计。

Conn的实现

  1. 获取连接字符串
  2. 创建连接对象
  3. 创建CreateConn(数据库连接)方法
  4. 创建ExecuteReader(查询,返回一个Datatable)方法
using System.Data;
using System.Data.SqlClient;
using System.Configuration;

/// <summary>
/// 创建、查询
/// </summary>
namespace stums.code
{
    public class Conn
    {
        //调用连接字符串
        private static string connstr = ConfigurationManager.ConnectionStrings["ConnString"].ToString();
        public static string Connstr
        {
            get
            {
                return connstr;
            }
        }

        SqlConnection conn = null;

        /// <summary>
        /// 创建连接
        /// </summary>
        public void CreateConn()
        {
            if (conn == null)
            {
                conn = new SqlConnection(Connstr);
            }
        }

        /// <summary>
        /// 查询
        /// </summary>
        /// <param name="SqlString">Sql语句或存储过程</param>
        /// <returns>DataTable 数据源</returns>
        public DataTable ExecuteReader(string SqlString)
        {
            //打开数据库
            if (conn != null)
            {
                conn.Open();
            }else
            {
                CreateConn();
                conn.Open();
            }
            SqlDataAdapter sda = new SqlDataAdapter(SqlString, conn);
            DataTable dt = new DataTable();
            sda.Fill(dt);
            //SqlCommand cmd = new SqlCommand(SqlString, conn);
            //SqlDataReader dr = cmd.ExecuteReader();
            return dt;
        }
    }
}

Login.aspx.cs

作为Login.aspx的后台代码,自然是处理前台的交互。

在第一次编写,采用了类似简单登录系统的实现 基于MVC设计模式中所采用的方式来获取数据中的用户名与密码,这就导致了一个很严重的问题:多用户时,无法正常登陆(没错,简单登录系统的实现 基于MVC设计模式中的设计有bug,我会尽快修改)。

一种解决办法是采用数据库条件查询,用StringBuffer拼接条件查询语句然后接收结果,或者捕获异常。

在这里我一种较为复杂的方式实现(后期改为前者):使用HashTable将所用的数据库数据全部保存起来,然后在先判断用户输入的userName在HashTable中是否包含相应的Key,上述为true的条件下在判断Key对应的Value是否与用户输入相匹配。

using stums.code;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace stums
{
    public partial class login : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {

        }

        protected void Img_Vcode_Click(object sender, ImageClickEventArgs e)
        {
            Img_Vcode.ImageUrl = "from/Vcode.jspx";
        }

        protected void Btn_login_Click(object sender, EventArgs e)
        {
            //TODO
            Conn conn = new Conn();
            string sql = "SELECT [userName],[passWord] FROM [dbo].[user]";
            DataTable dt = conn.ExecuteReader(sql);
            //获取用户Username&Password存入htUsers
            Hashtable htUsers = new Hashtable();
            foreach (DataRow row in dt.Rows)
            {
                htUsers.Add(row["userName"].ToString(), row["passWord"].ToString());
            }

            string vCode = Session["CheckCode"].ToString();//获取验证码
            if (htUsers.ContainsKey(Username.Text))
            {
                if (htUsers[Username.Text].ToString() == Password.Text)
                {
                    //创建一个session
                    Session["userName"] = Username.Text;
                    Session["passWord"] = Password.Text;
                    if (Vcode.Text.Trim().ToUpper() == vCode.ToUpper())
                    {
                        Response.Redirect("~/from/Main.aspx");
                    }
                    else
                    {
                        ScriptManager.RegisterStartupScript(this.Page, this.GetType(), "Startup", "alert('验证码输入错误,请重新输入!');", true);
                    }
                }
                else
                {
                    ScriptManager.RegisterStartupScript(this.Page, this.GetType(), "Startup", "alert('密码错误!');", true);
                }
            }
            else
            {
                ScriptManager.RegisterStartupScript(this.Page, this.GetType(), "Startup", "alert('用户名错误!');", true);
            }
        }
    }
}

简单逻辑不再赘述。

开发目录:

赞(0)
未经允许不得转载:喋喋不休 » STUMS系统登录逻辑

评论 抢沙发

评论前必须登录!

 

精品网站

有券无忧电脑壁纸精选