在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 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(或者甚至是必要的)。
我也小心不要改变连接字符串。关于我可能需要做些什么才能启用资源池的任何建议?
答案 0 :(得分:1)
您需要始终打开一个连接实例...如果它降至零,则ADO将重新建立连接以对用户进行身份验证。
答案 1 :(得分:0)
您没有提到它,但您是否正在使用Delphi的ADO实现(dbGo for Delphi 7,IIRC)进行数据访问?如果是这样,你是否通过相同的TADOConnection连接所有东西?如果是这样,它应该为您的应用程序进行池化(意味着应用程序的一个正在运行的副本使用一个到DB服务器的连接)。