黑马程序员技术交流社区
标题:
ADO 登陆三次锁定的问题 重置错误次数的案例
[打印本页]
作者:
张振
时间:
2013-4-6 17:12
标题:
ADO 登陆三次锁定的问题 重置错误次数的案例
本帖最后由 张振 于 2013-4-7 00:32 编辑
先上代码,视频案例登陆的最后锁定的解决方案
因为看不到老师最后的演示
而我自己根据老师写的代码在运行一遍发现重置错误次数为0的方法执行不了
因为前面几次错误应该把错误次数修改到了4 每次运行都直接进入锁定状态
除非用户名输入错误才能不进入锁定 所以 重置错误次数为0的想法压根就没实现
也许是有些东西我还没琢磨透 所以请教下 怎么能重置
namespace 登陆练习1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void RaseErrorTimes()
{
/** using (SqlConnection conn = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\MyDB.mdf;Integrated Security=True;User Instance=True"))
{
conn.Open();**/这些是老师给的代码 就不用看了
using (SqlCommand updateCmd = conn.CreateCommand())
{
updateCmd.CommandText = "update T_Users Set ErrorTimes=ErrorTimes+1 where UserName=@USN";
updateCmd.Parameters.Add(new SqlParameter("USN", txtUsername.Text));
updateCmd.ExecuteNonQuery();
}
}
}
private void RasetErrorTimes()
{
using (SqlConnection conn = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\MyDB.mdf;Integrated Security=True;User Instance=True"))
{
conn.Open();
using (SqlCommand updateCmd = conn.CreateCommand())
{
updateCmd.CommandText = "update T_Users Set ErrorTimes=0 where UserName=@USN";
updateCmd.Parameters.Add(new SqlParameter("USN", txtUsername.Text));
updateCmd.ExecuteNonQuery();
}
}
}
private void btn1_Click(object sender, EventArgs e)
{
using (SqlConnection conn = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\MyDB.mdf;Integrated Security=True;User Instance=True"))
{
conn.Open();
using (SqlCommand cmd = conn.CreateCommand())
{
cmd.CommandText = "select * from T_Users where UserName=@USN";
cmd.Parameters.Add(new SqlParameter("USN", txtUsername.Text));
using (SqlDataReader reader = cmd.ExecuteReader())
{
if (reader.Read())
{
int errortimes = reader.GetInt32(reader.GetOrdinal("ErrorTimes"));
if (errortimes > 3)
{
MessageBox.Show("登陆次数超过三次,被锁定");
return;
}
string dbpassword = reader.GetString(reader.GetOrdinal("PassWord"));
if (dbpassword == txtPassword.Text)
{
MessageBox.Show("登陆成功");
RasetErrorTimes();
}
else
{
RaseErrorTimes();
MessageBox.Show("登录失败");
}
}
else
{
MessageBox.Show("用户名不存在");
return;
}
}
}
}
}
}
}
作者:
许庭洲
时间:
2013-4-6 18:33
if (errortimes > 3)
{
MessageBox.Show("登陆次数超过三次,被锁定");
RasetErrorTimes()
;//在登陆次数超过三次,被锁定后对数据库中的errortimes 清零操作,也就是在退出程序之前进行处理,保证每次登陆三次锁定功能实现
return;
}
作者:
熊薇
时间:
2013-4-6 19:54
if (errortimes > 3)
{
MessageBox.Show("登陆次数超过三次,被锁定");
return;
}
string dbpassword = reader.GetString(reader.GetOrdinal("PassWord"));
if (dbpassword == txtPassword.Text)
{
MessageBox.Show("登陆成功");
RasetErrorTimes();
}
else
{
RaseErrorTimes();
MessageBox.Show("登录失败");
}
复制代码
在这段代码中,由于先判断错误次数再进行错误次数的重置或增加,所以当你连错4次后Errortimes=4就跳出方法,后续代码不再执行这个用户名被锁定,无法再登陆了;
其实老师说的重置是指连续错误不到4次时,只要登陆成功就把之前记录的错误次数清零
作者:
张振
时间:
2013-4-6 23:11
许庭洲 发表于 2013-4-6 18:33
if (errortimes > 3)
{
MessageBox.Show("登陆次数超过三次,被锁定");
嗯 我试过了 的确可以
不过 为什么 我把 RasetErrorTimes();
放在
MessageBox.Show("用户名不存在");后面
RasetErrorTimes();
然后我用户名输错 让它清0 再故意密码出错三次 再用户名出错 确不能清零··
还是一直卡在 被锁的状态中 把RasetErrorTimes();这个放在最后的else里面 就不行了 求指教
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2