久久―日本道色综合久久,亚洲欧美精品在线,狼狼色丁香久久婷婷综合五月,香蕉人人超,日本网站黄,国产在线观看不卡免费高清,无遮挡的毛片免费

2023信創(chuàng)獨(dú)角獸企業(yè)100強(qiáng)
全世界各行各業(yè)聯(lián)合起來,internet一定要實(shí)現(xiàn)!

ADO在VC++中進(jìn)行數(shù)據(jù)庫編程

2004-02-15 eNet&Ciweek

  ActiveX Data Objects (ADO)是用于訪問數(shù)據(jù)的基于自動(dòng)化的接口。ADO使用OLE DB接口訪問范圍廣大的數(shù)據(jù)源,包括但不限于通過ODBC提供的數(shù)據(jù)。

  在這里我們不得不提到另一個(gè)對象RDS。Microsoft Remote Data Service (RDS)是ADO的一個(gè)組件,它為駐留在 Microsoft Internet Explorer上的應(yīng)用程序提供快速有效的數(shù)據(jù)連接和數(shù)據(jù)發(fā)布框架。它是一種基于工作在 HTTP、HTTPS(在 Secure Sockets 層上的HTTP)和DCOM應(yīng)用程序協(xié)議之上的客戶端/服務(wù)器的分布式技術(shù)。RDS 使用數(shù)據(jù)識別ActiveX控件,向需要建立分布式、數(shù)據(jù)密集且用于企業(yè)內(nèi)部網(wǎng)和Internet的應(yīng)用程序的Web開發(fā)人員提供以Microsoft Visual Basic樣式編程的數(shù)據(jù)訪問。

  下面我們就在Visual C++6.0中利用ADO實(shí)現(xiàn)一個(gè)數(shù)據(jù)庫編程的實(shí)際例子,以便讓大家對ADO有一個(gè)認(rèn)識。

  1.首先建立應(yīng)用程序的框架并初始化運(yùn)行環(huán)境(前面提到過ADO是用于訪問數(shù)據(jù)的基于OLE DB接口訪問的數(shù)據(jù)源,所以要初始化OLE/COM庫環(huán)境)

  利用Visual C++的MFC AppWizard(exe)創(chuàng)建一個(gè)標(biāo)準(zhǔn)的單文檔(Single Document)應(yīng)用程序(比如采用默認(rèn)設(shè)置)。

  2.引入ADO的庫文件msado15.dll

  我們在使用ADO之前必須在工程中引入ADO的庫文件msado15.dll。通常我們在文件“stdAfx.h”中將其導(dǎo)入;以便使編譯器能正確的編譯同時(shí)生成我們需要的.tli和.tlh文件。

  需要導(dǎo)入的代碼如下:

 ?。nclude

 ?。mport "c:\Program Files\Common Files\System\ADO\msado15.dll" no_namespace rename("EOF","EndofFile")

  3. 利用智能指針(Smart Pointer)進(jìn)行數(shù)據(jù)庫操作

  在CaboutDlg類的定義中定義兩個(gè)ADO的智能指針類實(shí)例(后面我們會(huì)比較詳細(xì)地介紹ADO中的智能指針),同時(shí)添加一個(gè)Listbox用以顯示我們從數(shù)據(jù)庫中獲得字段值。

  class CaboutDlg : public Cdialog

  {

  public:

  CaboutDlg(); //添加的代碼

  _ConnectionPtr pConn;

  _RecordsetPtr pRst;

  ClistBox m_ListBox;

  ……

  }

  在ADO中的類庫中包含有這樣的三個(gè)智能指針,它們分別是: -ConnectionPtr,-RecordsetPtr,-CommandPtr。下面我們就針對這三個(gè)智能指針分別進(jìn)行介紹:

 ?。瑿onnectionPtr,用來管理連接一個(gè)數(shù)據(jù)源提供者所要求的信息,并可通過Open和Close的方法來打開一個(gè)到數(shù)據(jù)源提供者的活連接(即Live Connection)。另外還可以建立和管理事務(wù),如BeginTrans,CommitTrans和RollBackTrans。最后可以通過Excute這種方法在數(shù)據(jù)源上執(zhí)行命令;

 ?。璕ecordsetPtr,封裝數(shù)據(jù)源提供者返回的記錄集合。使用該類可以瀏覽返回的記錄,也可以插入一個(gè)新的記錄,或者更新和刪除一個(gè)已經(jīng)有的記錄;

  -CommandPtr,封裝了一個(gè)要發(fā)送到數(shù)據(jù)庫的命令串(比如通常用的SQL查詢語句)。該命令可以是一個(gè)表的名字,或者一個(gè)存儲(chǔ)過程,或者一個(gè)依賴數(shù)據(jù)源的串。

  4. 添加執(zhí)行代碼

  利用ClassWizard在CaboutDlg類中映射ON_WM_INITDIALOG消息添加一個(gè)對話框的初始化函數(shù)OnInitDialog();在該函數(shù)中添加以下的代碼:

  BOOL CAboutDlg::OnInitDialog()

  {

  CDialog::OnInitDialog();

  //添加的代碼

  _variant_t theValue;

  m_ListCtrl=(CListBox *)GetDlgItem(IDC_LIST_BOX);

  ASSERT(m_ListCtrl!=NULL);

  m_ListCtrl->ResetContent();

  pConn.CreateInstance(_uuidof(Connection));

  pRst.CreateInstance(_uuidof(Recordset));

  try

  {

  pConn→ConnectionString="DSN=Accounts";

  //設(shè)置連接字符串,利用ODBC連接Accounts

  數(shù)據(jù)庫

  pConn→Open("","sa","",NULL); //打開連接

  pRst→Open("select * from Checking-Account",(IDispatch*)pConn,adOpenDynamic,adLockOptimistic,adCmdText);//執(zhí)行一個(gè)SQL獲得希望得到的數(shù)據(jù)集

  while (!pRst→EndofFile)

  {

  theValue=pRst→GetCollect("Owner_ID");

  if (theValue.vt!=VT_NULL)

  m_ListCtrl→AddString((char *)_bstr_t(theValue));

  pRst→MoveNext();

  }//遍歷記錄集,獲得字段Owner-ID的字段值,同時(shí)將其添加到ListBox中去

  pRst→Close();//關(guān)閉記錄集pRst

  pConn→Close(); //關(guān)閉連接pConn

  }

  catch(_com_error * e) //在這里對異常情況進(jìn)行處理

  {

  CString Error=e→ErrorMessage();

  AfxMessageBox(e→ErrorMessage());

  }

  pRst=NULL;

  pConn=NULL;

  return TRUE;

  }

  在上述的代碼中我們使用了這樣一種數(shù)據(jù)類型:_variant_t ,它封裝了Visual C++中的VARIANT類型(在Visual Basic中我們可能已經(jīng)接觸的比較多了);還有一種數(shù)據(jù)類型就是_bstr_t(寬字符型);有關(guān)這兩種數(shù)據(jù)類型的詳細(xì)介紹請參見MSDN。

  接下來編譯該工程,然后運(yùn)行。怎么樣,是不是覺得使用起來很方便?!

相關(guān)頻道: eNews

您對本文或本站有任何意見,請?jiān)谙路教峤唬x謝!

投稿信箱:tougao@enet16.com