У меня есть метод, который делает запрос LDAP с использованием интерфейсов ADODB. При первом вызове execute в командном интерфейсе это работает, но любые последовательные вызовы не будут выполнены. Я пропустил некоторые процедуры очистки? При использовании vb эта проблема не возникает.
Пример минималистичного кода, где можно воспроизвести ошибку, приведен ниже. На самом деле я открываю и закрываю соединение ADODB для каждого запроса на выполнение.
CComPtr<ADODB::_Connection> spAdoDbConnection;
spAdoDbConnection.CoCreateInstance(__uuidof(ADODB::Connection))
spAdoDbConnection->raw_Open(CComBSTR("Provider='ADSDSOObject'; Integrated Security='SSPI';")
CComPtr<ADODB::_Command> spAdoDbCommand;
spAdoDbCommand.CoCreateInstance(__uuidof(ADODB::Command));
spAdoDbCommand->put_ActiveConnection(CComVariant(spAdoDbConnection));
spAdoDbCommand->put_CommandText(CComBSTR(strQuery)); //don't think that the query matters here
CComPtr<ADODB::_Recordset> spResultsGroups;
//first try returns with success and I can iterate through the results
spAdoDbCommand->raw_Execute(&vtMissing, &vtMissing, ADODB::adOptionUnspecified, &spResultsGroups);
spResultsGroups->raw_Close();
spResultsGroups.Release();
//second try (or more, on same or different thread) returns with error E_NOINTERFACE (0x80004002L)
spAdoDbCommand->raw_Execute(&vtMissing, &vtMissing, ADODB::adOptionUnspecified, &spResultsGroups);
Задача ещё не решена.
Других решений пока нет …