如何使用 ATL/MSOLEDBSQL 启用连接资源池?
How to enable connection resource pooling with ATL/MSOLEDBSQL?
我有 ATL 代码可以打开 sql 连接并启用连接资源池。
CDBPropSet dbinit;
dbinit[0].SetGUID(DBPROPSET_DBINIT);
dbinit[0].AddProperty(DBPROP_INIT_OLEDBSERVICES, (long)DBPROPVAL_OS_ENABLEALL);
CDataSource::OpenWithServiceComponents ("SQLNCLI11", dbinit, 1);
编辑
我正在从 SQLNCLI 迁移到 MSOLEDBSQL,以便启用 MULTISUBNETFAILOVER 选项。但是当使用 MSOLEDBSQL 作为提供程序使用 MULTISUBNETFAILOVER 调用 CDataSource::OpenWithServiceComponents
时,我得到错误。
CDBPropSet dbinit[2];
dbinit[0].SetGUID(DBPROPSET_DBINIT);
dbinit[0].AddProperty(DBPROP_INIT_OLEDBSERVICES, (long)DBPROPVAL_OS_ENABLEALL);
dbinit[1].SetGUID(DBPROPSET_SQLSERVERDBINIT);
dbinit[1].AddProperty(SSPROP_INIT_MULTISUBNETFAILOVER, VARIANT_TRUE));
CDataSource db;
db.OpenWithServiceComponents ("MSOLEDBSQL", dbinit, 2);
HR=0x80040e21, EXCEPTION_UNKNOWN (0x80040E21), No error info available.
如何启用 ATL/MSOLEDBSQL 连接资源池以及启用 MULTISUBNETFAILOVER?
这是由于 CDBPropSet
工具 class 附带的 AddProperty
实用方法。您使用 VARIANT_TRUE 这是 OLEDB 的正确值,但它强制 C++ 编译器使用此重载,因为 VARIANT_TRUE
是一个短的:
bool AddProperty(DWORD dwPropertyID, short nValue, DBPROPOPTIONS propoptions);
所以,只需使用真正的 C++ 布尔值,就像这样:
dbinit[1].AddProperty(SSPROP_INIT_MULTISUBNETFAILOVER, true));
实用程序 class 将传递 VARIANT_TRUE...
我有 ATL 代码可以打开 sql 连接并启用连接资源池。
CDBPropSet dbinit;
dbinit[0].SetGUID(DBPROPSET_DBINIT);
dbinit[0].AddProperty(DBPROP_INIT_OLEDBSERVICES, (long)DBPROPVAL_OS_ENABLEALL);
CDataSource::OpenWithServiceComponents ("SQLNCLI11", dbinit, 1);
编辑
我正在从 SQLNCLI 迁移到 MSOLEDBSQL,以便启用 MULTISUBNETFAILOVER 选项。但是当使用 MSOLEDBSQL 作为提供程序使用 MULTISUBNETFAILOVER 调用 CDataSource::OpenWithServiceComponents
时,我得到错误。
CDBPropSet dbinit[2];
dbinit[0].SetGUID(DBPROPSET_DBINIT);
dbinit[0].AddProperty(DBPROP_INIT_OLEDBSERVICES, (long)DBPROPVAL_OS_ENABLEALL);
dbinit[1].SetGUID(DBPROPSET_SQLSERVERDBINIT);
dbinit[1].AddProperty(SSPROP_INIT_MULTISUBNETFAILOVER, VARIANT_TRUE));
CDataSource db;
db.OpenWithServiceComponents ("MSOLEDBSQL", dbinit, 2);
HR=0x80040e21, EXCEPTION_UNKNOWN (0x80040E21), No error info available.
如何启用 ATL/MSOLEDBSQL 连接资源池以及启用 MULTISUBNETFAILOVER?
这是由于 CDBPropSet
工具 class 附带的 AddProperty
实用方法。您使用 VARIANT_TRUE 这是 OLEDB 的正确值,但它强制 C++ 编译器使用此重载,因为 VARIANT_TRUE
是一个短的:
bool AddProperty(DWORD dwPropertyID, short nValue, DBPROPOPTIONS propoptions);
所以,只需使用真正的 C++ 布尔值,就像这样:
dbinit[1].AddProperty(SSPROP_INIT_MULTISUBNETFAILOVER, true));
实用程序 class 将传递 VARIANT_TRUE...