C# 登录表单故障
我编写了以下代码,使用C#和LINQ登录到我的应用程序。它连接到我在VisualStudio中创建的面向SQL服务的数据库。我遇到的问题是我不理解的,我希望有人能在这方面帮助我。我创建了两个消息框,试图查看我的代码输出,但我没有从中得到任何东西 如果有人能帮忙,那就太好了C# 登录表单故障,c#,.net,linq,C#,.net,Linq,我编写了以下代码,使用C#和LINQ登录到我的应用程序。它连接到我在VisualStudio中创建的面向SQL服务的数据库。我遇到的问题是我不理解的,我希望有人能在这方面帮助我。我创建了两个消息框,试图查看我的代码输出,但我没有从中得到任何东西 如果有人能帮忙,那就太好了 public bool UserLogin(string User, string Pass) { var Database = new ExampleDataSet(); var query = from
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);
}
如果你的意思是user=employeeId
Employee.EmployeeID.ToString() == user.ToLower()
如果没有:
Employee.EmployeeName.ToLower() == user.ToLower()
关于消息框,您应该知道,如果您的意思是user=employeeId,则
return
之后的任何语句都不会执行
Employee.EmployeeID.ToString() == user.ToLower()
如果没有:
Employee.EmployeeName.ToLower() == user.ToLower()
关于消息框,您应该知道
return
之后的任何语句都不会执行当您返回时,函数执行将停止,因为它已完成并将返回从中调用的值。所以你回来后什么事都不会发生。尝试将消息框置于返回之前显示:
MessageBox.Show("You are logged in");
return true;
对于false版本也是如此。当您返回时,函数执行将停止,因为它已完成,并将返回从中调用的值。所以你回来后什么事都不会发生。尝试将消息框置于返回之前显示:
MessageBox.Show("You are logged in");
return true;
错误版本也是如此。返回语句之后的消息框不会显示为,将消息框移动到返回语句之前查看它们。返回语句之后的消息框不会显示为,将消息框移动到返回语句之前查看它们它们。从您编写的代码来看,问题似乎是您将员工的字符串表示形式与其员工ID
属性员工.EmployeeId.ToString()==Employee.ToLower()
进行了比较。此行将始终返回false
,除非您重写Employee
类的ToString()
方法以返回属性EmployeeId
(我认为您没有这样做)。
请改为尝试此操作(假设参数User
包含用户的名称):
从您编写的代码来看,问题似乎在于您将员工的字符串表示形式与其员工ID
属性Employee.EmployeeId.ToString()==Employee.ToLower()
进行了比较。此行将始终返回false
,除非您重写Employee
类的ToString()
方法以返回属性EmployeeId
(我认为您没有这样做)。
请改为尝试此操作(假设参数User
包含用户的名称):
我已更改了您的代码…您的if-else部分无效…您正在将employee.ID与employee本身进行比较..请使用以下代码进行尝试
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);
}
我已更改了您的代码…您的if-else部分无效…您正在将employee.ID与employee本身进行比较..请使用以下代码进行尝试
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);
}
不建议编写自己的用户身份验证。这是非常困难的,在大多数情况下,您可以使用一个已经由Windows或dot net框架提供的
例如,应用程序不应以纯文本形式存储用户密码。如果您的应用程序或数据库遭到破坏,攻击者不仅可以完全访问您的应用程序,还可以获得用户可能在其他地方使用过的密码列表
如果需要存储用户凭据,则应首先对其进行加密,然后使用安全的哈希算法进行哈希。这将防止任何获得数据库访问权限的人学习用户密码
要验证密码,您需要在数据库中查找salt,将密码附加到salt中,对结果进行散列,然后将其与存储的值进行比较。如果它们相同,则用户输入了正确的密码
如果您正在编写将在windows域中使用的应用程序,则可以使用Active Directory组来控制对应用程序的访问。在最简单的级别上,您可以将应用程序存储在只有授权用户才能访问的文件夹中
您还可以使用组来控制对应用程序连接到的数据库的访问。如果您使用的是SQL server,则应将每个组置于SQL数据库角色中,该角色又被授予该角色所需的权限
在应用程序中,您可以查找用户组成员资格,并使用它确定要显示哪些表单/菜单选项,或者在未经授权的情况下退出应用程序
如果您正在编写ASP.NET应用程序,请考虑使用框架中内置的成员和角色。
不建议编写自己的用户身份验证。这是非常困难的,在大多数情况下,您可以使用一个已经由Windows或dot net框架提供的
例如,应用程序不应以纯文本形式存储用户密码。如果您的应用程序或数据库遭到破坏,攻击者不仅可以完全访问您的应用程序,还可以获得用户可能在其他地方使用过的密码列表
如果需要存储用户凭据,则应首先对其进行加密,然后使用安全的哈希算法进行哈希。这将防止任何获得数据库访问权限的人学习用户密码
要验证密码,您需要在数据库中查找salt,将密码附加到salt中,对结果进行散列,然后将其与存储的值进行比较。如果它们相同,则用户输入了正确的密码
如果您正在编写将在windows域中使用的应用程序,则可以使用Active Directory组来控制对应用程序的访问。在最简单的级别上,您可以将应用程序存储在只有授权用户才能访问的文件夹中
你可以去看医生