如何登录c#windows窗体(从mysql服务器/数据库获取数据)?

vwkv1x7d  于 2021-06-20  发布在  Mysql
关注(0)|答案(3)|浏览(319)

我想问,如果我有两个字段username和password,如何在windows窗体中实现登录功能。在数据库中,我有一个名为 users 在它的2个字段-用户名和密码。我想从数据库中获取密码,然后将其与文本框字段中输入的密码进行比较,如果密码相同,我想打开/显示/一个新表单。然而,我总是在 catch 代码块。我想问为什么会这样?

try
{
    if (i == 2)
    {
        Application.Exit();
    }

    conn.Open();
    string query = "select password from users where username = @usr and password = @pas";

    MySqlCommand cmd = new MySqlCommand(query, conn);
    cmd.Parameters.AddWithValue("@usr", username);
    cmd.Parameters.AddWithValue("@pas", password);

    MySqlDataReader myreader = cmd.ExecuteReader();

    string rez = (string)myreader.ToString();

    if (rez == password.Text)
    {
        frmMain mainF = new frmMain();
        mainF.Show();
    }
}
catch (Exception ex)
{
    MessageBox.Show("Username or password is incorrect!");
    i++;
}
0mkxixxg

0mkxixxg1#

你做错了。你需要从读者那里阅读。以下是您应该做的:

try
  {
    if (i == 2)
    {
      Application.Exit();
    }

    conn.Open();
  string query = "select password from users where username = @usr and password = @pas";

    MySqlCommand cmd = new MySqlCommand(query, conn);
    cmd.Parameters.AddWithValue("@usr", username);
    cmd.Parameters.AddWithValue("@pas", password);

    MySqlDataReader myreader = cmd.ExecuteReader();

    var password = string.Empty;
    while(myreader.Read())
    {
     password = myreader["password"];
    }

     if (password.Equals(password.Text))
     {
      frmMain mainF = new frmMain();
      mainF.Show();
     }
     else
     {
       MessageBox.Show("Username or password is incorrect!");
       i++;
     }
   }
   catch (Exception ex)
   {
   MessageBox.Show("An error has occured while reading from the database!");

   }
yk9xbfzb

yk9xbfzb2#

查看代码,您似乎正在传递一个文本框作为密码参数:

cmd.Parameters.AddWithValue("@pas", password);

然后再检查:

if (rez == password.Text)

这表明 password 是一个文本框。
所以正确的代码应该是:

cmd.Parameters.AddWithValue("@pas", password.Text);

我还要假设 username 是文本框,因此在创建用户名参数时应使用:

cmd.Parameters.AddWithValue("@usr", username.Text);
ijnw1ujt

ijnw1ujt3#

如果textbox id为“username”和“password”,则需要传递该textbox的值,如下所示:
“用户名.text”和“密码.text”
然后你就可以登录了。

相关问题