用户登陆限时,错误登陆次数不超过3次(winForm)
来源:互联网 发布:fc2最新视频域名 编辑:程序博客网 时间:2024/06/03 22:02
using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;using System.Configuration;using System.Data.SqlClient;namespace denglu1._0{ public partial class Form1 : Form { string str = string.Empty; int errorcount = 0; public Form1() { InitializeComponent(); } private void btn_login_Click(object sender, EventArgs e) { str = ConfigurationManager.ConnectionStrings["strcnn"].ConnectionString; int sqlerror = GetError();//获取当期用户的登陆次数,以便进行比较 if (sqlerror >= 3) { DateTime errortime = GetErrorTime(); //Subtract函数减去指定时间,返回一个时间差,时间的格式可以是分钟也可以是秒、小时 TimeSpan span = DateTime.Now.Subtract(errortime); double minute = span.TotalMinutes;//取时间间隔的分钟数 // double m = span.TotalSeconds; if (minute < 2) { MessageBox.Show("您已经连续3次输入密码错误,系统已被锁定,请两分钟之后再次重试"); //后面的代码不执行 return; } else { errorcount = 0; UpdateError(errorcount); } } errorcount = GetError(); DataTable dt= GetDataTable(); if (dt .Rows .Count <=0) { errorcount++; UpdateError(errorcount); UpdateErrorTime(); MessageBox.Show("输入的用户名和密码不正确,请重新输入"); } else if (dt.Rows.Count > 1) { MessageBox.Show("系统出现故障,请与管理员联系"); } else {//登陆成功后,错误次数清零 errorcount = 0; UpdateError(errorcount ); MessageBox.Show("登陆成功"); } } //更改用户登陆错误的当前时间 private void UpdateErrorTime() { SqlConnection sqlcnn = new SqlConnection(str); SqlCommand sqlcmm = new SqlCommand(); sqlcnn.Open(); sqlcmm.Connection = sqlcnn; sqlcmm.CommandText = "update users set errortime=@errortime where username=@username"; sqlcmm.Parameters.AddWithValue("@errortime", DateTime.Now); sqlcmm.Parameters.AddWithValue("@username", this.txt_name.Text); sqlcmm.ExecuteNonQuery(); } //获取当前用户错误登陆时的时间 private DateTime GetErrorTime() { SqlConnection sqlcnn = new SqlConnection(str); SqlCommand sqlcmm = new SqlCommand(); sqlcnn.Open(); sqlcmm.Connection = sqlcnn; sqlcmm.CommandText = "select errortime from users where username=@username"; sqlcmm.Parameters.AddWithValue("@username", this.txt_name.Text); //返回一行一列 object obj = sqlcmm.ExecuteScalar(); return Convert.ToDateTime(obj); } //获取用户登陆的错误次数 private int GetError() { SqlConnection sqlcnn = new SqlConnection(str ); SqlCommand sqlcmm = new SqlCommand(); sqlcnn.Open(); sqlcmm.Connection = sqlcnn; sqlcmm.CommandText = "select error from users where username=@username"; sqlcmm.Parameters.AddWithValue("@username",this .txt_name .Text ); object obj= sqlcmm.ExecuteScalar(); if (DBNull.Value.Equals(obj) == true)//判断下,若obj的值为空,则返回0 { return 0; } else { return Convert.ToInt32(obj ); } sqlcmm.Dispose(); sqlcnn.Close(); sqlcnn.Dispose(); } //更改相应用户的登陆错误次数 private void UpdateError(int errorcount) { SqlConnection sqlcnn = new SqlConnection(str); SqlCommand sqlcmm = new SqlCommand(); sqlcmm.Connection = sqlcnn; sqlcnn.Open(); sqlcmm.CommandText = "update users set error=@error where username=@username"; sqlcmm.Parameters.AddWithValue("@error",errorcount ); sqlcmm.Parameters.AddWithValue("username",this .txt_name .Text ); sqlcmm.ExecuteNonQuery(); sqlcmm.Dispose(); sqlcnn.Close(); sqlcnn.Dispose(); } //根据用户输入的用户和密码从数据库中查询相对应的数据集 private DataTable GetDataTable() { SqlConnection sqlcnn = new SqlConnection(str); SqlCommand sqlcmm = new SqlCommand(); sqlcmm.Connection = sqlcnn; sqlcmm.CommandText = "select * from users where username=@username and password=@pw"; sqlcmm.Parameters.AddWithValue("@username", this.txt_name.Text); sqlcmm.Parameters.AddWithValue("@pw", this.txt_pw.Text); SqlDataAdapter sda = new SqlDataAdapter(sqlcmm ); DataTable dt = new DataTable(); sda.Fill(dt ); sqlcmm.Dispose(); sqlcnn.Close();//关闭连接 sqlcnn.Dispose();//释放资源 return dt; } }}代码:要有一定的思路注意:1.多用户登陆时,用户错误登陆次数的问题2.用户登陆成功后,要把错误次数清零3.用户登陆的错误次数超过三次后,不能再累加次数,这里要限制。4.当错误的登陆次数大于3次且在限定的时间之内时,不能再执行下面的语句。。。