一、简单登录验证(防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. Dynamices CRM Permission Issue (Security role UI to privilege mapping)'s solution

    select * from privilege where  privilegeid = 'a4736385-9763-4a64-a44b-cd5933edc631' Security role UI ...

  2. MySql中启用InnoDB数据引擎的方法

    1.存储引擎是什么? Mysql中的数据用各种不同的技术存储在文件(或者内存)中.这些技术中的每一种技术都使用不同的存储机制.索引技巧.锁定水平并且最终提供广泛的不同的功能和能力.通过选择不同的技术, ...

  3. 打开链接(C# / 默认浏览器)

    System.Diagnostics.Process.Start("http://www.baidu.com/");

  4. lab 1实验报告

    练习1:理解通过make生成执行文件的过程. 1.操作系统镜像文件ucore.img是如何一步一步生成的? 生成 bin/kern 部分 生成 init.o 生成 readline.o 生成 stdi ...

  5. hdu 1754 I Hate It (splay tree伸展树)

    hdu 1754 I Hate It 其实我只是来存一下我的splay模板的..请大牛们多多指教 #include<stdio.h> #include<string.h> #i ...

  6. SRM659 1100pts

    绍一模拟赛的题[问题描述]小Z.小Y和小B拥有

  7. Unity3D 导入贴图、模型等资源文件时自动设置参数

    脚本继承至AssetPostprocessor, 存放在Editor目录下! using UnityEngine; using System.Collections; using UnityEdito ...

  8. [Angular 2] Handle Reactive Async opreations in Service

    When you use ngrx/store and you want to fire a service request. When it sucessfully return the respo ...

  9. 【转】最新基于adt-bundle-windows-x86的android开发环境搭建

    http://blog.csdn.net/wangqiuyun/article/details/8731240 某系统要配套做一个android客户端,来一次android开发环境快速搭建,系统Win ...

  10. c# 枚举基础有[flags]和没有的的区别

    枚举提供成组的常数值,它们有助于使成员成为强类型以及提高代码的可读性.在 C# 中,使用 enum 来声明枚举. 枚举分为简单枚举和标志枚举两种. 基本语法示例 enum Day { Sun, Mon ...