直接上代码:
/环境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 }