Mysql / C # ошибка: уже есть открытый DataReader, связанный с этим подключением, который должен быть закрыт первым - PullRequest
1 голос
/ 29 марта 2011

У меня есть кусок кода для выполнения команды mysql, но иногда он выдает исключение

Уже существует открытый DataReader, связанный с этим подключением, который должен быть закрыт первым

Это непредсказуемо, когда будет выброшено исключение, иногда моя программа работает нормально более 15 минут, но затем она падает. Я искал ответ в Интернете, но ничего не нашел. Это мой код:

 public static List<string> DoCommand(string commandLine, string myConString) {
             MySqlCommand command = new MySqlCommand(commandLine);
            List<string> tables = new List<string>();
            try {
                using (MySqlConnection mySqlConnection = new MySqlConnection(myConString)) {
                    mySqlConnection.Open();
                    command.Connection = mySqlConnection;
                    command.BeginExecuteReader();
                    using (MySqlDataReader SqlDR = command.ExecuteReader()) {
                        while (SqlDR.Read()) {  //Async reading, wait untill reading is done
                            tables.Add(SqlDR.GetString(0));
                        }
                        //SqlDR.Close();
                        //SqlDR.Dispose();
                    }
                    //mySqlConnection.Close();
                    //mySqlConnection.Dispose();
                }
            } catch (Exception exp) { } finally {
                command.Connection = null;
            }
            //System.Threading.Thread.Sleep(50);     //Give connection time to flush
            return tables;
        }

есть некоторые решения, которые не работают в комментариях. Это единственный код, который подключается к mysql, поэтому я уверен, что все подключения закрыты

Ответы [ 2 ]

3 голосов
/ 29 марта 2011

Если указанный выше код соответствует вашим ожиданиям, эта строка не требуется:

  command.BeginExecuteReader(); 

Метод SqlCommand.BeginExecuteReader :

Инициируетасинхронное выполнение оператора Transact-SQL или хранимой процедуры, описанной этой SqlCommand, и получение одного или нескольких наборов результатов с сервера

0 голосов
/ 29 марта 2011

Заменить

using (MySqlDataReader SqlDR = command.ExecuteReader())

с

using (MySqlDataReader SqlDR = command.EndExecuteReader()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...