案例: 三次锁定(上)

输入错了三次禁止登录, 15分钟后才能继续. 用数据库记录ErrorTimes, 最后出错时间uLoginTime数据导入

第一步:

在App.config中添加连接字符串

cs 复制代码
<connectionStrings>
	<add name="conStr" connectionString="Data Source = WINGEL; Initial Catalog = People; Trusted_Connection = SSPI"/>
</connectionStrings>

创建一个在项目中的文件夹, 取名叫service, 然后创建一个接口类叫userService.cs

cs 复制代码
using System;
using System.Collections.Generic;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Dome16_三次锁定.service
{
    internal interface userService
    {
        // 判断用户是否被锁定
        bool IsLock(string name);

        // 更新错误次数归0
        void UpdateErrorTime(string name);

        // 登入是否成功
        bool IsLoginSuccess(string name, string pwd);

        // 是否注册成功
        bool IsRegister(string name, string pwd);

        // 更新时间和错误登入次数
        void UpdateLoginTime_ErrorTime(string name);
    }
}

创建一个文件夹在service文件夹内, 取名叫serviceimpl, 然后再创建一个实现接口的类叫userServiceimpl.cs

cs 复制代码
using Dome16_三次锁定.utils;
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Dome16_三次锁定.service.serviceimpl
{
    internal class userServiceimpl : userService
    {
        string conStr { get; set; }

        public userServiceimpl()
        {
            this.conStr = ConfigurationManager.ConnectionStrings["conStr"].ConnectionString;
        }

        // 判断用户是否被锁定
        public bool IsLock(string name)
        {
            bool b = false;

            using (SqlConnection conn = new SqlConnection(conStr))
            {
                string sql = "select * from [User] where uErrorTime = 3 and " +
                    "Datediff(minute, uLoginTime, getdate()) < 15 and uLoginName = @name";
                using (SqlCommand cmd = new SqlCommand(sql, conn))
                {
                    cmd.Parameters.AddWithValue("@name", name);
                    conn.Open();

                    SqlDataReader reader = cmd.ExecuteReader();
                    if (reader.Read())
                    {
                        b = true;
                    }
                }
            }

            return b;
        }

        // 更新错误次数归0
        public void UpdateErrorTime(string name)
        {
            using (SqlConnection conn = new SqlConnection(conStr))
            {
                string sql = "update [User] set uErrorTime = 0 where uLoginName = @name";

                using (SqlCommand cmd = new SqlCommand(sql, conn))
                {
                    cmd.Parameters.AddWithValue("@name", name);
                    conn.Open();

                    cmd.ExecuteNonQuery(); // 增删改
                }
            }
        }

        // 登入是否成功
        public bool IsLoginSuccess(string name, string pwd)
        {
            bool b = false;

            using (SqlConnection conn = new SqlConnection(conStr))
            {
                string sql = "select * from [User] where uLoginName = @name and uPwd = @pwd";

                using (SqlCommand cmd = new SqlCommand(sql, conn))
                {
                    pwd = Md5Util.Md5Create(pwd);

                    cmd.Parameters.AddWithValue("@name", name);
                    cmd.Parameters.AddWithValue("@pwd", pwd);

                    conn.Open();

                    SqlDataReader r = cmd.ExecuteReader();

                    if (r.HasRows)
                    {
                        b = true;
                    }
                }
            }

            return b;
        }

        // 是否注册成功
        public bool IsRegister(string name, string pwd)
        {
            bool b = false;

            using (SqlConnection conn = new SqlConnection(conStr))
            {
                string sql = "select * from [User] where uLoginName = @name";
                using (SqlCommand cmd = new SqlCommand(sql, conn))
                {
                    cmd.Parameters.AddWithValue("@name", name);
                    conn.Open ();

                    SqlDataReader reader = cmd.ExecuteReader();

                    if (!reader.HasRows) 
                    {
                        if(Register(name, pwd))
                        {
                            b = true;
                        }
                    
                    }

                }

            }

            return b;
        }

        bool Register(string name, string pwd)
        {
            bool b = false;

            using (SqlConnection conn = new SqlConnection(conStr))
            {
                string sql = "INSERT into [User] VALUES (@name,@pwd,@logintime,@errortime)";
                using (SqlCommand cmd = new SqlCommand(sql, conn)) 
                {
                    pwd = Md5Util.Md5Create(pwd);

                    cmd.Parameters.AddWithValue ("@name", name);
                    cmd.Parameters.AddWithValue("@pwd", pwd);
                    cmd.Parameters.AddWithValue("@logintime", DateTime.Now);
                    cmd.Parameters.AddWithValue("@errortime", 0);
                    conn.Open ();

                    int r = cmd.ExecuteNonQuery();

                    if(r > 0)
                    {
                        b = true;
                    }
                }
            }
            return b;
        }

        // 更新时间和错误登入次数
        public void UpdateLoginTime_ErrorTime(string name)
        {
            using (SqlConnection conn = new SqlConnection(conStr))
            {
                string sql = "UPDATE [User] SET uErrorTime = uErrorTime + 1, uLoginTime = GETDATE() where uLoginName = @name";

                using(SqlCommand cmd = new SqlCommand(sql, conn))
                {
                    cmd.Parameters.AddWithValue("@name", name);
                    conn.Open ();
                    cmd.ExecuteNonQuery();
                }
            }
        }

    }
 
}
相关推荐
Evand J3 分钟前
【MATLAB例程】AOA与TDOA混合定位例程,适用于三维环境、4个锚点的情况,附下载链接
开发语言·matlab
机器视觉知识推荐、就业指导4 分钟前
Qt 与Halcon联合开发八: 结合Qt与Halcon实现海康相机采图显示(附源码)
开发语言·数码相机·qt
Heartoxx32 分钟前
c语言-指针与一维数组
c语言·开发语言·算法
hqxstudying33 分钟前
Java创建型模式---原型模式
java·开发语言·设计模式·代码规范
charlie1145141911 小时前
如何使用Qt创建一个浮在MainWindow上的滑动小Panel
开发语言·c++·qt·界面设计
神仙别闹1 小时前
基于Python实现LSTM对股票走势的预测
开发语言·python·lstm
保持学习ing1 小时前
day1--项目搭建and内容管理模块
java·数据库·后端·docker·虚拟机
宇钶宇夕2 小时前
EPLAN 电气制图:建立自己的部件库,添加部件-加SQL Server安装教程(三)上
运维·服务器·数据库·程序人生·自动化
chao_7892 小时前
回溯题解——子集【LeetCode】二进制枚举法
开发语言·数据结构·python·算法·leetcode
爱可生开源社区2 小时前
SQLShift 重磅更新:支持 SQL Server 存储过程转换至 GaussDB!
数据库