当前位置:首页 > 数据库 > ADO > 正文内容

基于数据库登录判断。

小道6年前 (2018-08-29)ADO3335

基于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

分享给朋友:

“基于数据库登录判断。” 的相关文章

ADO.NET介绍

ADO.NET介绍

一种程序对象,用于表示用户数据库中的数据结构和所包含的数据。在Microsoft Visual Basic编辑器中,可以使用ADO对象以及ADO的附加组件(称为Microsoft ADO Extensions for DLL and Security(ADOX))来创建或修改表和查询、检验数据库、或...

ADO连接介绍。

ADO连接介绍。

using System; using System.Collections.Generic; using System.Data.SqlClient; // 使用 SqlConnection  要引用这个。 us...

ADO数据库连接SqlConnection

ADO数据库连接SqlConnection

数据库应用程序的开发流程一般主要分为以下几个步骤:创建数据库使用Connection对象连接数据库使用Command对象对数据源执行SQL命令并返回数据使用DataReader和DataSet对象读取和处理数据源的数据Connection对象是连接程序和数据库的“桥梁”,要存取数据源中的数据,首先要...

ADO执行数据库操作命令对象SqlCommand

ADO执行数据库操作命令对象SqlCommand

使用Connection对象成功创建数据库连接后,接下来就可以使用Command对象对数据源执行查询、添加、删除和修改等各种SQL命令了。SqlCommand对象用来对SQL Server数据库执行操作命令。SqlCommand属性属性说明CommandText获取或设置要执行的SQL语句或存储过程...

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。