繁体   English   中英

已与此连接关联的打开的DataReader

[英]Already an open DataReader associated with this Connection

我使用下面的代码从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();

我的错误:

已经有一个与此连接相关联的打开的DataReader,必须先关闭它。

在您的连接字符串中,只需添加“ MultipleActiveResultSets = True;”即可。

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

对连接,命令和数据适配器using using语句。 这将处置实现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

如错误所述,您并没有关闭打开的每个连接。

可能是因为您得到的例外。 您可以使用蒂姆的建议:

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();
}

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

MySqlDataAdapter的此实现打开和关闭MySqlConnection(如果尚未打开)。 这对于必须为两个或多个MySqlDataAdapter对象调用DbDataAdapter.Fill方法的应用程序很有用。 如果MySqlConnection已经打开,则必须显式调用MySqlConnection.Close或MySqlConnection.Dispose将其关闭。

因此,无需打开连接, MySqlDataAdapter会在需要时打开它。

更好地使用using语句作为其他答案。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM