c# - 连接必须有效并打开 SQL

标签 c# mysql visual-studio

出现问题。我检查了与数据库的连接 - 一切正常。 但是当我尝试检查数据库中的行时,会弹出错误:

System.InvalidOperationException: "Connection must be valid and open." c#

我该如何解决这个问题?

private void button1_Click(object sender, EventArgs e)
    {
        try
        {
            MySqlConnection conn = GetDBConnection();
            conn.Open();
            MySqlCommand selectCommand = new MySqlCommand("SELECT * FROM 'rcc_base' WHERE login='" + this.textBox1.Text + "', pass='" + this.textBox2.Text + "' ;");
            MySqlDataReader myReader;
            MessageBox.Show("Connection...");
            myReader = selectCommand.ExecuteReader();
            int count = 0;
            while (myReader.Read())
            {
                count = count + 1;
            }

            if (count == 1)
            {
                MessageBox.Show("All nice");
            }
            else
            {
                MessageBox.Show("Login failed");
            }

            conn.Close();
        }
        catch (Exception)
        {
            MessageBox.Show("Error");
        }
    }

最佳答案

在您的 MySqlCommand 中,您没有使用 MySqlConnection :( 。因此请按如下方式更改

 MySqlCommand selectCommand = new MySqlCommand("SELECT * FROM rcc_base WHERE 'login' ='" + this.textBox1.Text + "' AND 'pass' ='" + this.textBox2.Text + "' ;",conn);

另外,创建一个 MySqlConnection 的新实例,如下所示:

  MySqlConnection conn = new MySqlConnection;
  conn = GetDBConnection();

还有一些建议:你的代码不好。不要给 SqlCommand 中的列直接赋值,传递参数如 @abc ,这也会阻止 sql-injections。示例:

  MySqlCommand selectCommand = new MySqlCommand("SELECT COUNT(*) FROM rcc_base WHERE login=@username AND pass=@password;",conn);

  selectCommand.Parameters.Add("@username",MySqlDbType.VarChar).Value = textBox1.Text;
  selectCommand.Parameters.Add("@password",MySqlDbType.VarChar).Value = textBox2.Text;

 ///Now to check if data exists in the database or not

 int count = Convert.ToInt32(selectCommand.ExecuteScalar());

 if(count > 0)
  {
   ///data exists-login successful

  }
   else

  {
  ///data doesn't exists , login failed
   }

此外,您还应该在表单加载时打开连接,以便可以在整个类/表单中访问数据库。这是更好的方法:)

关于c# - 连接必须有效并打开 SQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49565872/

相关文章:

MySQL - 如果 LEFT OUTER JOIN 中不存在行,则排除行

c# - 在 C# 中将日期和时间加入 DateTime

c# - 根据列表中的存在和数量求和属性

c# - ASP.NET 服务器标签

php - 使用可滚动条 Jquery 限制返回结果

c# - Visual Studio .net 核心标签助手不工作

c# - 如何在代码中设置指向文本框的超链接。 - 与其他 HTML 标签

mysql - Unix 中的数据库管理

c - Windows 服务器上的 KMDF

windows - 包含 winuser.h 时出错。它将 ChangeMenu 定义为 ChangeMenuW 或 ChangeMenuA