.建立一個對話框工程
在stdafx.h檔案中加入下面一句話引用
#import "C://Program Files//Common Files//System//ado//msado15.dll" no_namespace rename("EOF","adoEOF")
2.建立一個普通類,這裡類名字是AdoDBControl
3.在AdoDBControl.h文檔中添加以下變量和函數聲明
private:
_ConnectionPtr m_pConnection;
public:
bool Open(_bstr_t ConnectionString, long Options );
void Close(void);
vector< vector< _variant_t> > Select(BSTR strSql) ;
4.因為使用了vector是以要包含vector還用引用命名空間std:vector
#include <vector>
using std::vector;
5.在AdoDBControl.cpp文檔中實作函數
AdoDBControl::AdoDBControl(void)
{
::CoInitialize(NULL); //初始化OLE/COM庫環境
m_pConnection=NULL;
}
AdoDBControl::~AdoDBControl(void)
{
if(m_pConnection)
m_pConnection->Close();
m_pConnection=NULL;
::CoUninitialize(); //釋放程式占用的COM 資源
}
bool AdoDBControl::Open(_bstr_t ConnectionString, long Options )
{
if( FAILED( m_pConnection.CreateInstance(__uuidof(Connection)) ) ) //初始化Connection指針
return false;
try{
m_pConnection->Open(ConnectionString, "", "", Options);
}catch(_com_error e)
{
AfxMessageBox(e.Description());
return false;
}
return true;
}
// 關閉資料庫連接配接
void AdoDBControl::Close(void)
{
if(m_pConnection)
m_pConnection->Close();
m_pConnection=NULL;
}
// 查詢
//strSql:查詢語句
//strName:要傳回的記錄集内的列名
vector<vector<_variant_t>> AdoDBControl::Select(BSTR strSql)
{
_RecordsetPtr pRecordset; //定義資料集對象
vector<vector<_variant_t>> vRecord; //這是C++0x新标準,不是VS2010或者不支援新标準的,
//要寫成vector< vector<_variant_t> >,因為>>會被認為是右移操作符
if( FAILED( pRecordset.CreateInstance(__uuidof(Recordset)) ) ) //初始化Recordset指針
return vector<vector<_variant_t>>();
try{
pRecordset->Open(strSql, (IDispatch*)m_pConnection, adOpenDynamic, adLockOptimistic, adCmdText);//adOpenDynamic:動态 adLockOptimistic樂觀封鎖法 adCmdText:文本查詢語句
pRecordset->MoveFirst();
while(!pRecordset->adoEOF)//周遊所有記錄
{
//取記錄字段值
vector<_variant_t> vTheValue; //VARIANT資料類型的泛型
for(long i=0; i<pRecordset->GetFields()->Count; i++){
_variant_t v = pRecordset->GetFields()->GetItem(i)->Value;
vTheValue.push_back(v);
}
vRecord.push_back(vTheValue);
pRecordset->MoveNext(); //移動到下一條記錄
}
pRecordset->Close(); //關閉連接配接
pRecordset = NULL;
}catch( _com_error e)
{
AfxMessageBox(e.Description());
}
return vRecord;
}
6.調用這個簡單的類
AdoDBControl myAdoControl;//對象聲明
myAdoControl.Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=F:\\1.mdb", "", "", adModeUnknown);//這個是access資料庫
myAdoControl.Select(L"SELECT * from table1");
myAdoControl.Close();
//本地服務是(local),local兩邊括号也是要的
myAdoControl.Open("Provider=SQLOLEDB;Data Source=192.168.1.1;Initial Catalog=databasename;User ID=login;Password=password;", adModeUnknown);
vector<vector<_variant_t>> vvv = myAdoControl.Select(L"SELECT * FROM table1");
myAdoControl.Close();
7.有了這個簡單的類,剩下的就可以自己去慢慢啃了