【发布时间】:2010-10-18 19:54:21
【问题描述】:
需要做什么才能在 Delphi 7 应用程序中启用池化?我的连接字符串是:
Provider=SQLOLEDB.1;Initial Catalog=%s;Data Source=%s;Password=%s;User ID=%s;OLE Db Services=-1
我可以通过查看 SQLServer:GeneralStatistics UserConnections 性能计数器来判断连接池没有实现 - 当我的应用程序运行时它会大幅波动。通过连接池,我希望它能够达到稳定状态。此外,我发现 Logins/sec 和 Logouts/sec 计数器都非常高 - 如果使用连接池,Logouts/sec 将为零或接近零。
在搜索中,我发现了这篇关于资源池的文章:
http://www.ddj.com/database/184416942
它建议“如果您使用 ATL 在 OLEDB SDK(或 COM)级别工作,则必须编写更多代码”(除了将 OLE Db Services=-1 添加到连接字符串)以获得连接池:
CDataSource 数据库; CDBPropSet dbinit(DBPROPSET_DBINIT);
dbinit.AddProperty(DBPROP_AUTH_USERID, "我的名字); dbinit.AddProperty(DBPROP_INIT_DATASOURCE, "MyServer); dbinit.AddProperty(DBPROP_INIT_CATALOG, "MyDb); dbinit.AddProperty(DBPROP_INIT_PROMPT, (short)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(或者是否有必要)。
我也小心不要更改连接字符串。关于启用资源池我可能还需要做些什么的任何建议?
【问题讨论】:
标签: delphi oledb connection-pooling