VC下使用ADO連接數據庫

VC下使用ADO連接數據庫

 

軟件環境:

Windows XP

Visual6.0

SQL Server 2000

 

 

1.新建一個MFC AppWizard(exe),工程名爲AdoTest。OK,Finish。

 

2.引入ADO庫文件

使用ADO前必須在工程的stdafx.h頭文件裏用直接引入符號#import引入ADO庫文件,以使編譯器能正確編譯。

添加代碼如下:

#import "C:/Program Files/Common Files/System/ado/msado15.dll" /
 no_namespace /
 rename("EOF","adoEOF")

這行語句聲明在工程中使用ADO,但不使用ADO的名字空間,並且爲了避免常數衝突,將常數EOF改名爲adoEOF。現在不需添加另外的頭文件,就可以使用ADO接口了。

建議:在添加這段代碼後編譯 如果能編譯通過這繼續,否者找原因吧!

 

3.初始化OLE/COM庫環境

ADO庫是一組COM動態庫,這意味應用程序在調用ADO前,必須初始化OLE/COM庫環境。

在AdoTest.cpp文件的

BOOL CAdoTestApp::InitInstance()中添加如下代碼:

BOOL CAdoTestApp::InitInstance()
{
   if (!AfxOleInit())
   {
     AfxMessageBox("OLE初始化失敗!");
     return FALSE;
   }

   AfxEnableControlContainer(); 

       ……

 

 

4.使用_RecordsetPtr接口連接數據庫

ADO庫包含三個基本接口:_ConnectionPtr接口、_CommandPtr接口和_RecordsetPtr接口。

前2個接口沒搞清楚 我們以_RecordsetPtr接口連接SQL Server  爲例。

在CAdoTestView.cpp文件下的

void CAdoTestView::OnDraw(CDC* pDC)

下添加如下代碼。

void CAdoTestView::OnDraw(CDC* pDC)
{
  
 CAdoTestDoc* pDoc = GetDocument();
 ASSERT_VALID(pDoc);

 

 _RecordsetPtr pPtr;
 
 if (FAILED(pPtr.CreateInstance("ADODB.Recordset")))
 {
  AfxMessageBox("Create Instance failed!");
  return;
 }

 
 CString strSRC;
 strSRC="Driver=SQL Server;Server=";   //我猜Driver=SQL Server是表示數據的類型 我用的是SQL Server 2000
 strSRC+="20.3.200.150";//Server = 20.3.200.150 是數據庫所在的服務器IP
 strSRC+=";Database=";//Database=pubs pubs爲數據庫提供的一個實例數據庫名
 strSRC+="pubs";
 strSRC+=";UID=sa;PWD=";//UID=sa PWD = 1 爲數據庫連接的賬號密碼
 strSRC+="1";

 
 CString strSQL = "select * from authors where contract = 0"; //查詢語句
 
 _variant_t varSRC(strSRC);
 _variant_t varSQL(strSQL);
 
 if(FAILED(pPtr->Open(varSQL,varSRC,adOpenStatic,adLockOptimistic,adCmdText)))
 {
  AfxMessageBox("Open table failed!");
  pPtr.Release();
  return;
 }

 

//遍歷查詢結果
 while(!pPtr->GetadoEOF())
 {
  _variant_t varID;
  _variant_t varLName;
  _variant_t varFName;
  _variant_t varPhone;
  
  varID = pPtr->GetCollect ("au_id");
  varLName = pPtr->GetCollect ("au_lname");
  varFName = pPtr->GetCollect ("au_fname");
  varPhone = pPtr->GetCollect ("phone");
  
  CString strID =(char *)_bstr_t(varID);
  CString strLName =(char *)_bstr_t(varLName);
  CString strFName =(char *)_bstr_t(varFName);
  CString strPhone =(char *)_bstr_t(varPhone);

//顯示查詢結果  
  pDC->TextOut(50,50,"au_id:"+strID);
  pDC->TextOut(50,70,"au_lname:"+strLName);
  pDC->TextOut(50,90,"au_fname:"+strFName);
  pDC->TextOut(50,110,"phone:"+strPhone);

//偷懶 讓查詢結果在窗口中顯示1秒鐘

  Sleep(1000);
  

  pPtr->MoveNext();
 }

//一定不能忘記釋放哦
 pPtr->Close();
 pPtr.Release();

 


 // TODO: add draw code for native data here
}

 

 

應該成功了吧?我也是才成功!~

加油!

相信明天更完美!

發佈了13 篇原創文章 · 獲贊 3 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章