连接必须有效并打开(再次)
当我更改 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);
}
I'm having the error "Connection must be valid and open again, when I changed my sql query code. Can anyone help?? (edit) In form1 I have connected to database, in form2 I'm trying to add queries.
//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);
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
看起来连接正在被处置(或者甚至可能根本没有打开!)
理想情况下,我会将其更改为使用工作单元方法,并将您的实例包装在使用块中以确保它们被正确处置:
另外,在使用了
ExecuteReader()
之后调用cmd.ExecuteNonQuery();
的目的是什么?Looks like the connection is being disposed of (or possible not even opened at all!)
Ideally I'd change that to use a unit-of-work approach, and also wrap your instances in using blocks to ensure they are correctly disposed of:
Also, what's the purpose of calling
cmd.ExecuteNonQuery();
after you've already usedExecuteReader()
?当我在一个类中打开连接并尝试在不同的类/表单中使用它时,我遇到了这个确切的问题。一次打开多个连接是完全可以的,因此为每个类创建一个新的 MySqlConnection 实例,并在该类中打开和关闭它。
I had this exact problem when I opened a connection in one class and tried to use it in a different class/form. It is totally okay to more than one connection open at a time, so make a new MySqlConnection instance for every class, and open and close it inside that class.
尝试:
...在 ExecuteNonQuery() 之前
:) 我希望这会有所帮助,如果您仍然遇到问题,请告知。
另外,暂时尝试删除 cmd.ExecuteNonQuery,因为我认为它可能连接两次,因此出现错误“连接必须有效且打开”。它不能是“打开”的,因为您已经使用 ExecuteReader() 连接。
Try:
... BEFORE ExecuteNonQuery()
:) I hope this helps, please advise if you're still having troubles.
Also, for the time being, try removing cmd.ExecuteNonQuery, as I think it may be connecting twice, hence the error "Connection must be valid and open". It must not be "open" because you're already connected using ExecuteReader().