1

在 Delphi 7 应用程序中启用池需要做什么?我的连接字符串是:

提供程序=SQLOLEDB.1;初始目录=%s;数据源=%s;密码=%s;用户 ID=%s;OLE Db 服务=-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, "MyName); 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(或者是否有必要)。

我也小心不要更改连接字符串。关于我可能需要做些什么来启用资源池的任何建议?

4

2 回答 2

1

您需要始终保持一个连接实例处于打开状态...如果它降至零,则 ADO 将重新建立连接以对用户进行身份验证。

于 2009-04-10T23:24:46.323 回答
0

您没有提到它,但是您是否使用 Delphi 的 ADO 实现(dbGo for Delphi 7,IIRC)进行数据访问?如果是这样,您是否通过同一个 TADOConnection 连接所有内容?如果是这样,它应该为您的应用程序进行池化(这意味着您的应用程序的一个运行副本正在使用与数据库服务器的一个连接)。

于 2009-04-10T20:33:35.407 回答