//环境Windows XP SP3+VS2010 UNICODE
//头文件ADOConn.h
#pragma once #import "c:\Program Files\Common Files\System\ado\msado15.dll" no_namespace \
rename("EOF","adoEOF") rename("BOF","adoBOF")
class ADOConn
{
public:
ADOConn(void);
~ADOConn(void);
void OnInitADOConn();
void ExitConnect();
_RecordsetPtr& GetRecordset(_bstr_t bstrSQL);
BOOL ExecuteSQL(_bstr_t bstrSQl);
//
public:
_ConnectionPtr m_pConnection;
_RecordsetPtr m_pRecordset;
};
//实现文件ADOConn.cpp
#include "StdAfx.h"
#include "ADOConn.h"
ADOConn::ADOConn(void)
{
}
ADOConn::~ADOConn(void)
{
}
void ADOConn::OnInitADOConn()
{
//初始化OLE/COM库环境
::CoInitialize(NULL);
try
{
m_pConnection.CreateInstance("ADODB.Connection");
// 设置连接字符串,必须是BSTR型或者_bstr_t类型
TCHAR szFilePath[MAX_PATH + 1];
GetModuleFileName(NULL, szFilePath, MAX_PATH);
(_tcsrchr(szFilePath, _T('\\')))[1] = 0; //删除文件名,只获得路径。
CString dbpath= szFilePath;
TRACE1("dbpath = %s\n",dbpath);
//Access 2003
//_bstr_t strConnect="uid=;pwd=;DRIVER={Microsoft Access Driver(*.mdb)};DBQ=nkj.mdb;"; //Access 2003标准链接
//_bstr_t strConnect = "Driver={Microsoft Access Driver (*.mdb)}; DBQ=C:\App1\你的数据库名.mdb; Exclusive=1; Uid=你的用户名; Pwd=你的密码;" //独占方式连接
_bstr_t strConnect = _T("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=") + dbpath + _T("data\\nkj.mdb;User ID=admin;Password=;"); //普通方式无密码
//_bstr_t strConnect = _T("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=") + dbpath + _T("data\\nkj.mdb;Jet OLEDB:Database Password=你的密码;");
//普通方式,有密码
//Access 2007
//_bstr_t strConnect =Provider="Microsoft.ACE.OLEDB.12.0;Data Source=C:\myFolder\myAccess2007file.accdb;Persist Security Info=False; " ; //标准安全链接
//_bstr_t strConnect =Provider="Microsoft.ACE.OLEDB.12.0;Data Source=C:\myFolder\myAccess2007file.accdb;Jet OLEDB:Database Password=MyDbPassword;"; //包括数据库密码
//SQL Server
//_bstr_t strConnect = "Provider=SQLOLEDB; Server=127.0.0.1;Database=Mis; uid=sa; pwd=sa;";
m_pConnection->Open(strConnect,"","",adModeUnknown);
}
catch (_com_error e)
{
AfxMessageBox(e.Description());
}
}
void ADOConn::ExitConnect()
{
if (m_pRecordset!=NULL)
{
m_pRecordset->Close();
}
m_pConnection->Close();
::CoUninitialize();
}
_RecordsetPtr& ADOConn::GetRecordset(_bstr_t bstrSQL)
{
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)
{
AfxMessageBox(e.Description());
}
return m_pRecordset;
}
执行SQL语句,Insert Update _variant_t
BOOL ADOConn::ExecuteSQL(_bstr_t bstrSQL)
{
_variant_t RecordAffected;
try
{
if (m_pConnection == NULL)
{
OnInitADOConn();
}
m_pConnection->Execute(bstrSQL,NULL,adCmdText /*文本命令*/);
return TRUE;
}
catch (_com_error e)
{
AfxMessageBox(e.Description());
return FALSE;
}
}
//简单用法,记得在XXX.CPP添加 #include "ADOConn.h"
BOOL CXXX::OnInitDialog()
{
//其他代码
m_listUser.SetExtendedStyle
(m_listUser.GetExtendedStyle()|LVS_EX_HEADERDRAGDROP|LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES | LVS_EX_ONECLICKACTIVATE);
m_listUser.InsertColumn(0, _T("#"), LVCFMT_LEFT,20);
m_listUser.InsertColumn(1, _T("用户"), LVCFMT_LEFT, 60);
m_listUser.InsertColumn(2, _T("性别"), LVCFMT_LEFT, 60);
m_listUser.InsertColumn(3, _T("职务"), LVCFMT_LEFT, 60);
m_listUser.InsertColumn(4, _T("用户类型"), LVCFMT_LEFT, 80);
ADOConn m_AdoConn;
//open database
m_AdoConn.OnInitADOConn();
CString sql;
sql.Format(_T("select* from tbUser order by No desc"));
_RecordsetPtr m_pRecordset;
m_pRecordset = m_AdoConn.GetRecordset((_bstr_t)sql);
//遍历记录集
while(m_AdoConn.m_pRecordset->adoEOF == 0)
{
m_listUser.InsertItem(0,_T(""));
m_listUser.SetItemText(0,0,(TCHAR *)(_bstr_t)m_pRecordset->GetCollect("No"));
m_listUser.SetItemText(0,1,(TCHAR *)(_bstr_t)m_pRecordset->GetCollect("user"));
m_listUser.SetItemText(0,2,(TCHAR *)(_bstr_t)m_pRecordset->GetCollect("sex"));
m_listUser.SetItemText(0,3,(TCHAR *)(_bstr_t)m_pRecordset->GetCollect("position"));
m_listUser.SetItemText(0,4,(TCHAR *)(_bstr_t)m_pRecordset->GetCollect("permissions"));
m_pRecordset->MoveNext();
}
m_AdoConn.ExitConnect();
//其他代码
return TRUE; // return TRUE unless you set the focus to a control
// 异常: OCX 属性页应返回 FALSE
}