已经是一个与此Connection相关联的开放DataReader

时间:2013-07-23 08:57:34

标签: c# mysql

我使用下面的代码从C#中的mySql获取数据。当我这样做时,我得到代码下面提到的错误。我发现了一些关于这个主题的问题,但是他们使用了DataReader,我不是。

MySqlConnection sq = new MySqlConnection("...");
sq.Open();
MySqlCommand sc = new MySqlCommand("select * from users", sq);
DataSet ds = new DataSet();
MySqlDataAdapter da = new MySqlDataAdapter(sc);
da.Fill(ds);
sq.Close();

我的错误:

  

已经有一个与此Connection关联的开放DataReader   必须先关闭。

4 个答案:

答案 0 :(得分:1)

在您的连接字符串中添加“MultipleActiveResultSets = True;”

答案 1 :(得分:1)

我不知道这是否能解决您的问题,但是......

使用using statament作为连接,命令和dataadapter。这将处理实现IDisposable的所有对象,并关闭连接:

using(var sq = new MySqlConnection("..."))
using(var sc = new MySqlCommand("select * from users", sq))
using(var da = new MySqlDataAdapter(sc))
{
    DataSet ds = new DataSet();
    da.Fill(ds); 
    // you don't need to open/close the connection with a datadapter
} // but even without a dataadapter the using would have been closed the connection here

答案 2 :(得分:0)

正如错误所说,你没有关闭你打开的每个连接。

可能是因为你获得了例外。你可以使用蒂姆的建议:

using(var sq = new MySqlConnection("..."))
using(var sc = new MySqlCommand("select * from users", sq))
using(var da = new MySqlDataAdapter(sc))

或者您可以使用try catch语句:

try
{
// Your code here
}
catch
{
    // Whatever code you want here
}
finally
{
    da.Close();
    sc.Close();
    sq.Close();
}

答案 3 :(得分:0)

new MySqlCommand("select * from users", sq)

  

MySqlDataAdapter的这个实现打开和关闭一个   MySqlConnection如果尚未打开。这在a中很有用   必须为两个或多个DbDataAdapter.Fill方法调用的应用程序   更多MySqlDataAdapter对象。如果MySqlConnection已经打开,   你必须显式调用MySqlConnection.Close或   MySqlConnection.Dispose关闭它。

所以,无需打开连接,MySqlDataAdapter将在需要时打开它。

最好使用使用语句作为其他答案。

相关问题