簡體   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