用户登陆限时,错误登陆次数不超过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次且在限定的时间之内时,不能再执行下面的语句。。。