Как поставить в очередь доступ к базе данных? - PullRequest
1 голос
/ 06 июня 2011

У меня есть графический интерфейс, в котором различные части показанной информации извлекаются из базы данных. Чтобы графический интерфейс не зависал, я попытался поместить запросы к базе данных в BackgroundWorkers. Поскольку они обращаются к базе данных асинхронно, я получаю исключение, сообщающее, что соединение с базой данных уже открыто и используется другим.

Можно ли создать очередь для доступа к базе данных?

Я изучил Task и ContinueWith, но поскольку я пишу код на .Net framework 3.5, это не вариант.

Ответы [ 3 ]

4 голосов
/ 06 июня 2011

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

То, что вы делаете неправильно, это повторное использование одного и того же экземпляра IDbConnection в разных потоках.Это нет-нет: каждый поток должен иметь свой собственный экземпляр.

1 голос
/ 06 июня 2011

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

0 голосов
/ 06 июня 2011

Попробуйте использовать объекты пула. Кроме того, согласно вашему описанию, вы пытаетесь открыть соединение на незамкнутом объекте соединения.

...