Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Подключение через ADO  [new]
Alexander Mamontov
Member

Откуда: НСО
Сообщений: 85
Доброго времени всем!
На сервере Windows 2003 Sp1 R1 крутится приложение (С++ builder), которое в несколько потоков делает запросы в БД (Microsoft SQL Server 2005 - 9.00.3042). Иногда, при большом количестве запросов, возникает ошибка "Connection is bisy with results for another command". Все потоки работают через общее Ado-подключение. Как с ней бороться? Правильно ли создавать отдельное подключение для каждого потока, и насколько это будет медленее, если так сделать
8 сен 09, 09:43    [7629779]     Ответить | Цитировать Сообщить модератору
 Re: Подключение через ADO  [new]
Knyazev Alexey
Member

Откуда: Екб -> Мск
Сообщений: 10234
Блог
АДО умеет асинхронно работать
8 сен 09, 09:49    [7629794]     Ответить | Цитировать Сообщить модератору
 Re: Подключение через ADO  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74927
автор
Как с ней бороться?


Дофичивать набор до конца или переходить к использованию MARS, но для этого потребуется переход на Native Client.
8 сен 09, 09:56    [7629823]     Ответить | Цитировать Сообщить модератору
 Re: Подключение через ADO  [new]
Ken@t
Member

Откуда: 大地
Сообщений: 3264
Connection is bisy with results for another command". - ошибка в вашем ПО.
адо кроме асинхронного выполнения ещё и MARS подерживает. Смотреть общую архитектуру надо , но работать через "одно" соединение для вас плохо. Кстати взгляните профайлером, что шлёт борландовский "ADO", неприятно удивитесь.
8 сен 09, 09:56    [7629827]     Ответить | Цитировать Сообщить модератору
 Re: Подключение через ADO  [new]
Alexander Mamontov
Member

Откуда: НСО
Сообщений: 85
Спасибо за ответы
2 pkarklin-А есть у ADOConnection такой параметр, который проверяет, что все записи зафетченны. И, если можно, пару слов про MARS
--
2 Ken@t-как лучше, создавать соединение в потоках или сделать постоянный пул готовых соединений с запасом и счетчик. А профайлером еще не смотрел, что там плохого?
--
модераторам-прошу прощения, не знал, что тему перенесли
8 сен 09, 12:22    [7630826]     Ответить | Цитировать Сообщить модератору
 Re: Подключение через ADO  [new]
Ken@t
Member

Откуда: 大地
Сообщений: 3264
Alexander Mamontov
Спасибо за ответы
как лучше, создавать соединение в потоках или сделать постоянный пул готовых соединений с запасом и счетчик. А профайлером еще не смотрел, что там плохого?


Что -бы что-то конкретное посоветовать, необходимо знать, как предметную область так и архитектуру приложения. Я не обладаю этими знаниями.
Можно предположить о создании коннекта в момент создания потока.
MARS - multiple active result set.
8 сен 09, 12:35    [7630937]     Ответить | Цитировать Сообщить модератору
 Re: Подключение через ADO  [new]
Alexander Mamontov
Member

Откуда: НСО
Сообщений: 85
2 Ken@t-"Архитектрура" тут высоко сказано) Создается поток, его время жизни примерно соответвтвует времени запроса выборки (наборы данных бывают довольно большими)+время отображения информации в главном потоке программы (через синхронизацию), затем он самоуничтожается (freeonterminate). В соответствии с Вашей рекомендацией, теперь еще добавится время подключения. Про mars почитаю, спасибо!
8 сен 09, 12:44    [7631019]     Ответить | Цитировать Сообщить модератору
 Re: Подключение через ADO  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74927
Alexander Mamontov,

Такого параметтра нет. MARS подробно описан в документации по MS SQL.
8 сен 09, 12:46    [7631038]     Ответить | Цитировать Сообщить модератору
 Re: Подключение через ADO  [new]
Ken@t
Member

Откуда: 大地
Сообщений: 3264
Alexander Mamontov
2 Ken@t-"Архитектрура" тут высоко сказано) Создается поток, его время жизни примерно соответвтвует времени запроса выборки (наборы данных бывают довольно большими)+время отображения информации в главном потоке программы (через синхронизацию), затем он самоуничтожается (freeonterminate). В соответствии с Вашей рекомендацией, теперь еще добавится время подключения. Про mars почитаю, спасибо!


Время выборки запроса определяется временем обработки на сервере и времннем доставки ппакетов клиенту, мне кажется , что время потраченное на соединение ничтожно мало, по сравнению с выборкой. Соединяться лучше с windows авторизацией, однако если учётка находится под АД контролем - может быть длительное время авторизации. Архитектора есть даже в хелловорд, молчу уж про многопточное программирование.
8 сен 09, 12:54    [7631103]     Ответить | Цитировать Сообщить модератору
 Re: Подключение через ADO  [new]
Alexander Mamontov
Member

Откуда: НСО
Сообщений: 85
2 Ken@t-именно Windows авторизация и используется, приложение таким образом и перестрою
2 pkarklin-поищу в бол и мсдн
Спасибо Вам за ответы
8 сен 09, 13:13    [7631253]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить