Поиск Windows C ++ (MFC) OLE DB или поиск группы ADO - PullRequest
1 голос
/ 05 марта 2012

Я должен выполнить групповой запрос следующим образом: GROUP ON System.ItemName OVER ( SELECT TOP 20 System.ItemName FROM SystemIndex ) Но когда я запускаю его с помощью C ++ ADO Recordset, я получаю исключение при открытии (когда я ищу запрос SELECT TOP 20 System.ItemName FROM SystemIndex, он прекрасно работает). так ... как выполнить групповой поиск таким образом?

Код ADO:

_ConnectionPtr connection = NULL;
    hr = connection.CreateInstance(__uuidof(Connection));
_RecordsetPtr recordset = NULL;
hr = recordset.CreateInstance(__uuidof(Recordset));
hr = recordset->Open("GROUP ON System.Kind AGGREGATE COUNT() as 'Total' OVER ( SELECT TOP 20 System.ItemName, System.ItemUrl FROM SystemIndex )", 
    connection.GetInterfacePtr(), adOpenForwardOnly, adLockReadOnly, adCmdText);

После долгих попыток я решаю столкнуться с OLE DB напрямую, но, похоже, трудно получить данные поиска

Код OLE DB:

CDataSource cDataSource; hr = cDataSource.OpenFromInitializationString (строка подключения);

if (SUCCEEDED(hr))
{
    CSession cSession;
    if (SUCCEEDED(hr))
    {
        CCommand<CDynamicAccessor, CRowset> cCommand;
        hr = cCommand.Open(cSession, L"GROUP ON System.ItemName OVER ( SELECT TOP 20 System.ItemName, System.Itemurl FROM SystemIndex )");

        if (SUCCEEDED(hr))
        {

            for (hr = cCommand.MoveFirst(); S_OK == hr; hr = cCommand.MoveNext())
            {
                DBORDINAL columns= cCommand.GetColumnCount();
                for (DBORDINAL i = 1; i <= columns; i++)
                {
                    PCWSTR pszName = cCommand.GetColumnName(i);
                    //HOW TO GET DATA TO A sdt::string ?
                }
            }
            cCommand.Close();
        }
    }
}
...