登录表单出现问题
本文关键字:问题 表单 登录 | 更新日期: 2023-09-27 18:27:04
我编写了以下代码,使用C#和LINQ登录到我的应用程序。它连接到我在Visual Studio中创建的一个面向SQL服务的数据库。我遇到的问题是一个我不理解的问题,我希望有人能在这里帮助我。我已经创建了两个消息框,试图查看我的代码的输出购买我没有从中得到任何东西。
如果有人能帮忙那就太好了!
public bool UserLogin(string User, string Pass)
{
var Database = new ExampleDataSet();
var query = from Employee in Database.Employee
where (Employee.EmployeeID.ToString() == Employee.ToLower() && Employee.Password == Pass)
select Employee;
if (query.Count() != 0)
{
return true;
MessageBox.Show("You are logged in");
}
return false;
MessageBox.Show("You are not logged in");
}
private void cmdLogin_Click(object sender, EventArgs e)
{
string User = (txtUser.Text);
string Pass = (txtPass.Text);
UserLogin(User, Pass);
}
从您编写的代码来看,问题似乎是将Employee
的字符串表示与其EmployeeId
属性Employee.EmployeeID.ToString() == Employee.ToLower()
进行比较。除非重写Employee
类的ToString()
方法以返回属性EmployeeId
(我想您没有),否则此行将始终返回false
。请尝试此操作(假设参数User
包含用户名称):
using(var dataSet = new ExampleDataSet())
{
var loggedIn = dataSet.Employee.Any(e=>e.UserName == User && e.Password == Pass);
var message = loggedIn ? "You are logged in" : "You are not logged in";
MessageBox.Show(message);
return loggedIn;
}
当您返回时,函数执行将停止,因为它已经完成,并将返回其调用的值。所以你回来后的任何事情都不会发生。尝试将MessageBox.Show
置于return
:之前
MessageBox.Show("You are logged in");
return true;
虚假版本也是如此。
在返回语句之后,消息框不会按原样显示-将消息框移到返回语句之前即可查看它们。
我已经对您的代码进行了更改。。。。你的if-else部分无效。。。。。。你是比较员工。员工本身的ID。。使用以下代码进行试用。。。。。
public bool UserLogin(string User, string Pass)
{
var Database = new ExampleDataSet();
var query = from Employee in Database.Employee
where (Employee.EmployeeID.ToString().ToLower().Equals(User.ToLower())&& Employee.Password.ToString().ToLower().Equals(Pass.ToLower())
select Employee;
if (query.Count() != 0)
{
MessageBox.Show("You are logged in");
return true;
}
else
{
MessageBox.Show("You are not logged in");
return false;
}
}
private void cmdLogin_Click(object sender, EventArgs e)
{
string User = (txtUser.Text);
string Pass = (txtPass.Text);
UserLogin(User, Pass);
}
如果你的意思是user=employeeId
Employee.EmployeeID.ToString() == user.ToLower()
如果不是:
Employee.EmployeeName.ToLower() == user.ToLower()
关于消息框,您应该知道return
之后的任何语句都不会执行
不建议编写自己的用户身份验证。要做到这一点非常困难,在大多数情况下,你可以使用Windows或点网框架已经提供的。
例如,您的应用程序不应以纯文本形式存储用户密码。如果您的应用程序或数据库遭到破坏,攻击者不仅可以完全访问您的应用软件,还可以访问用户可能在其他地方使用过的密码列表。
如果您需要存储用户凭据,则应首先对其进行加盐处理,然后使用安全的哈希算法对其进行哈希处理。这样可以防止任何访问数据库的人学习用户密码。
要验证密码,您可以在数据库中查找salt,将密码附加到其中,对结果进行散列,然后将其与存储的值进行比较。如果它们相同,则用户输入了正确的密码。
如果您正在编写将在windows域中使用的应用程序,则可以使用Active Directory组来控制对应用程序的访问。在最简单的级别上,您可以将应用程序存储在只有授权用户才能访问的文件夹中。
您还可以使用组来控制对应用程序连接到的数据库的访问。如果您使用的是SQL server,则每个组都应置于SQL数据库角色中,而该角色又被授予该角色所需的权限。
在应用程序中,您可以查找用户组成员资格,并使用它来确定要显示的表单/菜单选项,或者在未经授权的情况下退出应用程序。
如果您正在编写ASP.Net应用程序,请考虑使用框架中内置的MemberShip和Roles。