我使用下面的代码从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 必须先关闭。
答案 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
将在需要时打开它。
最好使用使用语句作为其他答案。