2013-07-23 2 views
1

Я использую следующий код для получения данных из mySql в C#. Когда я это делаю, я получаю ошибку, указанную ниже кода. Я нашел вопрос о предмете, но они использовали DataReader, а я нет.Уже открытый 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(); 

Моя ошибка:

There is already an open DataReader associated with this Connection which must be closed first.

ответ

1

в строке подключения просто добавьте "MultipleActiveResultSets = True;"

+0

Я думаю, что mysql не поддерживает это –

+0

Oh !! я пропустил это, я думаю, вы должны попробовать использовать ключевое слово, которое будет удалять соединения после использования – CSharped

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 
+0

1+ для использования операторов 'using' – Damith

0

как сказала ошибка, вы не закрывая каждое соединение при открытии.

Возможно, из-за этого и исключения вы получаете. Вы можете использовать Тим предложить:

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

или вы можете использовать попытку поймать заявление:

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

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

This implementation of the MySqlDataAdapter opens and closes a MySqlConnection if it is not already open. This can be useful in a an application that must call the DbDataAdapter.Fill method for two or more MySqlDataAdapter objects. If the MySqlConnection is already open, you must explicitly call MySqlConnection.Close or MySqlConnection.Dispose to close it.

так, нет необходимости открывать соединение, MySqlDataAdapter будет открыть его, когда необходимо.

лучше использовать используя заявления как другие ответы.

Смежные вопросы

 Смежные вопросы