在StdAfx.h文件中,#endif // _AFX_NO_AFXCMN_SUPPORT之前,加入:
#import "C:Program FilesCommon FilesSystemadomsado15.dll" no_namespace rename("EOF","adoEOF")
接著, 在My.cpp文件InitInstance方法中, AfxEnableControlContainer();之前,加入:
if(!AfxOleInit()) //初始化
{ AfxMessageBox( " initialize false!" ); }
我定了一個類,方便使用:
// ADODB.h
class CADODB
...{
public:
_ConnectionPtr m_pConnection;
_RecordsetPtr m_pRecordset;
_CommandPtr m_pCommand;
BOOL bOpenDB;
CString m_strSQL;
CADODB();
void ADOConnection(); //打開連接數據庫
void ADOClose(); //關閉斷開數據庫
BOOL ADOUpdata(CString strCommand); //更新操作,新建,刪除,修改
_RecordsetPtr ADOSelect(CString strCommand); //返回查詢結果集
};
extern CADODB ADOCtrl;
//ADODB.cpp
CADODB ADOCtrl;
CADODB::CADODB()
...{ bOpenDB = FALSE;
}
void CADODB::ADOConnection()
...{ CHAR DBfilePath[MAX_PATH];
CString m_strdir;
m_pConnection.CreateInstance("ADODB.Connection");
m_pRecordset.CreateInstance("ADODB.Recordset");
m_pCommand.CreateInstance("ADODB.Command");
GetCurrentDirectory(MAX_PATH,DBfilePath);
m_strdir.Format("%sconfig.udl",DBfilePath); 這裡使用.udl連接文件, 我是udl,mdb,exe都放在同一目錄下
strtemp.Format("File Name=%s",m_strdir);
m_pConnection->ConnectionString = (_bstr_t)strtemp; 注意使用時,數據類型變換
m_pConnection->Open("","","",NULL);
m_pCommand->ActiveConnection = m_pConnection;
bOpenDB = TRUE;
}
void CADODB::ADOClose()
...{ if (bOpenDB)
...{
m_pConnection->Close();
m_pConnection.Release();
m_pRecordset.Release();
m_pCommand.Release();
}
}
BOOL CADODB::ADOUpdata(CString strCommand)
...{
if (!bOpenDB)
...{ return FALSE; }
m_pCommand->CommandText = (_bstr_t)strCommand;
m_pCommand->Execute(NULL,NULL,adCmdText); //執行操作
return TRUE;
}
_RecordsetPtr CADODB::ADOSelect(CString strCommand)
...{
if (!bOpenDB)
...{ return NULL; }
m_pCommand->CommandText = (_bstr_t)strCommand;
return m_pCommand->Execute(NULL,NULL,adCmdText);
}
使用舉例:
ADOCtrl.m_strSQL.Format("SELECT * FROM MyTable"); //SQL語句
ADOCtrl.ADOConnection();
ADOCtrl.m_pRecordset = ADOCtrl.ADOSelect(ADOCtrl.m_strSQL);
while( !ADOCtrl.m_pRecordset->adoEOF )
...{ //獲取字段信息, 注意字符類型變換: CString <-> CHAR* <-> _bstr_t
CString str = (CHAR*)(_bstr_t)ADOCtrl.m_pRecordset->GetCollect("NAME");
ADOCtrl.m_pRecordset->MoveNext();
}
ADOCtrl.ADOClose();
ADOCtrl.m_strSQL.Format("INSERT INTO MyTable(NAME,AGE) VALUES ('%s','%d')",myname,age);
//SQL語句
ADOCtrl.ADOConnection();
ADOCtrl.ADOUpdata(ADOCtrl.m_strSQL); //插入一條記錄
ADOCtrl.ADOClose();
PS:
// Get the max ID value;
ADOCtrl.m_strSQL.Format("SELECT MAX(ID) as mID FROM GeneralTable");
ADOCtrl.m_pRecordset = ADOCtrl.ADOSelect(ADOCtrl.m_strSQL);
_variant_t mmID = ADOCtrl.m_pRecordset->GetCollect("mID");
int newID = ++mmID.intVal; //將_variant_t的數據類型變成整型
關於.udl的使用:
1."提供程序"->選擇:Microsoft Jet 4.0 OLE DB Provider;
2."連接"->輸入數據庫名稱(可直接寫數據庫名, 不要加地址);登錄信息不動;
3."所有"->Data Source 的值為 數據庫名全稱