C#WPF登录到SQL Server数据库

时间:2018-02-17 07:35:11

标签: c# sql-server wpf

我在这里有代码,它会检查输入的用户名和密码是否正确,我的问题是在我的数据库中我有一个用户名:“ADMIN”和密码:“ADMIN”但每当我尝试输入“admin”时对于用户名和密码,它仍然允许我进入主窗口,这意味着我的布尔是真的。

这是我的代码:

update

2 个答案:

答案 0 :(得分:3)

您可以在SqlCommand上使用ExecuteReader来读取值 - 您可以将这些值与用户提供的值进行比较。用户名不应该区分大小写。

我的回复假设您的用户表中的用户名是唯一的 - 我认为这是非常有效的假设。

由于您只需要用户名和密码,您可能需要将选择查询修改为:

SELECT UserName, Password 
FROM Users 
WHERE Username = @Username AND Password = @Password

在这种情况下,您修改后的代码段可能类似于:

public bool IsAccountValid(string userLogin, string userPassword)
    {
        bool flag = false;

        try
        {
            accessToDatabase.OpeningDatabase();
            String query = "SELECT * FROM Users where Username=@Username AND Password=@Password";
            SqlCommand sqlCmd = accessToDatabase.Command(query);

            sqlCmd.CommandType = CommandType.Text;
            sqlCmd.Parameters.AddWithValue("@Username", userLogin);
            sqlCmd.Parameters.AddWithValue("@Password", userPassword);

             var reader = sqlCmd.ExecuteReader();
                    if (reader.HasRows)
                    {
                        while (reader.Read())
                        {
                            if(userPassword == reader[0].ToString())
                            {
                                flag = true;
                            }
                        }
                    }
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }
        finally
        {
            accessToDatabase.ClosingDataBase();
        }

    return flag; //returns false if query does not exists...
}

其他替代方法是修改你的sql查询本身以确保它在where here

之类的子句中处理区分大小写的匹配

在这种情况下,您无需对ADO.NET代码进行任何更改。

答案 1 :(得分:1)

更好的方法是更改​​区分大小写搜索的查询:

String query = "SELECT * FROM Users where 
Username=@Username COLLATE SQL_Latin1_General_CP1_CS_AS 
AND Password=@Password COLLATE SQL_Latin1_General_CP1_CS_AS";   

另一种方法是进行二元投射:

String query = "SELECT * FROM Users 
where CAST(Username as varbinary(100))=CAST(@Username as varbinary(100))
 AND CAST(Password as varbinary(100))=CAST(@Password as varbinary(100))";