После изменения таблицы Sql я получаю СООБЩЕНИЕ ОБ ОШИБКЕ [HY000] [Microsoft] [Драйвер ODBC SQL Server] Соединение занято результатами для другого hstmt

#c# #sql-server #vb.net #odbc

#c# #sql-сервер #vb.net #odbc

Вопрос:

В Sql Server 2012 после добавления двух новых полей с использованием ALTER, когда мы пытаемся снова использовать соединение в других запросах, мы получаем:

ОШИБКА [HY000] [Microsoft] [Драйвер ODBC SQL Server] Соединение занято результатами для другого hstmt

Обратите внимание, что наше соединение выполняется с использованием соединения ODBC.

Кстати, когда я копирую уже измененную базу данных на свой компьютер разработчика, это также происходит.

Кто-нибудь знает, как это решить?

Ответ №1:

Это информирует вас о том, что у вас не может быть нескольких активных запросов, запущенных в одном соединении.

Для этого вы можете :

  • Закройте или извлеките все записи из набора записей, прежде чем делать что-либо еще.
  • Откройте новое соединение для второго набора записей, пока
    первый все еще активен.

Комментарии:

1. Я получил это в .Fill() Я ввел команды .Open() amp; .Close() до и после этого. Спасибо за подсказку.

2. Исправление: я получил это в .Fill() Я ввел команды .Open() amp; .Close() до и после того, что «не нужно» по ссылке, потому что оно открывается и закрывается само по себе, но выглядит не всегда. Спасибо за подсказку.

Ответ №2:

Я бы проверил, выполняете ли вы SQLFreeStmt (SQL_CLOSE) или SQLCloseCursor () после вашего ИЗМЕНЕНИЯ. По причине, указанной выше Ясином__

Комментарии:

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

Ответ №3:

Я по ошибке не закрыл a DataReader перед созданием другого DataReader для того же соединения.

Обратите DataReader внимание, что сборщик мусора ранее автоматически удалял его. Я упоминал, что была создана ТАБЛИЦА ALTER, в которую были добавлены 2 новых поля. Причина, по которой программа чтения не была удалена GC, заключалась в том, что я не прочитал из нее все поля (я прочитал все, кроме 2 новых полей).

Сборщик GC первого читателя был просто удачей, пока я не добавил эти поля.После этого он больше не собирал reader, и я получил это исключение.

В любом случае, я закрыл программу чтения внутри Finally блока, и теперь она работает.

Что все еще остается загадкой, так это то, что на Sql Server 2008 и (наверняка) на Access я не получил исключения для того же сценария. Но я не уверен.