Как включить пул ресурсов соединения с ATL / MSOLEDBSQL? - PullRequest
1 голос
/ 19 июня 2019

У меня есть ATL-код для открытия sql-соединения с включенным пулом ресурсов соединений.


    CDBPropSet  dbinit;
    dbinit[0].SetGUID(DBPROPSET_DBINIT);
    dbinit[0].AddProperty(DBPROP_INIT_OLEDBSERVICES, (long)DBPROPVAL_OS_ENABLEALL);
    CDataSource::OpenWithServiceComponents ("SQLNCLI11", dbinit, 1);

EDIT
Я в процессе перехода с SQLNCLI на MSOLEDBSQL, inorderвключить опцию MULTISUBNETFAILOVER.Но я получаю сообщение об ошибке, когда CDataSource::OpenWithServiceComponents вызывается с MSOLEDBSQL в качестве поставщика с MULTISUBNETFAILOVER.

    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?

1 Ответ

1 голос
/ 26 июня 2019

Это связано с утилитой AddProperty, которая поставляется с классом инструмента CDBPropSet.Вы используете VARIANT_TRUE, которое является правильным значением для OLEDB, но оно заставляет компилятор C ++ использовать эту перегрузку, потому что VARIANT_TRUE является коротким:

bool AddProperty(DWORD dwPropertyID, short nValue, DBPROPOPTIONS propoptions);

Итак, просто используйте истинный бул C ++, например так:

dbinit[1].AddProperty(SSPROP_INIT_MULTISUBNETFAILOVER, true));

И служебный класс передаст VARIANT_TRUE ...

...