在VC中使用ADO的開發步驟(名字空間)

在VC中使用ADO的開發步驟(名字空間):
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();

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章