如何在C#Windows窗体中登录(从MySQL服务器/数据库获取数据)?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在C#Windows窗体中登录(从MySQL服务器/数据库获取数据)?相关的知识,希望对你有一定的参考价值。

我想问一下如何在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++;
}
答案

查看代码,您似乎将文本框作为密码参数传递:

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

然后你做这个检查:

if (rez == password.Text)

这表明password是一个文本框。

所以正确的代码应该是:

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

我还假设username是一个文本框,所以当你创建用户名参数时,你应该使用:

cmd.Parameters.AddWithValue("@usr", username.Text);
另一答案

如果文本框ID是“用户名”和“密码”,那么您需要传递该文本框的值,如下所示:

“username.text”和“password.text”

然后你就可以登录了。

另一答案

你这样做是错的。你需要阅读读者。这是你应该做的:

  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!");

   }

以上是关于如何在C#Windows窗体中登录(从MySQL服务器/数据库获取数据)?的主要内容,如果未能解决你的问题,请参考以下文章

如何在c#中避免多个windows窗体实例

从 C# Windows 窗体调用 PHP Web 服务

C# Windows 窗体组合框显示错误的“显示值”

如何在 Windows 窗体应用程序中获取 *** 用户的当前用户身份?

如何从文本框(windows窗体)检查主键是不是存在于我的数据库中,c#

如何在 Windows 窗体中运行 MS Access 2013 中保存的查询。 C#