一、简单登录验证(防SQL注入)

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("用户名错误!");
      }
    }
  }
}
二、简单登录验证 (通过参数赋值)(防SQL注入)

 
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、各种版本的 简单登录验证的更多相关文章

  1. MVC+三层+ASP.NET简单登录验证

    通过制作一个登录小案例来搭建MVC简单三层 在View --Shared下创建一个母版页: <!DOCTYPE html> <html> <head> <me ...

  2. Python第一天-----简单登录验证

    ----------------------------------------- 编写登录接口 要求:1.输入用户名密码 2.认证成功后显示欢迎信息 3.输错三次后锁定 -------------- ...

  3. nodejs(一) 简单登录验证 使用mongoose 操作MongoDB

    ---恢复内容开始--- 开发使用webstorm 9  新建nodejs+express 项目 newfarmer 文章目录 配置Mongoose 创建目录及文件 插入数据,POST提交JSON增加 ...

  4. Android简单登录系统

    很长时间没有写博客了,最近一直在写android for gis方面的项目.不过这篇博客就不写gis方面的了,今天刚刚做的一个简单的android登录系统.数据库是android自带的sqlite,s ...

  5. C#.NET 大型通用信息化系统集成快速开发平台 4.6 版本 - SSO单点登录接口

    当开发的系统多了.用户多了.合作伙伴多了.对接厂商多了.开发人员多了.部署的服务器也多了,各种安全问题就暴露出来了. 如何安全的把这些系统集成在一起?实现集群的单点登录.严格统一的用户安全体系管理? ...

  6. 简单两步快速实现shiro的配置和使用,包含登录验证、角色验证、权限验证以及shiro登录注销流程(基于spring的方式,使用maven构建)

    前言: shiro因为其简单.可靠.实现方便而成为现在最常用的安全框架,那么这篇文章除了会用简洁明了的方式讲一下基于spring的shiro详细配置和登录注销功能使用之外,也会根据惯例在文章最后总结一 ...

  7. TODO:Laravel 内置简单登录

    TODO:Laravel 内置简单登录 1. 激活Laravel的Auth系统Laravel 利用 PHP 的新特性 trait 内置了非常完善好用的简单用户登录注册功能,适合一些不需要复杂用户权限管 ...

  8. 纯JSP实现简单登录跳转

    1.JSP介绍 JSP即Java Server Pages,JSP技术使用Java编程语言编写类XML的tags和scriptlets,来封装产生动态网页的处理逻辑.网页还能通过tags和script ...

  9. 简单登录案例(SharedPreferences存储账户信息)&联网请求图片并下载到SD卡(文件外部存储)

    新人刚学习Android两周,写一个随笔算是对两周学习成果的巩固,不足之处欢迎各位建议和完善. 这次写的是一个简单登录案例,大概功能如下: 注册的账户信息用SharedPreferences存储: 登 ...

随机推荐

  1. java中的"goto"--label

    java中没有goto,但是goto是保留字.例如int goto;是不合法的. 但是java中有标签,仅作用在多重循环的continue和break中. continue和break只能作用于本层循 ...

  2. 问题-Delphi在多线程中使用其他窗体上的控件,报“尚未调用CoInitialize”解决方法

    1.uses ActiveX; 2. procedure HLCJ.Execute;begin    CoInitialize(nil);    //要使用的控件    CoUninitialize; ...

  3. android ORMlite的应用

    ORMLite -轻量级的对象关系映射(ORM) 如果你需要在android中使用ORMLite 你需要进入官方网站http://ormlite.com/ 中下载 下载了这两个包以后,你还需要在对应的 ...

  4. 点击modal确定键后删除tr

    做第一个笔记,关于 “书单”.2016-09-03关于一个表格调用modal后,在点击表格中的删除按钮弹出modal,点击确定删除后,将一整行tr 删除的功能. 以下内容为table,表示为某班学生. ...

  5. 收集磁盘分区信息(总量、可用、已用、百分比)导出到csv

    #############################脚本功能及说明##################################################该脚本用来收集磁盘分区总大小 ...

  6. html传參中?和&amp;

    <a href="MealServlet?type=findbyid&mid=<%=m1.getMealId()%> 在这句传參中?之后的代表要传递的參数当中有两个 ...

  7. 【JavaScript】出现即使设置了ID也获取不到的可能原因与window.onload

    有时候.在JavaScript中.即使设置了ID也有可能出现document.getElementById()获取不到的情况,然后你就開始想document是否写错之类的.事实上根本就不是你的代码的大 ...

  8. 回击MLAA:NVIDIA FXAA抗锯齿性能实測、画质对照

    PC游戏玩家肯定会对各式各样的AA抗锯齿技术很熟悉,而今天本文的主角就是NVIDIA今年才推出的新型抗锯齿技术"FXAA". FXAA在某种程度上有些类似于AMD之前宣传的MLAA ...

  9. URI URL

    http://www.cnblogs.com/ACFLOOD/p/5533022.html

  10. Ubuntu上VNC 配置

    Ubuntu下VNC配置文章分类:操作系统通过将服务器配置成VNC SERVER,可以让其他主机使用图形方式登录这台服务器. 在ubuntu下配置vnc server很简单,方法如下: 服务器端: 1 ...