简单的窗体登陆功能(记录错误次数)

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();
	}
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值