ADO之密码验证--3次错误就锁定
这个程序是那vs2010下写的,C#语言。数据库是sql server 2008
首先在数据库中新建一个数据库Test1,在数据库中新建一个表用来保存用户名和密码USERINFO,
CREATE TABLE USERINFO
(
UserID varchar(12) NOT NULL PRIMARY KEY,
Password varchar(12) NOT NULL ,
ErrorTimes int NULL,
)
ErrorTimes就是用来判断用户输入密码错误的次数的,每错一次加一
添加几条数据
INSERT INTO USERINFO
VALUES('song','')
INSERT INTO USERINFO
VALUES('wang','')
然后,在VS里做个简单界面,给控件绑定变量tb_UserID和tb_Password

最后响应登录按钮btn_Login_Click()
private void btn_Login_Click(object sender, RoutedEventArgs e)
{
//从控件获取数据
string userid = tb_UserID.Text;
string password = tb_Password.Text;
if (userid != "" && password != "")//用户名和密码全不为空
{
using (SqlConnection conn = new SqlConnection(
"Data Source=.;Initial Catalog=Test1;User ID=sa;Password=123456"))
{
conn.Open();
using (SqlCommand cmd = conn.CreateCommand())
{
//查找用户名是否存在
cmd.CommandText = "select ErrorTimes from USERINFO where UserID=@user";
cmd.Parameters.Add(new SqlParameter("@user", tb_UserID.Text));//
int resoult = -;
try {
resoult = (int)cmd.ExecuteScalar();//如果用户名不存在就抛出异常
}
catch (Exception ex) {
if (ex is SqlException)
{
MessageBox.Show("用户不存在,请重试");
}
} if (resoult >= )//输入密码错误超过3次
{
MessageBox.Show("你的帐户已锁定,请找管理员解锁");
}
else if (resoult >= && resoult < )
{
cmd.CommandText = "select Password from USERINFO where UserID=@user";
string pass = (string)cmd.ExecuteScalar();
if (pass.Equals(password))//比较两个字符串是否相等
{
MessageBox.Show("登录成功");
}
else
{
MessageBox.Show("密码错误,请重试");
cmd.CommandText = "update USERINFO set ErrorTimes = ErrorTimes+1 where UserID=@user";//更新数据
cmd.ExecuteNonQuery();
}
}
else if (resoult == -)
{
MessageBox.Show("用户不存在,请重试");
}
//MessageBox.Show(resoult.ToString());
}
}
}
else if (userid == "")
{
MessageBox.Show("用户名不能为空");
}
else
{
MessageBox.Show("密码不能为空");
}
}
这里总结一下数据库连接的一般过程
第一步,建立连接使用SqlConnection,参数可以为空,也可以为一个字符串。
DataSource 表示数据库的地址,如果是本机的话可以用"."或者127.0.0.1,其他的就指定一个IP地址。
Initial Catalog 表示要连接的数据库名,
User ID 指定用户名,
Password指定密码
SqlConnection conn = new SqlConnection("Data Source=.;Initial Catalog=Test1;User ID=sa;Password=123456")
第二步,连接成功后就可以打开数据库里,Open()方法使用 ConnectionString 所指定的属性设置打开数据库连接。
conn.Open();
第三步,对 SQL Server 数据库执行的一个 Transact-SQL 语句或存储过程,使用 SqlCommand类来指定要执行的语句。
SqlCommand cmd = conn.CreateCommand();//创建一个命令用于执行查询
cmd.CommandText = "select ErrorTimes from USERINFO where UserID=@user";//这个就是要执行的sql语句
cmd.Parameters.Add(new SqlParameter("@user", tb_UserID.Text));//这个给参数赋值,可以指定多个参数
最后执行语句 int resoult = (int)cmd.ExecuteScalar();
ExecuteScalar();//返回结果集的第一行第一列的数据
ExecuteNonQuery();//执行语句但是不查询
当然上面那个例子有很多需要改进的地方,继续学习。
ADO之密码验证--3次错误就锁定的更多相关文章
- ADO之密码验证--3次错误就锁定『改进』
这里使用了SqlHelper,简化程序 自己写一个SqlHelper,把数据库的连接等都写到里面去. 首先把连接字符串添加到配置文件里去,右键解决方案-->添加新建项-->选择应用程序配置 ...
- 【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">& ...
随机推荐
- 海海DRM视频保护解密流程分析
环境及工具 手机 :小米手机 MI 2A 系统版本: Android 4.1.1 工具 : IDA pro 6.6 .C32Asm .VS2005 一:第一次打开加密视频会出现如下验证: ...
- extends 继承
继承的作用:子类可以直接拥有父类成员:其中,私有成员和构造函数不参与继承: java中类继承的特点:只支持单一继承和多重继承,不支持多继承(一个类不能同时继承多个类) 继承中成员变量的特点:子类中可以 ...
- C# linq根据自定义筛选条件和所对应的数值进行筛选
在软件应用中有时候会出现这样的界面:上面是利用多选框和下拉框组合的筛选条件.下面表格展示筛选后的数据.如下图 上面是筛选条件,表格是根据筛选条件筛选的结果. 如果表格不支持筛选功能.可以利用Linq对 ...
- AD7190的小总结
1.单次转换模式 通过配置“模式寄存器的MD2.MD1.MD0为001”,便可启动单次转换. 流程“上电 -> 单次转换 -> 省电模式 ” , 片内振荡上电需要大约1ms. 单次转换 ...
- HDU 3697 Selecting courses 选课(贪心)
题意: 一个学生要选课,给出一系列课程的可选时间(按分钟计),在同一时刻只能选一门课程(精确的),每隔5分钟才能选一次课,也就是说,从你第一次开始选课起,每过5分钟,要么选课,要么不选,不能隔6分钟再 ...
- Windows 服务快捷启动命令,可以直接在运行处运行电脑的功能。
gpedit.msc-----组策略 sndrec32-----录音机 nslookup----- ip地址侦测器 explorer------ 打开资源管理器 logoff-------注销命令 t ...
- JQuery笔录
1.jQuery 的 hide() 函数,隐藏了 HTML 文档中所有的 <p> 元素.<script type="text/javascript">$(d ...
- UVA Live Achrive 4327 Parade (单调队列,dp)
容易想到dp[i][j]表示在第i行j个路口的开始走最大高兴值. 每次可以向左走,或者向右边走,然后向北走.(或者直接往北) 向左走到,状态转移为dp[i][j] = dp[i][k] + happy ...
- os.walk 模块
os.walk()可以得到一个三元tupple(dirpath, dirnames, filenames),其中第一个为起始路径,第二个为起始路径下的文件夹,第三个是起始路径下的文件. 其中dirpa ...
- 漫谈 Clustering (1): k-means
好久没有写 blog 了,一来是 blog 下线一段时间,而租 DreamHost 的事情又一直没弄好:二来是没有太多时间,天天都跑去实验室.现在主要折腾 Machine Learning 相关的东西 ...