Как включить объединение ресурсов OLEDB в приложении Delphi 7 - PullRequest
1 голос
/ 10 апреля 2009

Что нужно сделать, чтобы включить пул в приложении Delphi 7? Моя строка подключения:

Поставщик = SQLOLEDB.1; Исходный каталог =% s; Источник данных =% s; Пароль =% s; Идентификатор пользователя =% s; Службы OLE Db = -1

Я могу сказать, что пул соединений не достигается, посмотрев на счетчик производительности SQLServer: GeneralStatistics UserConnections - он сильно колеблется при запуске моего приложения. С пулом соединений я ожидал, что он достигнет устойчивого состояния. Кроме того, я вижу, что счетчики Logins / sec и Logouts / sec очень высоки - если бы использовались пулы соединений, Logouts / sec были бы на уровне или близки к нулю.

В поиске я нашел эту статью о пуле ресурсов:

http://www.ddj.com/database/184416942

Предполагается, что «если вы работаете на уровне OLEDB SDK (или COM) с использованием ATL, вам нужно написать еще немного кода» (помимо добавления OLE Db Services = -1 в строку подключения), чтобы получить пул соединений :

CDataSource db; CDBPropSet dbinit (DBPROPSET_DBINIT);

dbinit.AddProperty (DBPROP_AUTH_USERID, "MyName); dbinit.AddProperty (DBPROP_INIT_DATASOURCE, "MyServer); dbinit.AddProperty (DBPROP_INIT_CATALOG, "MyDb); dbinit.AddProperty (DBPROP_INIT_PROMPT, (короткий) 4); dbinit.AddProperty (DBPROP_INIT_LCID, (long) 1033); dbinit.AddProperty (DBPROP_INIT_OLEDBSERVICES, (long) DBPROPVAL_OS_ENABLEALL); HRESULT hr = db.OpenWithServiceComponents (_T ("sqloledb") и dbinit);

К сожалению, этот код для меня греческий, и я не уверен, как перевести его на Delphi (или, если это вообще необходимо).

Я также стараюсь не менять строку подключения вообще. Любые предложения о том, что еще мне нужно сделать, чтобы включить пул ресурсов?

Ответы [ 2 ]

1 голос
/ 11 апреля 2009

Вам необходимо постоянно держать один экземпляр соединения открытым ... если оно упадет до нуля, ADO восстановит соединение для аутентификации пользователя.

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

Вы не упоминаете об этом, но используете ли вы реализацию ADO Delphi (dbGo для Delphi 7, IIRC) для доступа к данным? Если да, вы подключаете все через один и тот же TADOConnection? Если это так, он должен выполнять пул для вашего приложения (это означает, что одна работающая копия вашего приложения использует одно соединение с сервером БД).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...