Для того, чтобы двигаться дальше и запускать на выполнения команды нам нужно объявить дополнительные переменные.
//Группа переменных для выполнения команды ICommandText* pICommandText; LPCOLESTR wSQLString = OLESTR("SELECT CompanyName,City, Phone, Fax FROM Customers ORDER BY CompanyName, City"); IRowset* pIRowset;LONG cRowsAffected;
Первая переменная это указатель на интерфейс, с помощью которого можно выполнять текстовые команды. Дальше сама строка с SQL запросом. Дальше указатель на интерфейс для работы с рядами данных. И так в прошлый раз мы создали сессию. Пора создать объект команд. Все как всегда получаем интерфейс, проверяем на ошибки, предыдущий освобождаем.
// Создаем обьект команды hr = pIDBCreateCommand->CreateCommand(NULL, IID_ICommandText,(IUnknown**) &pICommandText); if (FAILED(hr)) { cout << "Error create command object" << endl; pIDBInitialize->Uninitialize(); pIDBInitialize->Release(); CoUninitialize(); return; } pIDBCreateCommand->Release();
Получив интерфейс на объект выполняющий текстовые команды мы теперь может наконец выполнить сам запрос SQL конечно проверив выполнение на корректность.
//Передаем строку с командой SQL pICommandText->SetCommandText(DBGUID_DBSQL, wSQLString); hr = pICommandText->Execute(NULL, IID_IRowset, NULL,&cRowsAffected, (IUnknown**) &pIRowset); if (FAILED(hr)) { cout << "Error Execute Command" << endl; pICommandText->Release(); pIDBInitialize->Uninitialize(); pIDBInitialize->Release(); CoUninitialize(); return; }
Ну вот, мы выполнили SQL запрос. Меня радует, что хоть до сюда добрались. Как то муторно все от этих новых технологий.