业务逻辑
1、根据用户名从数据库中取出一行数据,并根据数据库服务器时间,算出上次限制登录的时间和当前时间的时间间隔。
2、判断此用户时间间隔过了15分钟没有。如果没有,则给出禁止登录的提示;如果超过15分钟,则判断密码是否正确。
3、如果密码正确,提示登录成功并重置错误次数;如果密码不正确,则给出密码错误提示并更新数据库错误次数。并判断是否够3次了。
4、如果够3次的话,就记录错误时间,并清零错误次数。
代码实现
private void btnLogin_Click(object sender, EventArgs e)
{//获取界面的数据string uid = txtUserName.Text.Trim();string pwd = txtPwd.Text.Trim();//判断文本框是否为空if (uid == ""){MessageBox.Show("请输入用户名", "温馨提示");}else if (pwd == ""){MessageBox.Show("请输入密码", "温馨提示");}else{//将数据传到数据库进行检验using (SqlConnection conn = new SqlConnection("server=.;database=Test;uid=sa;pwd=jujianfei")){//根据数据库服务器时间,算出现在隔了多少分钟了SqlCommand cmd = new SqlCommand("select *,DATEDIFF(MINUTE,LastErrTime,GETDATE()) from LoginPractice where UserName=@uid", conn);//声明需要的参数把参数添加到命令对象的几个参数中cmd.Parameters.Add(new SqlParameter("@uid", uid));conn.Open();using (SqlDataReader dr = cmd.ExecuteReader()){if (dr.HasRows){dr.Read();//不管dr取到多少条数据,只取出前面第一行(调用一次read,就会读取一行,也只读一行)if (dr.GetInt32(5)<15) //先判断最后的错误事件,如果过了15分钟,就放过去了{MessageBox.Show("登录锁定时间未到,请稍后重试!");return;}if (dr[2].ToString() == pwd) {MessageBox.Show("登录成功!", "温馨提示");UserInfo.ReSetErrTimes(dr.GetInt32(0)); //登录成功后重置错误次数}else //如果密码不正确{MessageBox.Show("登录失败,密码错误!");//更新错误次数,这里是更新的数据库,dr里面的数据是在更新之前就取出来的了UserInfo.UpDateErrTimes(dr.GetInt32(0));if (dr.GetInt32(3)+1 == 3){UserInfo.UpDateLastErrTime(dr.GetInt32(0)); //记录最后错误的时间UserInfo.ReSetErrTimes(dr.GetInt32(0)); //重置错误次数}}}else{MessageBox.Show("用户不存在!", "温馨提示");}}}}
}
class UserInfo
{/// <summary>/// 更新错误次数/// </summary>/// <param name="id"></param>/// <returns></returns>public static int UpDateErrTimes(int id){ using(SqlConnection conn=new SqlConnection("server=.;database=Test;uid=sa;pwd=jujianfei")){using (SqlCommand cmd = new SqlCommand("update LoginPractice set ErrTimes = ErrTimes + 1 where id =" + id, conn)){conn.Open();return cmd.ExecuteNonQuery();}}}/// <summary>/// 错误次数清零/// </summary>/// <param name="id"></param>/// <returns></returns>public static int ReSetErrTimes(int id){using (SqlConnection conn = new SqlConnection("server=.;database=Test;uid=sa;pwd=jujianfei")){using (SqlCommand cmd = new SqlCommand("update LoginPractice set ErrTimes = 0 where id = " + id, conn)){conn.Open();return cmd.ExecuteNonQuery();}}}/// <summary>/// 更新错误登录时间/// </summary>/// <param name="id"></param>/// <returns></returns>public static int UpDateLastErrTime(int id){using (SqlConnection conn = new SqlConnection("server=.;database=Test;uid=sa;pwd=jujianfei")){using (SqlCommand cmd = new SqlCommand("update LoginPractice set LastErrTime=getdate() where id=" + id, conn)){conn.Open();return cmd.ExecuteNonQuery(); }}}
}
实例下载