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