ADO之密码验证--3次错误就锁定『改进』
这里使用了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也要少很多。
ADO之密码验证--3次错误就锁定『改进』的更多相关文章
- ADO之密码验证--3次错误就锁定
这个程序是那vs2010下写的,C#语言.数据库是sql server 2008 首先在数据库中新建一个数据库Test1,在数据库中新建一个表用来保存用户名和密码USERINFO, CREATE TA ...
- 【WCF】使用“用户名/密码”验证的合理方法
我不敢说俺的方法是最佳方案,反正这世界上很多东西都是变动的,正像老子所说的——“反(返)者,道之动”.以往看到有些文章中说,为每个客户端安装证书嫌麻烦,就直接采用把用户名和密码塞在SOAP头中发送,然 ...
- WCF 安全性之 自定义用户名密码验证
案例下载 http://download.csdn.net/detail/woxpp/4113172 客户端调用代码 通过代理类 代理生成 参见 http://www.cnblogs.com/woxp ...
- wordpress密码生成与登录密码验证
一.研究wordpress时wordpess的密码密码生成与登录密码验证方式很重要 WordPress密码已成为整合的首要目标,如何征服整合,就得了解WordPress密码算法. WordPress系 ...
- [c/c++] programming之路(24)、字符串(五)——字符串插入,字符串转整数,删除字符,密码验证,注意事项
1.将字符串插入到某位置(原字符串“hello yincheng hello cpp hello linux”,查找cpp,找到后在cpp的后面插入字符串“hello c”) 需要用到strstr字符 ...
- 如何在主Form出现之前,弹出密码验证From,Cancel就退出程序,Ok后密码正确才出现主Form
如何在主Form出现之前,弹出密码验证From,Cancel就退出程序,Ok后密码正确才出现主Form本文地址 :CodeGo.net/5175478/ ----------------------- ...
- WCF服务安全控制之netTcpBinding的用户名密码验证【转】
选择netTcpBinding WCF的绑定方式比较多,常用的大体有四种: wsHttpBinding basicHttpBinding netTcpBinding wsDualHttpBinding ...
- WCF用户名密码验证方式
WCF使用用户名密码验证 服务契约 namespace WCFUserNameConstract { [ServiceContract] public interface IWcfContract { ...
- 第一百五十节,封装库--JavaScript,表单验证--密码验证
封装库--JavaScript,表单验证--密码验证 效果图 html <div id="reg"> <h2 class="tuo">& ...
随机推荐
- 初学基础python记录
1.对于python来说,最重要的就是缩进.相当于其他语言的{}中括号. 2.转义快捷等 alt+p和alt+n来复制上下一行.变量使用时得先赋值,且大小写敏感,遵循变量命名规则.Python还允许用 ...
- LeetCode Implement strStr() 实现strstr()
如题 思路:暴力就行了.1ms的暴力!!!别的牛人写出来的,我学而抄之~ int strStr(char* haystack, char* needle) { ; ; ; ++i) { ; ; ++j ...
- pat乙级1045
从左到右扫描时记录扫描到当前下标为止的最大值,如果当前元素大于这个最大值,那么它就大于它左边的所有值.同理,从右到左扫描记录扫描到当前下标为止的最小值,如果当前元素小于这个最大小值,那么它就小于它右边 ...
- ES6中set和map的区别
Set ES6提供了新的数据结构Set.它类似于数组,但是成员的值都是唯一的,没有重复的值. Set函数可以接受一个数组(或类似数组的对象)作为参数,用来初始化. // 例一 var set = ne ...
- hangfire使用
1 . NuGet 命令行执行 Install-Package Hangfire2.首先在ConfigureServices 方法中注册服务: services.AddHangfire(r=>r ...
- IOS segue(跳转页面处理)
● Storyboard上每一根用来界面跳转的线,都是一个UIStoryboardSegue对象(简称Segue) Segue的属性 ● 每一个Segue对象,都有3个属性 ➢ 唯一标识 @prope ...
- POJ-3080 Blue Jeans---字符串+暴力
题目链接: https://vjudge.net/problem/POJ-3080 题目大意: 找最长的公共字串(长度>=3),长度相同就找字典序最小的 解题思路: 枚举第一个串的所以子串,处理 ...
- Count Numbers(矩阵快速幂)
Count Numbers 时间限制: 8 Sec 内存限制: 128 MB提交: 43 解决: 19[提交] [状态] [讨论版] [命题人:admin] 题目描述 Now Alice want ...
- 03_14_final关键字
03_14_final关键字 1. Final关键字 final的变量的值不能够被改变 final的成员变量 final的局部变量(形参) final的方法不能够被重写 final的类不能够被继承
- 微信小游戏 demo 飞机大战 代码分析 (三)(spirit.js, animation.js)
微信小游戏 demo 飞机大战 代码分析(三)(spirit.js, animation.js) 微信小游戏 demo 飞机大战 代码分析(一)(main.js) 微信小游戏 demo 飞机大战 代码 ...