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次且在限定的时间之内时,不能再执行下面的语句。。。
本文档为【c#登录窗体密码错误三次关闭窗体】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑,
图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。