Определить, когда метод заполнения SqlDataAdapter завершается - PullRequest
0 голосов
/ 11 апреля 2020

У меня есть глобальный SqlDataAdapter, который обслуживает кратные SqlCommand. Иногда проблема заключается в том, что метод заполнения SqlDataAdapter вызывает ошибку: 1003 *

There is already an open DataReader associated with this Command...

Мне интересно, существует ли какой-нибудь способ узнать, когда метод заполнения еще выполняется?

Я слышал, что SqlDataAdapter использует DataReader внутри.

Можно ли получить это DataReader?

1 Ответ

0 голосов
/ 11 апреля 2020

"У меня есть глобальный SqlDataAdapter" - это ваша ошибка. Избавьтесь от этого понятия и создайте DataAdapter всякий раз, когда вы захотите его использовать. Поместите его в оператор using, чтобы не забыть его утилизировать.

Кроме того, если вы кэшируете соединения и открываете их закрытие вручную, тоже не делайте этого - просто дайте адаптеру (что вы делаете на месте) строку SQL и строку подключения, и пусть она создает объекты подключения и команды. Единственный раз, когда вы захотите создать соединение и открыть его самостоятельно, это если у вас есть много операций, которые нужно выполнить последовательно с использованием различных адаптеров, возможно, как часть транзакции. Не забывайте, что открытие и закрытие соединения не обязательно делает TCP-соединение с базой данных (медленным) - это аренда и возврат текущего и пригодного для использования соединения из пула соединений и является тривиальной операцией

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

...