#include "stdafx.h"
#include <atlstr.h>
#import "c:\program files\common files\system\ado\msado15.dll" no_namespace rename ("EOF", "adoEOF")
void Test()
{
HRESULT hr;
// создать объект connection (соединение)
_ConnectionPtr conn;
hr = conn.CreateInstance(__uuidof(Connection));
if (FAILED(hr))
{
printf("Creation of connection object failed.");
return;
}
// открыть соединение (подключиться к базе данных)
_bstr_t connstr("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\\temp\\db1.mdb;Mode=ReadWrite");
_bstr_t user("");
_bstr_t password("");
hr = conn->raw_Open(connstr, user, password, adConnectUnspecified);
if (FAILED(hr))
{
printf("Failed to open database.");
return;
}
// выполнить SQL-запрос [выборка записей, у которых поле ID меньше либо равно 2]
_CommandPtr cmd;
hr = cmd.CreateInstance(__uuidof(Command));
if (FAILED(hr))
{
printf("Creation of command object failed.");
return;
}
cmd->ActiveConnection = conn;
cmd->CommandText = "SELECT * FROM table1 WHERE id <= ?;";
cmd->Parameters->Append(cmd->CreateParameter("", adInteger, adParamInput, sizeof(int), 2));
_RecordsetPtr rst = cmd->Execute(NULL, NULL, adCmdText);
while (!rst->adoEOF)
{
// вывести на экран значение полей ID и NAME и перейти к следующей записи
_variant_t id = rst->GetCollect("id");
_variant_t name = rst->GetCollect("name");
wprintf(L"Id: %d Name: %s\n", (long)id, (wchar_t *)name.bstrVal);
rst->MoveNext();
}
}
int _tmain(int argc, _TCHAR* argv[])
{
// инициализировать COM
CoInitialize(NULL);
try
{
Test();
}
catch (_com_error &e)
{
CString desc;
desc.Format(TEXT("%s"), (const char*)e.Description());
CString err;
if (desc==TEXT("(null)")) err.Format(TEXT("Код ошибки: 0x%x"), (int)e.Error());
else err.Format(TEXT("Код ошибки: 0x%x Описание: %s"), (int)e.Error(), desc.GetString());
::MessageBox(::GetActiveWindow(), err.GetString(), TEXT("Ошибка"), MB_OK|MB_ICONEXCLAMATION);
}
system("pause");
return 0;
}
|