无法弄清楚为什么我的“登录”类什么也不返回

时间:2019-11-30 16:29:00

标签: c# sql

因此,我尝试创建一个登录屏幕,其中文本框的输入必须与数据库中的用户名和密码匹配。这可能是愚蠢的,但是我不知道为什么它不起作用。 这是我第一次使用stackoverflow,因此如果我做错了任何事情,请随时指出。

这是我的登录课程:

namespace WindowsFormsApp1
{
    class Logon
    {
        public static Users Login(string Gebruiker, string Wachtwoord)
        {
            Users NewUser = new Users();
            SqlConnection connection = Connection.GetConnection();


            string Username = "SELECT Username FROM Gegevens WHERE Username = @Username";

            SqlCommand username = new SqlCommand(Username, connection);
            username.Parameters.AddWithValue("@Username", Gebruiker);

            try
            {
                connection.Open();
                SqlDataReader GetUsername = username.ExecuteReader(CommandBehavior.SingleRow);

                if (GetUsername.Read())
                {
                    NewUser.Username = GetUsername["Username"].ToString();
                }

            }
            catch (SqlException ex)
            {

                throw ex;
            }

            finally { connection.Close(); }

            string Password = "SELECT Password FROM Gegevens WHERE Password = @Password";

            SqlCommand password = new SqlCommand(Password, connection);
            password.Parameters.AddWithValue("@Password", Wachtwoord);

            try
            {
                connection.Open();
                SqlDataReader GetPassword = password.ExecuteReader();


                if (GetPassword.Read())
                {

                    NewUser.Password = GetPassword["Password"].ToString();

                }

            }
            catch (SqlException ex2)
            {

                throw ex2;
            }
            finally { connection.Close(); }

            return NewUser;

        }
    }
}

用户类别:

namespace WindowsFormsApp1
{
    class Users
    {

        private string username;
        private string password;

        public Users() { }
        public string Username
        {
            get { return username; }
            set { username = value; }
        }
        public string Password  
        {
            get { return password; }
            set { password = value; }
        }

    }
}

最后按钮本身:

namespace WindowsFormsApp1
{
    public partial class Login : Form
    {

        public Login()
        {
            InitializeComponent();
        }


        private void btnAccept_Click(object sender, EventArgs e)
        {
            Users NewUser;

            string User = txtUsername.Text;
            string Pass = txtPassword.Text;


            NewUser = Logon.Login(User, Pass);

            if (User == NewUser.Username && Pass == NewUser.Password)
            {
                Form1 ls = new Form1();
                ls.Show();
            }
        }
    }
}

2 个答案:

答案 0 :(得分:0)

您应该使用一个查询来验证用户凭据,例如

SELECT top 1 1 FROM Gegevens WHERE Username = @Username and Password = @Password 

答案 1 :(得分:0)

实施要点

我可以在您的代码中看到以下几点:

string Password = "SELECT Password FROM Gegevens WHERE Password = @Password";

它不会验证用户是否具有目标密码,而只会从碰巧使用它的所有用户中返回多次您要查找的密码。

最好像这样使用一个查询

string userQuery = "SELECT Username, Password FROM Gegevens WHERE Username = "@Username" and Password =
    @Password";

第二个问题是如何从密码查询中检索数据。

NewUser.Username = GetUsername["Username"].ToString();

将其更改为类似的内容

SqlDataReader userReader = userQueryExecuteReader();

if (userReader.Read())
{
     NewUser.Username = userReader[0].ToString();
     NewUser.Password = userReader[1].ToString();
}

调试帮助

您可以通过放置断点来逐步调试代码。 MS guidance here。请这样做,并让我们知道确切的错误或代码在何处停止。然后我们可以帮助您解决确切的问题。

欢迎来到。