4,011
社区成员
发帖
与我相关
我的任务
分享
AfxOleInit();
m_pConnection.CreateInstance(__uuidof(Connection));
try
{
m_pConnection->ConnectionString = "Driver={SQL server};server=USER-20160714BG;uid=sa;pwd=123456;database=student";
m_pConnection->Open("","","",adConnectUnspecified);
}
catch(_com_error e)
{
AfxMessageBox(L"数据库连接失败,确认数据库Demo.mdb是否在当前路径下!");
return FALSE;
}
_CommandPtr m_pCommand;
_RecordsetPtr m_pRecordset;
Dlg.cpp的OnInitDialog()
DWORD dwStyle; // 设置新风格
dwStyle=m_list.GetExtendedStyle();
dwStyle|=LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT;
m_list.SetExtendedStyle(dwStyle);
//初始化ListControl控件的各个列
m_list.InsertColumn(0,L"id",LVCFMT_CENTER,60);
m_list.InsertColumn(1,L"name",LVCFMT_CENTER,60);
m_list.InsertColumn(2,L"wage",LVCFMT_CENTER,60);
UpdateData();
m_list.DeleteAllItems();
CString SQL,id,name,wage;
SQL.Format(L"select * from wage by id");
m_pRecordset=theApp.m_pConnection->Execute((_bstr_t)SQL,NULL,adCmdText);
int Counter=0;
if(!(m_pRecordset->BOF))
{
m_pRecordset->MoveFirst();
while (!m_pRecordset->adoEOF)
{
id =(char*)(_bstr_t)m_pRecordset->GetCollect(L"id");
name=(char*)(_bstr_t)m_pRecordset->GetCollect(L"name");
wage=(char*)(_bstr_t)m_pRecordset->GetCollect(L"wage");
m_list.InsertItem(Counter,0);
m_list.SetItemText(Counter,0,id);
m_list.SetItemText(Counter,1,name);//同上
m_list.SetItemText(Counter,2,wage);
m_pRecordset->MoveNext();
Counter++;
}
}
UpdateData(false);
m_pRecordset->Open("SELECT * FROM student",m_pConnection.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);
m_pRecordset->Open("SELECT * FROM student",m_pConnection.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);
//范例: 带 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();
};