用户名,密码尽量不要在BLL,UIL判断,尽可能的在储存过程判断,通过返回的值不同,进行判断,这样提高安全性
SQL Server储存过程代码:

BEGIN
if(exists ( select User_ID from SYS_User
where LTRIM(RTRIM(User_Name))=LTRIM(RTRIM(@User_Name)) ))
BEGIN if(exists ( select User_ID from SYS_User
where LTRIM(RTRIM(User_Name))=LTRIM(RTRIM(@User_Name)) and
LTRIM(RTRIM(User_PassWord))=LTRIM(RTRIM(@User_PassWord))))
BEGIN if (exists(select User_ID from SYS_User
where LTRIM(RTRIM(User_Name))=LTRIM(RTRIM(@User_Name)) and
LTRIM(RTRIM(User_PassWord))=LTRIM(RTRIM(@User_PassWord)) and
UserType_ID=@UserType_ID))
BEGIN select User_Name,UserType_ID from SYS_User
where LTRIM(RTRIM(User_Name))=LTRIM(RTRIM(@User_Name)) and
LTRIM(RTRIM(User_PassWord))=LTRIM(RTRIM(@User_PassWord)) and
UserType_ID=@UserType_ID
end
else
begin
select -3;------------用户类型错误
end
end
else
BEGIN
select -1;------------密码错误
end
end
else
BEGIN
select -2;---------用户名不存在
end
END
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
BLL代码:

public DataSet Login(string username,string password,int type) {
//加密密码
password = Utils.GetMd5HashStr(password);
SqlParameter[] sqlPams = {
new SqlParameter("@type",SqlDbType.NChar),
new SqlParameter("@User_Name",SqlDbType.NChar),
new SqlParameter("@User_PassWord",SqlDbType.NChar),
new SqlParameter("@UserType_ID",SqlDbType.Int),
};//声明SQL参数数组并实例化相关参数
sqlPams[0].Value = "DengLuYanZheng";//对参数赋值
sqlPams[1].Value = username;//对参数赋值
sqlPams[2].Value = password;//对参数赋值
sqlPams[3].Value = type;//对参数赋值
DataSet dateset = new DataSet();
DataTable dt = dal.QueryDataTable("Frm_Login", sqlPams);
dateset.Tables.Add(dt);

//myDAL.DAL_SelectDB_Par("存储过程的名字",SQL参数数组);
return dateset;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
UIL代码:

private void but_Login_Click(object sender, EventArgs e)
{
var userName = UserName.Text.Trim();
var password = Password.Text.Trim();
int type = Convert.ToInt32(SelectType.SelectedValue);
DataTable LoginData = bll.Login(userName, password, type).Tables[0];
int type_int = Convert.ToInt32(LoginData.Rows[0][0]);
//判断
switch (type_int)
{
case -1:
{
MessageBox.Show("密码错误!!!", "提示",MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
break;
}
case -2:
{
MessageBox.Show("账号不存在,请联系管理员!!!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
break;
}
case -3:
{
//
MessageBox.Show("用户类型不对应!!!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
break;
}
default:
{
this.Hide();
Main main = new Main();
main.Show();
break;
}
}

}
---------------------

Winform窗体验证登陆的更多相关文章

  1. C#中WinForm窗体事件的执行次序

    C#中WinForm窗体事件的执行次序如下: 当 Windows Form 应用程序启动时,会以下列顺序引发主要表单的启动事件:        System.Windows.Forms.Control ...

  2. 小例子(二)、winform窗体间的关系

    写一个关于winform窗体间的关系 1.登陆,思路:登陆后隐藏登陆窗体,关闭Form2时结束整个应用程序. //登陆窗体 private void button2_Click(object send ...

  3. WinForm窗体项目 之 MySchool管理系统终极版

    学习WinForm窗体程序也有一段时间了,今天就来尝试着来一个项目热热身~ 在我们通常使用的MySchool管理中,不外乎这几种功能:增.删.改.查.改密码 在过去的C#中确实是挺简单的,但是在学习了 ...

  4. winform 窗体圆角设计

    网上看到的很多winform窗体圆角设计代码都比较累赘,这里分享一个少量代码就可以实现的圆角.主要运用了System.Drawing.Drawing2D. 效果图 代码如下. private void ...

  5. WinForm 窗体属性 窗体美化

    WinForm是·Net开发平台中对Windows Form的一种称谓. Windows窗体的一些重要特点如下: 功能强大:Windows窗体可用于设计窗体和可视控件,以创建丰富的基于Windows的 ...

  6. winform窗体置顶

    winform窗体置顶 金刚 winform 置顶 今天做了一个winform小工具.需要设置置顶功能. 网上找了下,发现百度真的很垃圾... 还是必应靠谱些. 找到一个可以链接. https://s ...

  7. winform窗体控件(全)

    回顾跟补充下除了昨天那常用6个其他的winform窗体控件作用 1:Button:按钮 (1)AutoSize:如果是True的情况下,内容将会撑开:False的话会另起一行 (2)Enabled: ...

  8. C#将exe运行程序嵌入到自己的winform窗体中

    以下例子是将Word打开,然后将它嵌入到winform窗体中,效果如下图:C将exe运行程序嵌入到自己的winform窗体中 - kingmax_res - iSport注意:该方法只适用于com的e ...

  9. Winform 窗体单例

    有窗体Form1和窗体Form2,单击Form1上按钮,只弹出一个Form2. Form2里自定义一个方法,里面判断是否弹出Form2,没有时弹出Form2. public static Form2 ...

随机推荐

  1. bzoj 1504 郁闷的出纳员

    题目大意: 有一些员工 他们有工资 当他们的工资低于一个值时 他们会永远离开 I命令 I_k 新建一个工资档案,初始工资为k.                 如果某员工的初始工资低于工资下界,他将立 ...

  2. robotframework 随机选中下拉框中的值

    示例脚本: click element id=provinceName #点击地区 省 wait until element is enabled xpath=.//*[@id='provinceNa ...

  3. 开源ORM

    Farseer.net轻量级开源框架 目录 https://github.com/steden/Farseer.net ---------------------------------- SunSo ...

  4. EF 连接MySql

    使用EntityFramework6连接MySql数据库(db first方式) http://www.cnblogs.com/24la/archive/2014/04/03/ef6-mysql.ht ...

  5. 洛谷 P3952 时间复杂度【模拟】

    把No写成NO,WA了一发-- 现在看这题也不难-- 用一个栈,记一下前面F的字母,是否合法,合法的有多长,每次入栈弹栈即可 #include<iostream> #include< ...

  6. A joke about regular expression

    As the old computer science joke goes: “Let’s say you have a problem, andyou decide to solve it with ...

  7. Unix\Linux | 总结笔记 | 查看文件的方式

    0 目录 vi cat head tail more less 1.vi vi编辑器的内置命令 有些内置命令使用键盘组合键即可完成,有些内置命令则需要以冒号“:”开头输入.常用内置命令如下: Ctrl ...

  8. BFS(最短路) HDOJ 4308 Saving Princess claire_

    题目传送门 题意:一个(r*c<=5000)的迷宫,起点'Y‘,终点'C',陷阱‘#’,可行路‘*’(每走一个,*cost),传送门P,问Y到C的最短路 分析:一道最短路问题,加了传送门的功能, ...

  9. 473 Matchsticks to Square 火柴拼正方形

    还记得童话<卖火柴的小女孩>吗?现在,你知道小女孩有多少根火柴,请找出一种能使用所有火柴拼成一个正方形的方法.不能折断火柴,可以把火柴连接起来,并且每根火柴都要用到.输入为小女孩拥有火柴的 ...

  10. 419 Battleships in a Board 甲板上的战舰

    给定一个二维的甲板, 请计算其中有多少艘战舰. 战舰用 'X'表示,空位用 '.'表示. 你需要遵守以下规则:    给你一个有效的甲板,仅由战舰或者空位组成.    战舰只能水平或者垂直放置.换句话 ...