【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存储: 登 ...
随机推荐
- Excel中VBA 连接 数据库 方法- 摘自网络
Sub GetData() Dim strConn As String, strSQL As String Dim conn As ADODB.Connection Dim ds As ADODB.R ...
- 如何将可执行文件打包至APK并运行(转)
原文链接:http://www.lupaworld.com/home.php?mod=space&uid=345712&do=blog&id=248921 好久没有写bolg了 ...
- PC-经典之“运行里面的密密”
msconfig.exe 你自己往里面输入这个字母就可以看到了,试试看,还有,我这里有一些可以在"运行"栏里输入的命令,一并给你: 以下为Windows操作系统的常用运行命令,执行 ...
- javascript闭包问题
<script type="text/javascript"> window.onload = function(){ var name = "The Win ...
- HTML---Android与js交互实例
Android 中可以通过webview来实现和js的交互,在程序中调用js代码,只需要将webview控件的支持js的属性设置为true Android(Java)与JavaScript(HTML) ...
- Override ListView getAdapter造成的后果
近期工作中,发现了一个bug,是和ListView Adapter有关的.产生了FC,描写叙述信息大约是 "The content of the adapter has changed bu ...
- 步步为营Hibernate全攻略(一)构建Hibernate框架环境
任何一项新技术的出现都有它的必然性,Hibernate也不例外,所以在掌握Hibernate的具体应用之前我们一定先要了解Hibernate是什么?使用Hibernate会给我们的程序开发带来哪些好处 ...
- MySQL对于datetime 源码分析
http://tsecer.blog.163.com/blog/static/150181720160117355684/ 一.时间比较的语法分析 在mysql中,通常时间是一个必不可少的类型,而 ...
- 【转】C/C++求模求余运算符——2013-08-20
http://blog.csdn.net/whealker/article/details/6203629 求模运算符(%),或称求余运算符,也就是数学上所谓的除法中的余数,%两侧均应为整数, |小| ...
- update 改写 merge into
update语句改写成merge into有时会提高运行速度 看两个案例 1.根据业务将两个嵌套子查询改写成max,速度有3min提升到3s UPDATE OPER_792.LL_SCB_YDKB_2 ...