我有错误“连接必须有效并再次打开,当我更改我的SQL查询代码时。任何人都可以帮忙??(编辑)在form1中我连接到数据库,在form2我正在尝试添加查询。
//IN Class1.cs
public void test(string query, string name)
{
MySql.Data.MySqlClient.MySqlCommand cmd = new MySql.Data.MySqlClient.MySqlCommand(query, connection);
cmd.CommandText = @query;
cmd.Parameters.AddWithValue("Name", name);
MySql.Data.MySqlClient.MySqlDataReader Reader = cmd.ExecuteReader();
while (Reader.Read())
{
Console.WriteLine(Reader[0]);
}
cmd.ExecuteNonQuery();
}
//IN Form2.cs
private void button2_Click(object sender, EventArgs e)
{
name = textBox1.Text;
var obj = new Class1();
obj.test(@"SELECT * FROM players WHERE name = ?Name;", name);
}
答案 0 :(得分:2)
看起来连接正在处理(或者甚至可能根本没有打开!)
理想情况下,我会改变它以使用工作单元方法,并使用块包装您的实例以确保它们被正确处理:
using (var connection = new MySqlConnection("connection-string"))
{
using (var command = new MySqlCommand(query, connection))
{
connection.Open();
command.Parameters.AddWithValue("?name", name);
using (var reader = command.ExecuteReader())
{
while (reader.Read())
{
Console.WriteLine(reader[0]);
}
}
}
}
另外,在您使用cmd.ExecuteNonQuery();
之后调用ExecuteReader()
的目的是什么?
答案 1 :(得分:0)
尝试:
cmd.Open();
......在ExecuteNonQuery()之前
:)我希望这会有所帮助,请告知您是否还有麻烦。
此外,暂时尝试删除cmd.ExecuteNonQuery,因为我认为它可能连接两次,因此错误“连接必须有效且打开”。它不能是“打开”的,因为你已经使用ExecuteReader()连接了。
答案 2 :(得分:0)
当我在一个类中打开一个连接并尝试在不同的类/表单中使用它时,我遇到了这个问题。一次打开多个连接是完全可以的,所以为每个类创建一个新的MySqlConnection实例,并在该类中打开和关闭它。