基于数据库登录判断。

原创 小道  2018-08-29 15:37:38  阅读 480 次 评论 0 条
摘要:

基于MSSQL数据库登录判断,如果密码连续输出3次,则提示用户3分钟后重试。数据库:Program:using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using System.Windows.Forms; namespace 登录 {    &nb

基于MSSQL数据库登录判断,如果密码连续输出3次,则提示用户3分钟后重试。

数据库:

image.pngimage.png

Program:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace 登录
{
    static class Program
    {
        /// <summary>
        /// 应用程序的主入口点。
        /// </summary>
        [STAThread]
        static void Main()
        {
            string dataDir = AppDomain.CurrentDomain.BaseDirectory;   //将当前路径赋值给 dataDir 变量。
            if (dataDir.EndsWith(@"\bin\Debug\") || dataDir.EndsWith(@"\bin\Release")) //判断 dataDir 字符串结尾 是不是依这两个中的任意一个结尾的。
            {
                dataDir = System.IO.Directory.GetParent(dataDir).Parent.Parent.FullName; //将 dataDir 变量中的路径 向上两级,赋值给 dataDir。
                AppDomain.CurrentDomain.SetData("DataDirectory", dataDir); //最后将路径 赋值给 DataDirectory.
            }

            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Form1());
        }
    }
}

Form1:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.SqlClient;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace 登录
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void 错误次数增加() //增加错误次数方法
        {
            using (SqlConnection conn = new SqlConnection(@"Data Source=(LocalDB)\MSSQLLocalDB;AttachDBFilename=|DataDirectory|\sjk.mdf;integrated Security=True;User Instance=false"))
            {
                conn.Open();//打开数据库
                using (SqlCommand cmd =conn.CreateCommand()) //执行SQL语句
                {
                    cmd.CommandText = "update 用户 set 登录错误次数 = 登录错误次数 + 1 where 帐号 = @zh"; //SQL语句 将用户输入的帐号对应的错误次数+1
                    cmd.Parameters.Add(new SqlParameter("zh", txt帐号.Text));
                    cmd.ExecuteNonQuery();//执行SQL语句
                }
            }
        }
        private void 错误次数清零() //错误次数清零
        {
            using (SqlConnection conn = new SqlConnection(@"Data Source=(LocalDB)\MSSQLLocalDB;AttachDBFilename=|DataDirectory|\sjk.mdf;integrated Security=True;User Instance=false"))
            {
                conn.Open();//打开数据库
                using (SqlCommand cmd = conn.CreateCommand())//执行SQL语句
                {
                    cmd.CommandText = "update 用户 set 登录错误次数 = 0 where 帐号=@zh";//SQL语句 将用户输入的帐号对应的错误次数清零。
                    cmd.Parameters.Add(new SqlParameter("zh", txt帐号.Text));
                    cmd.ExecuteNonQuery();//执行SQL语句
                }
            }
        }
        private void 禁止时间()  //用户禁止时间方法
        {
            using (SqlConnection conn = new SqlConnection(@"Data Source=(LocalDB)\MSSQLLocalDB;AttachDBFilename=|DataDirectory|\sjk.mdf;integrated Security=True;User Instance=false"))
            {
                conn.Open();//打开数据库
                using (SqlCommand cmd = conn.CreateCommand())//执行SQL语句
                {
                    cmd.CommandText = "update 用户 set 恢复时间= DATEADD(mi,3,GETDATE()) where 帐号=@zh"; //SQL语句 将用户输入的帐号对应的 恢复时间设置为:当前时间+3分钟。
                    cmd.Parameters.Add(new SqlParameter("zh", txt帐号.Text));
                    cmd.ExecuteNonQuery();//执行SQL语句
                }
            }
        }
        private void button1_Click(object sender, EventArgs e)  //登录按钮单击事件
        {
            using (SqlConnection conn = new SqlConnection(@"Data Source=(LocalDB)\MSSQLLocalDB;AttachDBFilename=|DataDirectory|\sjk.mdf;integrated Security=True;User Instance=false"))
            {
                conn.Open();//打开数据库
                using (SqlCommand cmd =conn.CreateCommand())
                {
                    cmd.CommandText = "select * from 用户 where 帐号=@zh";//搜索用户输入帐号。
                    cmd.Parameters.Add(new SqlParameter("zh", txt帐号.Text));
                    using (SqlDataReader reader = cmd.ExecuteReader())//将搜索结果存储到reader 中。
                    {
                        if (reader.Read())//判断reader 中是否有数据。
                        {
                            DateTime d = reader.GetDateTime(reader.GetOrdinal("恢复时间"));// 如果有数据,则获取 恢复时间 赋值给d。
                            if (d > DateTime.Now)//判断 获取的d 时间是否大于当前时间。
                            {
                                int i = reader.GetInt32(reader.GetOrdinal("登录错误次数"));//如果大于当前时间,则获取 错误次数。
                                if (i > 3)//判断错误次数是否大于3
                                {
                                    MessageBox.Show("登录错误次数过多," + d + "后重试!");//如果大于3 则提示。
                                    return;//退出。
                                }
                            }
                            else//如果获取的d时间小于当前时间
                            {
                                错误次数清零();//执行错误次数清零 方法。
                            }
                            
                            string 获取数据库密码 = reader.GetString(reader.GetOrdinal("密码"));//获取密码
                            if (获取数据库密码 == txt密码.Text) //判断密码
                            {
                                MessageBox.Show("登录成功!");//密码正确,提示
                                错误次数清零();//错误次数清零。
                            }
                            else
                            {
                                MessageBox.Show("密码错误!");//密码不正确 提示
                                错误次数增加();//错误次数增加
                                禁止时间();//调用 禁止时间方法。  也可以在这里判断输入次数是否大于或等于3.在调用方法。那么上面也就无需判断 错误次数是否大于3.
                            }
                        }
                        else
                        {
                            MessageBox.Show("帐号错误!");//帐号错误提示。
                        }
                    }
                }
            }
        }
    }
}

输出结果:

image.pngimage.pngimage.png

本文地址:https://www.daobk.com/post/85.html
版权声明:本文为原创文章,版权归 小道 所有,欢迎分享本文,转载请保留出处!

发表评论


表情

还没有留言,还不快点抢沙发?