//環境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_tBOOL 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 databasem_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}