C++ADO读取数据库

虽然比较简单,不过,对于初学者还是有点复杂,记录一下。 将C++数据库操作,写一个类。 

这是,我做一个QQ跟打器时候,读取数据库所用到的。

ADOConn.h

#if !defined(AFX_ADOCONN_H__56A56674_91DC_43BB_BD09_9A0C8995161E__INCLUDED_)
#define AFX_ADOCONN_H__56A56674_91DC_43BB_BD09_9A0C8995161E__INCLUDED_

#import "C:\Program Files\Common Files\System\ado\msado15.dll"no_namespace \
rename("EOF","adoEOF")rename("BOF","adoBOF")
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
class ADOConn
{
public:
ADOConn(void);
~ADOConn(void);


//添加一个指向Connection对象的指针
_ConnectionPtr m_pConnection;
//添加一个指向Recordset对象的指针
_RecordsetPtr m_pRecordset;
//_RecordsetPtr& GetRecordSet(_bstr_t bstrSQL);
/* //封闭ADO类,方便以后使用 */
void OnInitADOConn(void);
void ExitConnect(void);
// 打开记录集
_RecordsetPtr& GetRecordSet(_bstr_t bstrSQL);
};
#endif // !defined(AFX_ADOCONN_H__56A56674_91DC_43BB_BD09_9A0C8995161E__INCLUDED_)

ADOConn.cpp

#include "StdAfx.h"
#include "ADOConn.h"


ADOConn::ADOConn(void)
{
}


ADOConn::~ADOConn(void)
{
}


// //封闭ADO类,方便以后使用
void ADOConn::OnInitADOConn(void)
{
::CoInitialize(NULL);
try
{
//创建connection对象
m_pConnection.CreateInstance("ADODB.Connection");
//设置连接字符串
_bstr_t strConnect="uid=;pwd=;DRIVER={Microsoft Access Driver (*.mdb)};DBQ=Grades.mdb;";
//SERVER和UID,PWD的设置根据实际情况来设置"
/*m_pConnection->Open(strConnect,_T("admin"),_T("owenyang"),adModeUnknown);*/
m_pConnection->Open(strConnect,"admin","owenyang",adModeUnknown);
}
catch (_com_error e)
{
//显示错误信息
AfxMessageBox(e.Description());
}
}


void ADOConn::ExitConnect(void)
{
//关闭记录集和连接
if (m_pRecordset!=NULL)
{
m_pRecordset->Close();

}
m_pConnection->Close();
::CoUninitialize();
}


// 打开记录集
_RecordsetPtr& ADOConn::GetRecordSet(_bstr_t bstrSQL)
{
//TODO: insert return statement here
try
{
if (m_pConnection==NULL)
{
OnInitADOConn();
}
//创建记录对象
m_pRecordset.CreateInstance(__uuidof(Recordset));
//取得表中记录
m_pRecordset->Open(bstrSQL,m_pConnection.GetInterfacePtr(),adOpenDynamic,
adLockOptimistic,adCmdText);
}
catch (_com_error e)
{
e.Description();
}
return m_pRecordset;
}
readAccessToList.cpp

void CTypeHistoryDlg::readAccessToList(void)
{
CRect rect;
GetClientRect(&rect);
int gridWidth=(rect.Width()-15)/11;
/*CString tem=_T("试试");
tem.Format(_T("%d"),gridWidth);*/
//MessageBox(tem);
m_historyList.InsertColumn(0,_T("编号"),LVCFMT_CENTER,gridWidth-10);
m_historyList.InsertColumn(1,_T("日期"),LVCFMT_CENTER,gridWidth+25);
m_historyList.InsertColumn(2,_T("段数"),LVCFMT_CENTER,gridWidth+10);
m_historyList.InsertColumn(3,_T("速度"),LVCFMT_CENTER,gridWidth);
m_historyList.InsertColumn(4,_T("回改"),LVCFMT_CENTER,gridWidth);
m_historyList.InsertColumn(5,_T("击键"),LVCFMT_CENTER,gridWidth);
m_historyList.InsertColumn(6,_T("码长"),LVCFMT_CENTER,gridWidth);
m_historyList.InsertColumn(7,_T("错字"),LVCFMT_CENTER,gridWidth);
m_historyList.InsertColumn(8,_T("字数"),LVCFMT_CENTER,gridWidth);
m_historyList.InsertColumn(9,_T("键数"),LVCFMT_CENTER,gridWidth);
m_historyList.InsertColumn(10,_T("用时"),LVCFMT_CENTER,gridWidth);
m_historyList.SetExtendedStyle(LVS_EX_FLATSB
|LVS_EX_FULLROWSELECT
|LVS_SHOWSELALWAYS
|LVS_EX_GRIDLINES);
ADOConn m_AdoConn;
m_AdoConn.OnInitADOConn();
CString sql;
sql.Format(_T("select* from grade"));
_RecordsetPtr m_pRecordset;
m_pRecordset = m_AdoConn.GetRecordSet((_bstr_t)sql);
while(m_AdoConn.m_pRecordset->adoEOF==0)
{
m_historyList.InsertItem(0,_T(""));
m_historyList.SetItemText(0,1,(TCHAR*)(_bstr_t)m_pRecordset->GetCollect("date"));
m_historyList.SetItemText(0,2,(TCHAR*)(_bstr_t)m_pRecordset->GetCollect("para"));
m_historyList.SetItemText(0,3,(TCHAR*)(_bstr_t)m_pRecordset->GetCollect("speed"));
m_historyList.SetItemText(0,4,(TCHAR*)(_bstr_t)m_pRecordset->GetCollect("back"));
m_historyList.SetItemText(0,5,(TCHAR*)(_bstr_t)m_pRecordset->GetCollect("hitkey"));
m_historyList.SetItemText(0,6,(TCHAR*)(_bstr_t)m_pRecordset->GetCollect("keylong"));
m_historyList.SetItemText(0,7,(TCHAR*)(_bstr_t)m_pRecordset->GetCollect("wronwor"));
m_historyList.SetItemText(0,8,(TCHAR*)(_bstr_t)m_pRecordset->GetCollect("wordscount"));
m_historyList.SetItemText(0,9,(TCHAR*)(_bstr_t)m_pRecordset->GetCollect("keycount"));
m_historyList.SetItemText(0,10,(TCHAR*)(_bstr_t)m_pRecordset->GetCollect("time"));
m_historyList.SetItemText(0,0,(TCHAR*)(_bstr_t)m_pRecordset->GetCollect("id"));
m_pRecordset->MoveNext();
}
m_historyList.SetItemState(0,LVIS_SELECTED|LVIS_FOCUSED,LVIS_SELECTED|LVIS_FOCUSED);
m_AdoConn.ExitConnect();
}


原文地址:https://www.cnblogs.com/owenyang/p/3579118.html