【C#:WinForm+ADO.NET+SQL Server实现验证码登录】

WinForm+ADO.NET+SQL Server实现验证码登录

1、最终效果
当用户输入的账户名、密码以及验证码都正确时,才可以登录系统。否则,提示相应的报错信息。下图为登录成功的效果。
请添加图片描述
2、解题思路
(1)设计数据库。使用SQL Server创建数据库,并添加一个数据表,插入两条测试数据。SQL语句如下:

create database Test;--创建名为Test的数据库
use Test;--切换当前正在使用的数据库
--创建Info数据表
create table Info(
	ID int primary key identity,--将ID字段设置为主键、自增
	loginName varchar(50) not null unique,--为账户名添加唯一约束
	loginPwd char(6) not null check(len(loginPwd)=6)--限制密码长度为6
)
--插入两条测试数据
insert into Info values('admin1','123456');
insert into Info values('admin2','666666');

(2)设计窗体。在VS2017中创建Windows窗体应用项目,在窗体中添加相应控件,并修改控件属性,做出如下的效果(颜色以及其他样式可根据个人喜好进行设置):
在这里插入图片描述
(3)添加取消按钮的单击事件。取消按钮的作用为关闭当前窗体,双击取消按钮,添加单击事件,并编写具体代码,代码如下:

		private void button2_Click(object sender, EventArgs e)
        {
            //关闭窗体
            this.Close();
        }

(4)设置验证码。在Form.cs文件中添加Create_VerifCode()方法生成随机数。定义一个字符数组保存所有验证码使用到的字符(英文字母和数字1-9),使用随机数,随机生成4个数组下标,得到一组验证码。代码如下:

private string Create_VerifCode()
        {
            //定义数组,存储验证码字符(英文字母和数字0-9)
            char[] ch = new char[]
            {   '0', '1', '2', '3', '4', '5', '6','7', '8', '9',
                'a','b','c','d','e','f','g','h','i','j','k','l',
                'm','n','o','p','q','r','s','t','u','v','w','x',
                'y','z','A', 'B', 'C', 'D', 'E', 'F', 'G', 'H',
                'I', 'J','K', 'L','M','N','O', 'P', 'Q', 'R', 'S',
                'T','U', 'V', 'W','X', 'Y', 'Z', '0', '1', '2',
                '3','4', '5', '6','7', '8', '9'
            };
            //使用随机数,从数组中随机抽取4个字符组成验证码
            string code = "";
            Random rand = new Random();
            for (int i = 0; i < 4; i++)
            {
                code += ch[rand.Next(0, ch.Length)];
            }
            return code;
        }

(5)添加窗体加载事件。在窗体加载事件中添加如下代码:

		private void Form1_Load(object sender, EventArgs e)
        {
            this.label3.Text = this.Create_VerifCode();
            this.label3.BackColor = Color.LightSeaGreen;
            this.label3.ForeColor = Color.White;
            this.label3.Font = new Font("华文新魏", 16);
        }

这样做的目的:程序执行时直接生成一个验证码显示。
(6)添加刷新按钮单击事件。点击刷新按钮时,需要显示不同的验证码,且当用户输入的验证码错误时,也需要改变验证码。
具体代码如下:

private void button3_Click(object sender, EventArgs e)
        {
            //调用Create_VerifCode()方法,将标签的文本“验证码”改成生成好的验证码
            this.label3.Text = this.Create_VerifCode();
            //随机设置验证码的字体、颜色,每执行一次单击事件,生成新的随机数,代表使用不同的验证码样式
            Random randColor = new Random();
            int colorNum = randColor.Next(6);
            switch (colorNum)
            {
                case 1:
                    this.label3.BackColor = Color.LightSeaGreen;
                    this.label3.ForeColor = Color.White;
                    this.label3.Font = new Font("华文新魏", 16);
                    break;
                case 2:
                    this.label3.BackColor = Color.OrangeRed;
                    this.label3.ForeColor = Color.Yellow;
                    this.label3.Font = new Font("方正舒体", 18);
                    break;
                case 3:
                    this.label3.BackColor = Color.Cornsilk;
                    this.label3.ForeColor = Color.Black;
                    this.label3.Font = new Font("华文彩云", 16);
                    break;
                case 4:
                    this.label3.BackColor = Color.BurlyWood;
                    this.label3.ForeColor = Color.White;
                    this.label3.Font = new Font("华文行楷", 17);
                    break;
                case 5:
                    this.label3.BackColor = Color.Chartreuse;
                    this.label3.ForeColor = Color.Tomato;
                    this.label3.Font = new Font("华文楷体", 14);
                    break;
            }

        }

(7)添加登录按钮单击事件。点击登录按钮后,执行判断,判断用户输入的账号、密码、验证码是否正确,如果错误,使用消息框显示提示信息,如果正确,提示登录成功。代码如下:

		private void button1_Click(object sender, EventArgs e)
        {
            //连接数据库
            SqlConnection con = new SqlConnection("server=.;database=Test;uid=sa;pwd=123456");
            con.Open();
            //获取文本框输入的账户名、密码和验证码
            string name = this.textBox1.Text;
            string pwd = this.textBox2.Text;
            string code = this.textBox3.Text.ToLower();//调用ToLower()方法,将输入的验证码转换为小写
            //判断数据库是否连接成功
            if(con.State==ConnectionState.Open)
            {
                //编写SQL语句,根据用户输入的登录名查询密码
                string sql = string.Format("select loginPwd from Info where loginName='{0}'",name);
                //创建SqlDataAdapter对象
                SqlDataAdapter da = new SqlDataAdapter(sql,con);
                //创建DataSet对象
                DataSet ds = new DataSet();
                //填充数据集
                da.Fill(ds,"Info");
                //判断是否查询到数据,如果未查询到数据,则表示账号不存在
                //数据集中数据的行数为0,则表示未查询到数据
                if(ds.Tables["Info"].Rows.Count==0)
                {
                    MessageBox.Show("账号不存在,请检查后输入。", "登录提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    //清空三个文本框的内容
                    textBox1.Clear();
                    textBox2.Clear();
                    textBox3.Clear();
                }
                else
                {
                    //账号存在,则判断密码和验证码是否输入正确
                    //获取查询到的密码,由于用户名设置了唯一约束,所以查询结果中至多存在一条数据
                    string PWD = ds.Tables["Info"].Rows[0]["loginPwd"].ToString();
                    if(pwd!=PWD)//输入的密码和查询的密码不一致,则密码错误
                    {
                        MessageBox.Show("密码输入错误,请重新输入。", "登录提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
                        textBox2.Clear();
                        textBox3.Clear();
                    }
                    else if(code!= label3.Text.ToLower())
                    {
                        MessageBox.Show("验证码输入错误,请重新输入。", "登录提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
                        textBox3.Clear();
                        button3_Click(sender,e);//验证码输入错误,则刷新验证码
                    }
                    else
                    {
                        MessageBox.Show("密码输入正确,登录成功。", "登录提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    }
                }
            }
            else
            {
                MessageBox.Show("数据库未连接。", "系统提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Error);
            }
        }

至此,整个程序全部编写完成。

  • 2
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

toMontain

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值