C# 已使用此连接打开DataReader

C# 已使用此连接打开DataReader,c#,mysql,.net,C#,Mysql,.net,因此,我的应用程序中基本上有两个连接: conn = new MySqlConnection("server=" + ip + ";uid=" + user +";pwd=" + pass + ";database=" + db); readconn = new MySqlConnection("server=" + ip + ";uid=" + user + ";pwd=" + pass + ";database=" + db); 我仅将conn用于执行语句,如UPDATE和INSERT。然

因此,我的应用程序中基本上有两个连接:

conn = new MySqlConnection("server=" + ip + ";uid=" + user +";pwd=" + pass + ";database=" + db);
readconn = new MySqlConnection("server=" + ip + ";uid=" + user + ";pwd=" + pass + ";database=" + db);
我仅将
conn
用于执行语句,如UPDATE和INSERT。然后,只有当有人加入处理SELECT语句的服务器时,我才使用
readconn

然后,发生此错误时似乎没有模式,但每次都是由相同的函数引起的(该函数在
conn
连接上对事务执行插入查询)

我不明白的是,此堆栈跟踪显示此错误发生在使用
conn
而不是
readconn
的函数中。在
conn
上,从来没有与之关联的数据读取器。这几乎就像只有一个连接,但这就是为什么我专门打开两个不同的连接,一个用于阅读,一个用于插入


如果您有任何帮助或建议,我们将不胜感激,也许我只是错过了一些显而易见的事情。

您需要关闭与conn的连接。close()

或者更好的方法是,使用类似于:

using (MySqlConnection conn = new MySqlConnection(connectionString))
{
//Your code
}

using (MySqlConnection readConn = new MySqlConnection(connectionString))
{
//Your code
}

它将自动关闭连接;)

向我们展示您打开和使用
conn
的代码。您是否暗示我应该创建连接,执行查询,然后关闭连接?我的印象是,我应该在程序运行时保持与数据库的活动连接,而不必为每个查询初始化新连接。@JaTochNietDan您应该只在数据库事务的作用域而不是应用程序的生命周期内保持连接打开。如果您在循环中执行事务,请在循环期间保持它处于打开状态。我建议您每次都打开一个连接。但是,这取决于你。如果您使用“using”打开一个新连接,在使用结束时,您将确保该连接将被打开。@jatochnietan
using
关键字的最佳部分是,除了关闭连接外,它还将处理该对象。大量的
SqlConnection
对象非常昂贵,可能会导致问题。因此,使用块将
IDisposable
对象包装在
中始终是最佳做法。我们很乐意提供帮助;)解释得也很好,埃文!
using (MySqlConnection conn = new MySqlConnection(connectionString))
{
//Your code
}

using (MySqlConnection readConn = new MySqlConnection(connectionString))
{
//Your code
}