范例: 无(有) Extensions 的 ADO
该程序段说明了如何从字段检索数值并将数值转换为 C++ 变量。
#import "c:\Program Files\Common Files\System\ADO\msado15.dll" no_namespace rename("EOF", "EndOfFile") #include <stdio.h> Class CEmployee { public: FetchEmployeeData(); char m_szFirstName[30]; char m_szLastName[30]; int nAge; }; CEmployee::FetchEmployeeData() { _ConnectionPtr pCon(); _RecordsetPtr pRs(); FieldPtr pfldFirstName, pfldLastName, pfldAge; _variant_t vFirstName, vLastName, vAge; pCon.CreateInstance(__uuidof(Connection)); pCon->Open(“pubs”,“sa”,“”);pRs.CreateInstance(__uuidof(Recordset));pRs->Open(“select FirstName, LastName, Age from Employees”, pCon,adOpenForwardOnly, adLockReadOnly, adCmdUnknown);pfldFirstName = pRs->Fields->GetItem(0);pfldLastName = pRs->Fields->GetItem(1);pfldAge = pRs->Fields->GetItem(2);while (VARIANT_FALSE == pRs->EndOfFile){vFirstName.Clear();vLastName.Clear();vAge.Clear();vFirstName = pfldFirstName->Value;WideCharToMultiByte(CP_ACP, 0, vFirstName.bstrVal, -1,m_szFirstName, sizeof(m_szFirstName), NULL, NULL);vLastName = pfldLastName->Value;WideCharToMultiByte(CP_ACP, 0, vLastName.bstrVal, -1,m_szLastName, sizeof(m_szLastName), NULL, NULL);nAge = vAge.iVal;pRs->MoveNext();}}范例: 带 Extensions 的 ADO
该程序说明了如何从字段检索数值并将数值转换为 C++ 变量。它包括了在程序段(范例:无 Extensions 的 ADO)中所描述的功能。
#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();};

浙公网安备 33010602011771号