C# 登录表单故障

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

我编写了以下代码,使用C#和LINQ登录到我的应用程序。它连接到我在VisualStudio中创建的面向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);
}

如果你的意思是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组来控制对应用程序的访问。在最简单的级别上,您可以将应用程序存储在只有授权用户才能访问的文件夹中

你可以去看医生