连接必须有效并且打开(再次)

时间:2010-11-21 00:16:12

标签: c# mysql odbc rows

我有错误“连接必须有效并再次打开,当我更改我的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);
}

3 个答案:

答案 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实例,并在该类中打开和关闭它。