用户连续登录错误次数为3次时,现在用户在2分钟之内不允许继续登录,2分钟之后可以继续登录 :
今天复习了以前学过的一些知识,同时通过做作业自己又学到了新的知识:
下面就来分享一下我的作业中收获的知识,在这之前先看一下源码吧:
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.Data.SqlClient;
namespace 登录
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void btn_login_Click(object sender, EventArgs e)
{
string con = "data source=.\\SQLEXPRESS;integrated Security=true;Initial Catalog=Denglu"; //数据库连接字符串
SqlConnection sqlcnn = new SqlConnection(con);
sqlcnn.Open();
SqlCommand sqlcmm = sqlcnn.CreateCommand();
sqlcmm.CommandText = "select * from Login where Name=@name and Password=@password";
sqlcmm.Parameters.AddWithValue("@name", this.txtName.Text);
sqlcmm.Parameters.AddWithValue("@password",this.txtPassword.Text);
SqlDataAdapter adapter = new SqlDataAdapter(sqlcmm);
DataTable dt = new DataTable();
adapter.Fill(dt);
if (dt.Rows.Count==1)
{
success();
}
if (dt.Rows.Count <= 0)
{
ErrorMessage();
Errors();
}
else if (dt.Rows.Count > 1)
{
MessageBox.Show("有重复的用户");
}
sqlcmm.Dispose();
//关闭连接
//conn.Close();
//释放资源
sqlcnn.Dispose();
}
private void success()
{
string con = "data source=.\\SQLEXPRESS;integrated Security=true;Initial Catalog=Denglu";
SqlConnection sqlcnn = new SqlConnection(con);
sqlcnn.Open();
SqlCommand sqlcmm = sqlcnn.CreateCommand();
sqlcmm.CommandText = "select * from Login";
SqlDataReader reader = sqlcmm.ExecuteReader();
while (reader.Read())
{
if (Convert.ToInt32(reader["Error"])<3)
{
MessageBox.Show("登录成功!");
Errors1();
ErrorTime();
}
else if (Convert.ToInt32(reader["Error"])>=3&&(System.DateTime.Now - Convert.ToDateTime(reader["ErrorTime"].ToString())).TotalMinutes > 2) //判断系统时间比数据库时间相差的分钟数
{
MessageBox.Show("登录成功!");
Errors1();
ErrorTime();
}
else
{
ErrorMessage();
}
}
}
private void ErrorTime()
{
string con = "data source=.\\SQLEXPRESS;integrated Security=true;Initial Catalog=Denglu";
SqlConnection sqlcnn = new SqlConnection(con);
sqlcnn.Open();
SqlCommand sqlcmm = sqlcnn.CreateCommand();
sqlcmm.CommandText = "update Login set ErrorTime=GETDATE()";
int i = sqlcmm.ExecuteNonQuery();
sqlcmm.Dispose();
sqlcnn.Dispose();
}
private void Errors()
{
string con = "data source=.\\SQLEXPRESS;integrated Security=true;Initial Catalog=Denglu";
SqlConnection sqlcnn = new SqlConnection(con);
sqlcnn.Open();
SqlCommand sqlcmm = sqlcnn.CreateCommand();
sqlcmm.CommandText = "update Login set Error=Error+1";
int i = sqlcmm.ExecuteNonQuery();
sqlcmm.Dispose();
sqlcnn.Dispose();
}
private void Errors1()
{
string con = "data source=.\\SQLEXPRESS;integrated Security=true;Initial Catalog=Denglu";
SqlConnection sqlcnn = new SqlConnection(con);
sqlcnn.Open();
SqlCommand sqlcmm = sqlcnn.CreateCommand();
sqlcmm.CommandText = "update Login set Error=0";
int i = sqlcmm.ExecuteNonQuery();
sqlcmm.Dispose();
sqlcnn.Dispose();
}
private void ErrorMessage()
{
string con = "data source=.\\SQLEXPRESS;integrated Security=true;Initial Catalog=Denglu";
SqlConnection sqlcnn = new SqlConnection(con);
sqlcnn.Open();
SqlCommand sqlcmm = sqlcnn.CreateCommand();
sqlcmm.CommandText = "select * from Login";
SqlDataReader reader=sqlcmm.ExecuteReader();
while (reader.Read())
{
if (Convert.ToInt32(reader["Error"].ToString())<3)
{
MessageBox.Show("登录失败!");
}
else
{
MessageBox.Show("您的输入已经超过三次,请两分钟后再次输入!");
ErrorTime();
ErrorWait();
}
}
sqlcmm.Dispose();
sqlcnn.Dispose();
}
private void ErrorWait()
{
string con = "data source=.\\SQLEXPRESS;integrated Security=true;Initial Catalog=Denglu";
SqlConnection sqlcnn = new SqlConnection(con);
sqlcnn.Open();
SqlCommand sqlcmm = sqlcnn.CreateCommand();
sqlcmm.CommandText = "select * from Login";
SqlDataReader reader = sqlcmm.ExecuteReader();
while (reader.Read())
{
if ((System.DateTime.Now - Convert.ToDateTime(reader["ErrorTime"].ToString())).TotalMinutes > 2)
{
Errors1();
}
}
}
}
}