После выполнения команды мы имеем некоторые данные в виде таблицы. Эту таблицу надо исследовать на предмет колонок и типов их.
//Группа переменных для получения данных о таблицы IColumnsInfo* pIColumnsInfo;
Мы должны запросить интерфейс, который умеет получать информацию о колонках.
// получаем данные о таблице hr=pIRowset->QueryInterface(IID_IColumnsInfo, (void**)&pIColumnsInfo); if (FAILED(hr)) { pIRowset->Release(); cout << "Error GetInfo Tables" << endl; pIDBInitialize->Uninitialize(); pIDBInitialize->Release(); CoUninitialize(); return; }
IColumnsInfo это интерфейс, который позволяет нам получить информацию относительно полученных данных. Его можно запросить у интерфейса IRowset который этими данными и владеет. У этого интерфейса есть метод, который возвращает колонку и называется он GetColumnInfo.
HRESULT GetColumnInfo ( ULONG * pcColumns, //количество колонок DBCOLUMNINFO ** prgInfo, //массив структур с информацией о колонках OLECHAR ** ppStringsBuffer //массив структур для хранения строковых значений );
Давайте попробуем? Надо добавить переменные.
//Группа переменных для получения данных о таблице IColumnsInfo* pIColumnsInfo; ULONG nCols;DBCOLUMNINFO* pColumnsInfo = NULL; OLECHAR* pColumnStrings = NULL;
И получить информацию.
// получаем данные о таблице hr=pIRowset->QueryInterface(IID_IColumnsInfo, (void**)&pIColumnsInfo); if (FAILED(hr)) { pIRowset->Release(); cout << "Error GetInfo Tables" << endl; pIDBInitialize->Uninitialize(); pIDBInitialize->Release(); CoUninitialize(); return; } hr = pIColumnsInfo->GetColumnInfo(&nCols, &pColumnsInfo,&pColumnStrings); if (FAILED(hr)) { cout << "Error GetColumnInfo" << endl; pIRowset->Release(); pIColumnsInfo->Release(); pIDBInitialize->Uninitialize(); pIDBInitialize->Release(); CoUninitialize(); return; } cout << nCols << endl; pIRowset->Release(); pIColumnsInfo->Release(); pIDBInitialize->Uninitialize(); pIDBInitialize->Release(); // Деинициализация COM CoUninitialize(); }
На экране Вы должны увидеть число 4 так как мы и запрашивали в SQL операторе.
LPCOLESTR wSQLString = OLESTR("SELECT CompanyName,City, Phone, Fax FROM Customers ORDER BY CompanyName, City");
Но ведь мы могли и не задать, если бы использовали * вместо имен колонок.