【ADO.NET】2、各种版本的 简单登录验证
GetString(序号) 返回某一列的值(当用户不记得列名序号时,可使用GetOrdinal()获取到序号)
GetInt32(序号) 针对的是 int 字段,返回int字段的值
GetOrdinal("列名") 根据列名得到序号
Console.WriteLine("请输入用户名:");
string Uname=Console.ReadLine();
Console.WriteLine("请输入密码:");
string Pwd=Console.ReadLine();
using (SqlConnection conn = new SqlConnection("Data Source=.;database=mytest;uid=sa;pwd=gao;"))
{
conn.Open();
using (SqlCommand cmd = conn.CreateCommand())
{
//User为关键字,用[]解决,表名T_开头,字段F开头
cmd.CommandText = "select * from mydo where username='" + Uname + "'";
using (SqlDataReader dr = cmd.ExecuteReader())
{
if (dr.Read())
{
//防止SQL注入,GetString(序号)返回某一列的值,GetOrdinal()根据列名得到序号
string dbpasswd = dr.GetString(dr.GetOrdinal("passwd"));
if (Pwd == dbpasswd) //判断用户输入的与数据库查询到的是否一致
{
Console.WriteLine("登录成功!");
}
else
{
Console.WriteLine("密码错误!");
}
}
else
{
Console.WriteLine("用户名错误!");
}
}
}
}
Console.WriteLine("请输入用户名:");
string username=Console.ReadLine();
Console.WriteLine("请输入密码:");
string passwd=Console.ReadLine();
using (SqlConnection conn = new SqlConnection("Data Source=.;database=mytest;uid=sa;pwd=gao;"))
{
conn.Open();
using (SqlCommand cmd = conn.CreateCommand())
{
cmd.CommandText = "select * from mydo where username=@Uname and passwd=@Pwd";
cmd.Parmeters.Add(new SqlParmeter("Uname",username));
cmd.Parmeters.Add(new SqlParmeter("Pwd",passwd));
using (SqlDataReader dr = cmd.ExecuteReader())
{
if (dr.Read())
{
Console.WriteLine("登陆成功!");
}
else
{
Console.WriteLine("登陆失败!");
}
}
}
}
首先在数据库中加入 error 字段,类型为 int 默认值为 0
注意:在同一个连接中,如果SqlDataReader没有关闭,那么是不能执行Update之类的语句的
所以下面对于 error 次数的修改,都是通过 函数 的方式来实现
private void IncErrorTimes() //用于为error字段自增值的 函数(方法)
{
using (SqlConnection conn = new SqlConnection("server=.;database=mytest;uid=sa;pwd=gao;"))
{
conn.Open();
using (SqlCommand cmd = conn.CreateCommand())
{
cmd.CommandText = "update mydo set error=error+1 where username=@U";
cmd.Parameters.Add(new SqlParameter("@U", txtLogin.Text.Trim()));
cmd.ExecuteNonQuery();
}
}
} private void ResetErrorTimes() //用于为error字段复位(设置为0)的 函数
{
using (SqlConnection conn = new SqlConnection("server=.;database=mytest;uid=sa;pwd=gao;"))
{
conn.Open();
using (SqlCommand cmd = conn.CreateCommand())
{
cmd.CommandText = "update mydo set error=0 where username=@U";
cmd.Parameters.Add(new SqlParameter("@U", txtLogin.Text.Trim()));
cmd.ExecuteNonQuery();
}
}
} private void button1_Click(object sender, EventArgs e) //主程序
{
using (SqlConnection conn = new SqlConnection("server=.;database=mytest;uid=sa;pwd=gao;"))
{
conn.Open();
using (SqlCommand cmd = conn.CreateCommand())
{
cmd.CommandText = "select * from mydo where username=@U";
cmd.Parameters.Add(new SqlParameter("U", txtLogin.Text.Trim()));
using (SqlDataReader dr = cmd.ExecuteReader())
{
if (dr.Read())
{
int errorTimes = dr.GetInt32(dr.GetOrdinal("error"));
if (errorTimes >= )
{
MessageBox.Show("错误次数过多,禁止登陆!");
return;
} string dbname = dr.GetString(dr.GetOrdinal("username"));
if (dbname == txtLogin.Text.Trim())
{
string dbpasswd = dr.GetString(dr.GetOrdinal("passwd")); if (dbpasswd == txtPasswd.Text.Trim())
{
ResetErrorTimes();
MessageBox.Show("登陆成功!");
picBox1.Visible = true;
}
else
{
IncErrorTimes();
MessageBox.Show("登陆失败!");
return;
}
}
}
else
{
MessageBox.Show("用户名错误!");
}
}
}
}
【ADO.NET】2、各种版本的 简单登录验证的更多相关文章
- MVC+三层+ASP.NET简单登录验证
通过制作一个登录小案例来搭建MVC简单三层 在View --Shared下创建一个母版页: <!DOCTYPE html> <html> <head> <me ...
- Python第一天-----简单登录验证
----------------------------------------- 编写登录接口 要求:1.输入用户名密码 2.认证成功后显示欢迎信息 3.输错三次后锁定 -------------- ...
- nodejs(一) 简单登录验证 使用mongoose 操作MongoDB
---恢复内容开始--- 开发使用webstorm 9 新建nodejs+express 项目 newfarmer 文章目录 配置Mongoose 创建目录及文件 插入数据,POST提交JSON增加 ...
- Android简单登录系统
很长时间没有写博客了,最近一直在写android for gis方面的项目.不过这篇博客就不写gis方面的了,今天刚刚做的一个简单的android登录系统.数据库是android自带的sqlite,s ...
- C#.NET 大型通用信息化系统集成快速开发平台 4.6 版本 - SSO单点登录接口
当开发的系统多了.用户多了.合作伙伴多了.对接厂商多了.开发人员多了.部署的服务器也多了,各种安全问题就暴露出来了. 如何安全的把这些系统集成在一起?实现集群的单点登录.严格统一的用户安全体系管理? ...
- 简单两步快速实现shiro的配置和使用,包含登录验证、角色验证、权限验证以及shiro登录注销流程(基于spring的方式,使用maven构建)
前言: shiro因为其简单.可靠.实现方便而成为现在最常用的安全框架,那么这篇文章除了会用简洁明了的方式讲一下基于spring的shiro详细配置和登录注销功能使用之外,也会根据惯例在文章最后总结一 ...
- TODO:Laravel 内置简单登录
TODO:Laravel 内置简单登录 1. 激活Laravel的Auth系统Laravel 利用 PHP 的新特性 trait 内置了非常完善好用的简单用户登录注册功能,适合一些不需要复杂用户权限管 ...
- 纯JSP实现简单登录跳转
1.JSP介绍 JSP即Java Server Pages,JSP技术使用Java编程语言编写类XML的tags和scriptlets,来封装产生动态网页的处理逻辑.网页还能通过tags和script ...
- 简单登录案例(SharedPreferences存储账户信息)&联网请求图片并下载到SD卡(文件外部存储)
新人刚学习Android两周,写一个随笔算是对两周学习成果的巩固,不足之处欢迎各位建议和完善. 这次写的是一个简单登录案例,大概功能如下: 注册的账户信息用SharedPreferences存储: 登 ...
随机推荐
- 恢复oracle中误删除drop掉的表
查看回收站中表 select object_name,original_name,partition_name,type,ts_name,createtime,droptime from recycl ...
- https原理:证书传递、验证和数据加密、解密过程解析
写的太好了,就是我一直想找的内容,看了这个对https立马明白多了 http://www.cnblogs.com/zhuqil/archive/2012/07/23/2604572.html 我们都知 ...
- A Tour of Go Forever
If you omit the loop condition it loops forever, so an infinite loop is compactly(简洁地:紧密地:细密地) expre ...
- 在 windows 上面安装 tensorflow
这个是 tensorflow 官网地址, https://www.tensorflow.org/get_started/os_setup#pip_installation_on_windows 上面有 ...
- POJ 1179 IOI1998 Polygon
Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 5472 Accepted: 2334 Description Polyg ...
- OC中 self.view.frame.size.height = 100; 不能通过编译的原因
在OC中,当需要修改一个view的尺寸时,通常是通过先将 self.view.fram赋值给一个临时变量,然后修改临时变量,最后将临时变量赋值给 self.view.frame.代码如下: // 1. ...
- Rediss_基本介绍
Redis是典型的NoSQL数据库( Not Only SQL) NoSQL数据库: NoSQL,泛指非关系型的数据库.随着互联网web2.0网站的兴起, 传统的关系数据库在应付web2.0网站, 特 ...
- 如何更改 RSA 的语言设置
国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html内部邀请码:C8E245J (不写邀请码,没有现金送)国内私 ...
- SQL Server数据库PIVOT函数的使用详解(二)
动态的行转列 原理就是 把需要转成列的行拼出来 DECLARE @fieldName VARCHAR(); SET @fieldName=''; SELECT @fieldName = @fieldN ...
- 深入理解Linux操作系统守护进程的意义
Linux服务器在启动时需要启动很多系统服务,它们向本地和网络用户提供了Linux的系统功能接口,直接面向应用程序和用户.提供这些服务的程序是由运行在后台的守护进程(daemons)来执行的.守护进程 ...