ADO之密码验证--3次错误就锁定『改进』
2024-10-20 08:47:01
这里使用了SqlHelper,简化程序
自己写一个SqlHelper,把数据库的连接等都写到里面去。
首先把连接字符串添加到配置文件里去,右键解决方案-->添加新建项-->选择应用程序配置文件
添加一个下字段,红色部分为新添加的代码,name字段一定要写,下面的使用就是靠这个关键字
<?xml version="1.0"?>
<configuration>
<connectionStrings>
4 <add name="dbconn"
5 connectionString="Data Source=.;Initial Catalog=Test1;User ID=sa;Password=123456"/>
6
7 </connectionStrings>
</configuration>
在sqlHelper类中添加一个变量,并定义函数
private static string conStr = ConfigurationManager.ConnectionStrings["dbConn"].ConnectionString; public static DataTable ExecuteDataTable(string sql, params SqlParameter[] parameters)
{
using (SqlConnection conn = new SqlConnection(conStr))
{
conn.Open();
using (SqlCommand cmd = conn.CreateCommand())
{
cmd.CommandText = sql;
cmd.Parameters.AddRange(parameters);
DataSet dataset = new DataSet();
SqlDataAdapter apdater = new SqlDataAdapter(cmd);
apdater.Fill(dataset);
return dataset.Tables[];
}
}
}
这些操作只是把代码给提出来,不用每次使用都去写下所有代码。
然后就是函数响应了,非常简洁
private void btn_Login_Click(object sender, RoutedEventArgs e)
{
if (tb_UserID.Text.Length <= )
{
MessageBox.Show("请输入用户名");
return;
}
if (pwdPassword.Password.Length <= )
{
MessageBox.Show("请输入密码");
return;
} DataTable table = SqlHelper.ExecuteDataTable("select * from USERINFO where UserID=@user", new SqlParameter("@user", tb_UserID.Text)); if (table.Rows.Count <= )
{
MessageBox.Show("用户不存在");
return;
}
//要对不可能发生的情况进行做处理,断言 Assert
else if (table.Rows.Count > )
{
throw new Exception("用户名重复!");
} DataRow row = table.Rows[];
string dbPassword = row["Password"].ToString();
long id = (long)row["ID"];//获取ID,这是数据库新增加的一个标识字段,没有实际意义,但可以用来数据判断
int errorTimes = (int)row["ErrorTimes"];//获取错误次数
if (errorTimes >= )
{
MessageBox.Show("输入次数过多,用户已锁定");
return;
}
if (dbPassword != pwdPassword.Password)
{
//把登录用户的错误次数加一
SqlHelper.ExecuteNonQuery("update USERINFO set ErrorTimes=ErrorTimes+1 where ID=@id"
,new SqlParameter("@id",id)); MessageBox.Show("密码错误!");
}
else
{
MessageBox.Show("登录成功!");
}
}
感觉这样一写,比上个程序简单很多,bug也要少很多。
最新文章
- GO语言总结(4)——映射(Map)
- 购物车相关 js
- Dojo特效(翻译)
- spring+struts2的jar
- UICollectionView(集合视图)以及自定义集合视图
- 开源中国(oschina)的Git托管
- linux 中如何修改时间 date
- 20135326、20135303-linux实验三实验报告
- 由外边距合并到BFC
- NeHe OpenGL教程 第十二课:显示列表
- set gameobject Icons by Script
- android 在新建短信时,加入名称为";,";(英文逗号)的联系人时,应用崩溃的修改
- TI C66x DSP 系统events及其应用 - 5.8(ISTP)
- Spring MVC使用样例
- 【Python全栈-HTML】HTML引入文件的绝对路径、相对路径、根目录
- jQuery中删除方法empty(),remove()和detach()的区别
- SAP MM PO 中的Delivery Date并非保存在EKPO表里
- PLSQL 汉化
- nodejs设置NODE_ENV环境变量(2)
- zabbix web 登录成功后提示(红色提示):zabbix server is not running:the information displayed may not be current
热门文章
- c++编写递归函数char *itostr (int n,char *string),该函数将整数n转换为十进制表示的字符串。
- 详细讲解:yii 添加外置参数 高级版本
- pta 编程题16 Saving James Bond - Easy Version
- 同余问题(一)——扩展欧几里得exgcd
- Problem D: 双向冒泡排序
- javaweb基础(26)_jsp标签库开发二
- CUDA &;&; GPU中dim3介绍
- github不能加载css、js解决办法
- 使TextBox的内容换行
- 高性能可扩展MySQL数据库设计及架构优化 电商项目(慕课)第3章 MySQL执行计划(explain)分析