private void btnLogin_Click(object sender, EventArgs e)
{
string loginId = txtLoginId.Text.Trim();
string loginpwd = txtLoginPwd.Text.Trim();
if (!CheckUserError(loginId))
{
MessageBox.Show("对不起,请15分钟后在尝试!");
}
else
{
string constr = "Data Source=zxtiger;Initial Catalog=itcastcn;User Id=sa;Password=124";
using (SqlConnection con = new SqlConnection(constr))
{
string sql = "select count(*) from TblSupperUsers where loginId=@UserName and loginpwd=@UserPwd";
using (SqlCommand cmd = new SqlCommand(sql, con))
{
cmd.Parameters.Add(new SqlParameter("@UserName", SqlDbType.VarChar, 100)).Value = loginId;
cmd.Parameters.Add(new SqlParameter("@UserPwd", SqlDbType.VarChar, 100)).Value = loginpwd;
if (con.State == ConnectionState.Closed)
{
con.Open();
}
int r = Convert.ToInt32(cmd.ExecuteScalar());
if (r > 0)
{
//如果登录成功,则将错误次数清零。
MessageBox.Show("登录成功!");
ClearErrorTimes(loginId);
}
else
{
//如果登录失败
//1.将本次登录时间记录到数据库中。
string recordTimeSQL = "update TblSupperUsers set lastErrorTime=getdate(),loginErrorTimes=loginErrorTimes+1 where loginId=@UserName";
//2.将ErrorTimes加1
//设置Command对象的SQL语句
cmd.CommandText = recordTimeSQL;
//清空原来的参数
// cmd.Parameters.Clear();
//删除@UserPwd参数。
cmd.Parameters.RemoveAt(1);
cmd.ExecuteNonQuery();
MessageBox.Show("登录失败!");
}
}
}
}
}
/// <summary>
/// 检查用户是否可以继续尝试登录
/// </summary>
/// <param name="loginid"></param>
/// <returns></returns>
private bool CheckUserError(string loginid)
{
bool isOk = false;
string constr = "Data Source=zxtiger;Initial Catalog=itcastcn;User Id=sa;Password=124";
using (SqlConnection con = new SqlConnection(constr))
{
string sql = "select loginErrorTimes,ETime=datediff(minute,lastErrorTime,getdate()) from TblSupperUsers where loginid=@UserName";
using (SqlCommand cmd = new SqlCommand(sql, con))
{
cmd.Parameters.Add(new SqlParameter("@UserName", SqlDbType.VarChar, 100)).Value = loginid;
con.Open();
SqlDataReader reader = cmd.ExecuteReader();
using (reader)
{
if (reader.HasRows)
{
if (reader.Read())
{
int times = reader.GetInt32(0);
int interval = reader.GetInt32(1);
if (times >= 3 && interval < 15)
{
isOk = false;
}
else
{
isOk = true;
}
}
}
}
}
}
return isOk;
}
//将用户的登录错误次数清零
private void ClearErrorTimes(string loginid)
{
string constr = "Data Source=zxtiger;Initial Catalog=itcastcn;User Id=sa;Password=124";
using (SqlConnection con = new SqlConnection(constr))
{
string sql = "update TblSupperUsers set loginErrorTimes=0 where loginid=@UserName";
using (SqlCommand cmd = new SqlCommand(sql, con))
{
cmd.Parameters.Add(new SqlParameter("@UserName", SqlDbType.VarChar, 100)).Value = loginid;
if (con.State == ConnectionState.Closed)
{
con.Open();
}
cmd.ExecuteNonQuery();
}
}
}
简单的窗体登陆功能(记录错误次数)
最新推荐文章于 2020-11-16 22:13:01 发布