【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存储: 登 ...
随机推荐
- List使用Foreach 修改集合时,会报错的解决方案 (Error: Collection was modified; enumeration operation may not execute. ) - 摘自网络
当用foreach遍历Collection时,如果对Collection有Add或者Remove操作时,会发生以下运行时错误: "Collection was modified; enume ...
- NULL指针 Void* 和野指针
在C和C++的语言中常常有这几个概念: NULL指针.空指针.Void *指针.野指针(Wild Pointer)甚至垂悬指针(Dangling Pointer). 1.NULL指针,一般用于指向一个 ...
- [二]Ajax基本实现
<script text="text/javascript"> function ajax(){ var httpRequest; if(windows.httpReq ...
- JS 单元测试
JS单元测试,我工作时主要以mocha + chai 下面时具体的文档: mocha: https://mochajs.org/#asynchronous-code Chai: http://chai ...
- Yii2 多域名跨域同步登录退出
在平台开发过程中,项目分为前台(frontend)www.xxx.com和后台(backend) yun.xxx.com两部分,绑定两个域名, 我们知道在没有绑定域名的时候前后台可以同步登录和退出,但 ...
- 11.编写一个Java程序,计算半径为3.0的圆周长和面积并输出结果。把圆周率π定义为常量,半径定义为变量,然后进行计算并输出结果。
package com.hanqi.yzljs; public class yzljs { public static void main(String[] args) { final dou ...
- Oracle的commit详解(转)
java通过jdbc thin方式连接数据库后,对数据库操作时会出现以下两种情况,我这可能记录不全: 1.在sqlplus中查询得到和java终端中输出的查询结果不同 2.执行某些sql语句卡住不动 ...
- 《编程导论(Java)·2.1.3改写(override)》
<编程导论(Java)·2.1.3改写(override)>,收集override内容. 方法改写(method overriding)是指对于父类定义的一个实例方法,同意子类提供自己的实 ...
- Android SDK Manager无法更新问题解决
有时候在网络不好的情况下,android sdk manager更新可能一直报错.原因跟国内对于google相关服务的访问受限有关系,需要设置代理访问. 最近也遇到了这个问题.解决方法如下. 启动An ...
- SNMP协议总结
说明:本文仅供学习交流,转载请标明出处,欢迎转载! SNMP(Simple Network Management Protocal),简单网络管理协议,其前身是SGMP协议(简单网关监控协议),该协议 ...