1,引入ADO庫文件
在工程的stdafx.h裏用#import引入ADO庫文件。
這時往往就不是在stdafx.h裏用#import引入ADO庫文件了,而是在你要使用ADO訪問方式的工程類的.h中引入了。
#import "C:/Program Files/Common Files/System/ado/msado15.dll" rename_namespace("ARXADO") rename("BOF","adoBOF")
rename("EOF","adoEOF")
2, 初始化COM環境
和上面一樣。
3,使用ADO庫的三個基本接口
Connection對象:
ARXADO::_ConnectionPtr m_pConnection;
m_pConnection.CreateInstance(__uuidof(ARXADO::Connection));
try{
// 打開本地Access庫ChatLog.mdb
m_pConnection->Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=ChatLog.mdb","","",ARXADO::adModeUnknown);
//SQL Server連接方法
_bstr_t strConnect = "Provider=SQLOLEDB; Server=billgates;Database=HrMan; uid=sa; pwd=sa;";
m_pConnection->Open(strConnect,"","",ARXADO::adModeUnknown);
}
catch(_com_error e){
AfxMessageBox(e.Description());
}
Recordset對象:
ARXADO::_RecordsetPtr m_pRecordset;
m_pRecordset.CreateInstance(__uuidof(ARXADO::Recordset));
CString sql;
sql.Format("SELECT DISTINCT name FROM table1");
try{
m_pRecordset->Open(sql.GetBuffer(sql.GetLength()),
_variant_t((IDispatch *)m_pConnection,true),
ARXADO::adOpenDynamic,
ARXADO::adLockOptimistic,
ARXADO::adCmdText);
}
catch(_com_error *e){
AfxMessageBox(e->ErrorMessage());
}
CString strName;
while (!m_pRecordset->adoEOF) {
strName.Format("%s",(char*)(_bstr_t)m_pRecordset->Fields->GetItem(_variant_t("Name"))->Value);
m_listbox.AddString(strName);
m_pRecordset->MoveNext();
}
Command對象:
ARXADO::_CommandPtr m_pCommand;
HRESULT hr = m_pCommand.CreateInstance(__uuidof(ARXADO::Command));
if(FAILED(hr))
{
AfxMessageBox("創建Command對象實例失敗!");
}
CString strP_mailid;
ARXADO::_ParameterPtr param;
param=m_pCommand->CreateParameter("p_mailid",adVarChar,adParamOutput,strP_mailid.GetLength()+1,_variant_t(strP_mailid));
m_pCommand->Parameters->Append(param);
m_pCommand->ActiveConnection = m_pConnection;
m_pCommand->CommandType = ARXADO::adCmdStoredProc;
m_pCommand->CommandText = _bstr_t("P_MAIL_SEND");
try{
cmd->Execute(NULL,NULL,ARXADO::adCmdStoredProc);
}
catch (...) {
AfxMessageBox("調用存儲過程P_MAIL_SEND有錯!");
}
try{
strP_mailid = (char*)(_bstr_t)m_pCommand->Parameters->GetItem(_variant_t("p_mailid"))->GetValue();
}catch (...) {
strP_mailid = "";
}
m_pCommand.Detach();