2009-04-10 68 views
0

需要做什麼才能在Delphi 7應用程序中啓用池?我的連接字符串是:如何在Delphi 7應用程序中啓用OLEDB資源池

提供商= SQLOLEDB.1;初始目錄=%s的;數據源=%s的;密碼=%s的;用戶ID =%s的; OLE DB服務= -1

我可以通過查看SQLServer:GeneralStatistics UserConnections性能計數器來判斷連接池是否實現 - 當我的應用程序運行時,它會波動很大。通過連接池,我希望它能夠達到穩定狀態。另外,我看到登錄/秒和註銷/秒計數器都非常高 - 如果使用連接池,則註銷/秒將在零或接近零。

在尋找,我發現這篇文章的資源池:

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,(長)1033); dbinit.AddProperty(DBPROP_INIT_OLEDBSERVICES,(長)DBPROPVAL_OS_ENABLEALL); HRESULT HR = db.OpenWithServiceComponents(_T(「SQLOLEDB」),&使用dbinit);

不幸的代碼是希臘給我,我不知道如何翻譯,爲德爾福(或者其甚至是必要的)。

我也注意不要更改連接字符串。有關我還需要做什麼來啓用資源池的任何建議?

回答

0

您需要始終保持連接的一個實例處於打開狀態...如果它降到零,ADO將重新建立連接以驗證用戶身份。

+0

但是,連接池的功能不是讓代碼打開和關閉連接,而不實際關閉與服務器的連接嗎?如果我在IIS中運行相同的代碼,我會看到它創建了2個連接到Db服務器的連接,該連接持續了應用程序的生命週期。 – 2009-04-12 19:16:46

0

你沒有提到它,但是你使用Delphi的ADO實現(dbGo for Delphi 7,IIRC)來訪問數據嗎?如果是這樣,你是否通過相同的TADOConnection連接了所有的東西?如果是這樣,它應該爲您的應用程序進行池化(這意味着應用程序的一個運行副本正在使用一個連接到數據庫服務器)。

+0

是的我在Delphi 7中使用dbGo。在我希望合併的代碼中可以提供幫助的代碼中不會共享相同的連接。 – 2009-04-10 21:47:54

相關問題