该程序说明了如何从字段检索数值并将数值转换为 C++ 变量。#define INITGUID
#import "c:/Program Files/Common Files/System/ADO/msado15.dll"
no_namespace rename("EOF", "EndOfFile")
#include <stdio.h>
#include "icrsint.h"void dump_com_error(_com_error &e)
{
printf("Error/n");
printf("/a/tCode = %08lx/n", e.Error());
printf("/a/tCode meaning = %s", e.ErrorMessage());
_bstr_t bstrSource(e.Source());
_bstr_t bstrDescription(e.Description());
printf("/a/tSource = %s/n", (LPCSTR) bstrSource);
printf("/a/tDescription = %s/n", (LPCSTR) bstrDescription);
}class CCustomRs :
public CADORecordBinding
{
BEGIN_ADO_BINDING(CCustomRs)
ADO_VARIABLE_LENGTH_BINDING_ENTRY(1, adVarChar, m_szau_lname,
sizeof(m_szau_lname), lau_lnameStatus, FALSE)
ADO_VARIABLE_LENGTH_BINDING_ENTRY(2, adVarChar, m_szau_fname,
sizeof(m_szau_fname), lau_fnameStatus, TRUE)
END_ADO_BINDING()public:
CHAR m_szau_lname[41];
ULONG lau_lnameStatus;
CHAR m_szau_fname[41];
ULONG lau_fnameStatus;
};VOID main()
{
HRESULT hr;
IADORecordBinding *picRs = NULL;
::CoInitialize(NULL); try
{
_RecordsetPtr pRs.CreateInstance(__uuidof(Recordset)); CCustomRs rs;
pRs->Open("select FirstName, LastName, Age from Employees",
"dsn=pubs;uid=sa;pwd=;",
adOpenStatic, adLockOptimistic, adCmdUnknown);
if (FAILED(hr = pRs->QueryInterface(__uuidof(IADORecordBinding),
(LPVOID*)&picRs)))
_com_issue_error(hr);
if (FAILED(hr = picRs->BindToRecordset(&rs)))
_com_issue_error(hr); while (VARIANT_FALSE == pRs->EndOfFile)
{
// 处理 CCustomRs C++ 实例变量中的数据。 printf("/a/tName = %s /t%s",
(lau_fnameStatus == adFldOK ? m_szau_fname : "<NULL>"),
(lau_lnameStatus == adFldOK ? m_szau_lname): "<NULL>")); // 更改 Recordset 的当前行。
// 新当前行的 Recordset 数据将被
// 自动取出并防止在 CCustomRs C++ 实例变量中。
pRs->MoveNext();
}
}
catch (_com_error &e)
{
dump_com_error(e);
} if (picRs)
picRs->Release(); CoUninitialize();
};
带 Extensions 的 ADO 范例
最新推荐文章于 2025-12-09 19:00:02 发布
本文介绍了一个使用C++与ADO(ActiveX Data Objects)结合的示例程序,演示了如何通过ADO从数据库检索数据并绑定到C++变量中进行处理。此示例展示了从数据库读取姓名和年龄等字段的具体实现。
9313

被折叠的 条评论
为什么被折叠?



