• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
    • 軟件測試技術
    • 軟件測試博客
    • 軟件測試視頻
    • 開源軟件測試技術
    • 軟件測試論壇
    • 軟件測試沙龍
    • 軟件測試資料下載
    • 軟件測試雜志
    • 軟件測試人才招聘
      暫時沒有公告

    字號: | 推薦給好友 上一篇 | 下一篇

    VC中利用ADO共同實現數據庫的操作

    發布: 2007-7-14 21:11 | 作者: 佚名    | 來源: 網絡轉載     | 查看: 86次 | 進入軟件測試論壇討論

    領測軟件測試網   ADO是應用層的編程接口,它通過OLE DB提供的COM接口訪問數據,它適合于各種客戶機/服務器應用系統和基于Web的應用,尤其在一些腳本語言中訪問數據庫操作是ADO的主要優勢。ADO是一套用自動化技術建立起來的對象層次結構,它比其他的一些對象模型如DAO(Data Access Object)、RDO(Remote Data Object)等具有更好的靈活性,使用更為方便,并且訪問數據的效率更高。SQL是強大的數據庫操作系統,通過ADO和SQL語句的配合,我們可以的實現對數據庫的一系列操作,例如創建數據庫、創建表、創建索引,實現數據庫的多重查詢、高級查詢和數據的匯總等技術。下面通過例程介紹如何通過ADO和SQL語句的配合實現對數據庫的操作。

      第一步:通過Access創建數據庫test.mdb。

      第二步:創建單文檔工程testado,所有的選項都取默認值。

      第三步:COM庫的初始化

      我們可以使用AfxOleInit()來初始化COM庫,這項工作通常在CWinApp::InitInstance()的重載函數中完成,請看如下代碼:

      BOOL CADOTest1App::InitInstance()
       {
        AfxOleInit();
        ......

      第四步:用#import指令引入ADO類型庫

      我們在stdafx.h中加入如下語句:

      #import "c:\program files\common files\system\ado\msado15.dll" no_namespace rename("EOF","adoEOF")

    這一語句有何作用呢?其最終作用同我們熟悉的#include類似,編譯的時候系統會為我們生成msado15.tlh,ado15.tli兩個C++頭文件來定義ADO庫。

      第五步:在testadoview.h中定義一個指向Connection對象的指針:_ConnectionPtr _pConnection;

      第六步:添加如下代碼:

    void CTestadoView::OnInitialUpdate()
    {
    CView::OnInitialUpdate();
    HRESULT hr;
    try
    {
    hr = m_pConnection.CreateInstance("ADODB.Connection");//創建Connection對象
    if(SUCCEEDED(hr))
    {
    hr = m_pConnection->Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=test.mdb","","",adModeUnknown);///連接數據庫
    ///上面一句中連接字串中的Provider是針對ACCESS2000環境的,對于ACCESS97,需要改為:Provider=Microsoft.Jet.OLEDB.3.51; }
    }
    }
    catch(_com_error e)///捕捉異常
    {
    CString errormessage;
    errormessage.Format("連接數據庫失敗!\r\n錯誤信息:%s",e.ErrorMessage());
    AfxMessageBox(errormessage);///顯示錯誤信息
    }
    }


      第七步:在析構函數中關閉Connection對象并將其釋放,代碼如下:

    CTestadoView::~CTestadoView()
    {
    m_pConnection->Close();
    m_pConnection.Release();
    }


      第八步:添加菜單項"創建數據庫表",并添加相應的消息處理函數,然后添加代碼如下:

    void CTestadoView::OnAddtable()
    {
    _variant_t RecordsAffected;
    m_pConnection->Execute("CREATE TABLE new(ID INTEGER,username TEXT,old INTEGER)",&RecordsAffected,adCmdText);
    }


      運行程序,執行菜單當中的命令"添加表",我們可以發現數據庫中已經添加了一個表new,其中的字段有我們定義的字段。

      第九步:添加菜單項"刪除數據庫表",并添加相應的消息處理函數,然后添加代碼如下:

    void CTestadoView::OnDeleteTable()
    {
    _variant_t RecordsAffected;
    m_pConnection->Execute("DROP TABLE new",&RecordsAffected,adCmdText);
    }


      運行程序,執行菜單當中的命令"刪除表",我們可以發現數據庫中剛才添加的表new已被刪除。

      第十步:添加菜單項"添加一列",并添加相應的消息處理函數,然后添加代碼如下:

    void CTestadoView::OnAddColumn()
    {
    _variant_t RecordsAffected;
    m_pConnection->Execute("ALTER TABLE new ADD newcolumn1 INTEGER",&RecordsAffected,adCmdText);
    }


      運行程序,執行菜單當中的命令"添加一列",我們可以發現數據庫中剛才添加的表new中已添加了一個新列。

      第十一步:添加菜單項"刪除一列",并添加相應的消息處理函數,然后添加代碼如下:

    void CTestadoView::OnAddColumn()
    {
    _variant_t RecordsAffected;
    m_pConnection->Execute("ALTER TABLE new ADD newcolumn1 INTEGER",&RecordsAffected,adCmdText);
    }


      運行程序,執行菜單當中的命令"刪除一列",我們可以發現數據庫中剛才添加的表new中的新列已被刪除。

      第十二步:添加菜單項"添加記錄",并添加相應的消息處理函數,然后添加代碼如下:

    void CTestadoView::OnAddRecord()
    {
    _variant_t RecordsAffected;
    for(int i = 1;i < 10; i ++)
    {
    CString strSQL;
    strSQL.Format("INSERT INTO new(ID,username,old) VALUES (%d, 'Washington',%d)",i,i*9);
    m_pConnection->Execute((_bstr_t)strSQL,&RecordsAffected,adCmdText);
    }


      運行程序,執行菜單當中的命令"添加記錄",我們可以發現數據庫中剛才添加的表new中添加了九條新的記錄。

      第十三步:添加菜單項"old字段加1",并添加相應的消息處理函數,然后添加代碼如下:

    void CTestadoView::OnOldAddone()
    {
    _variant_t RecordsAffected;
    m_pConnection->Execute("UPDATE new SET old = old+1",&RecordsAffected,adCmdText);
    }}

      運行程序,執行菜單當中的命令"old記錄加1",我們可以發現數據庫中剛才添加的表new中的九條新的記錄的old字段都自動加1。

      第十四步:添加菜單項"統計記錄數目",并添加相應的消息處理函數,然后添加代碼如下:

    void CTestadoView::OnTotalRecords()
    {
    _RecordsetPtr m_pRecordset;
    _variant_t RecordsAffected;
    m_pRecordset =m_pConnection->Execute("SELECT COUNT(*) FROM new where ID > 0",&RecordsAffected,adCmdText);
    _variant_t vIndex = (long)0;
    _variant_t vCount = m_pRecordset->GetCollect(vIndex);
    ///取得第一個字段的值放入vCount變量
    m_pRecordset->Close();///關閉記錄集
    CString Message;
    Message.Format("共有%d條記錄",vCount.lVal);
    AfxMessageBox(Message);///顯示當前記錄條數
    }

      運行程序,執行菜單當中的命令"統計記錄數目",我們可以得到數據庫中記錄的數目。

      第十五步:添加菜單項"設置ID為索引",并添加相應的消息處理函數,然后添加代碼如下:

    void CTestadoView::OnSetIdIndex()
    {
    _variant_t RecordsAffected;
    m_pConnection->Execute("CREATE UNIQUE INDEX id ON new(ID)",&RecordsAffected,adCmdText);
    }

      運行程序,執行菜單當中的命令"設置ID為索引",我們可以發現數據庫中ID被設置為索引。

      第十六步:添加菜單項"數據匯總"、"old字段的總和"、"old字段的均值"、"old的最小值"、"old字段的最大值",并添加相應的消息處理函數,然后添加代碼如下:

    void CTestadoView::OnOldMax()
    {
    _RecordsetPtr m_pRecordset;
    _variant_t RecordsAffected;
    m_pRecordset =m_pConnection->Execute("select MAX(old) from new",&RecordsAffected,adCmdText);
    _variant_t vIndex = (long)0;
    _variant_t vCount = m_pRecordset->GetCollect(vIndex);
    ///取得第一個字段的值放入vCount變量
    m_pRecordset->Close();///關閉記錄集
    m_pRecordset.Release();
    CString Message;
    Message.Format("最大值是%d",vCount.lVal);
    AfxMessageBox(Message);
    }
    void CTestadoView::OnOldMin()
    {
    _RecordsetPtr m_pRecordset;
    _variant_t RecordsAffected;
    m_pRecordset =m_pConnection->Execute("select MIN(old) from new",&RecordsAffected,adCmdText);
    _variant_t vIndex = (long)0;
    _variant_t vCount = m_pRecordset->GetCollect(vIndex);
    ///取得第一個字段的值放入vCount變量
    m_pRecordset->Close();///關閉記錄集
    m_pRecordset.Release();
    CString Message;
    Message.Format("最小值是%d",vCount.lVal);
    AfxMessageBox(Message);
    }

    void CTestadoView::OnOldTotal()
    {
    _RecordsetPtr m_pRecordset;
    _variant_t RecordsAffected;
    m_pRecordset =m_pConnection->Execute("select SUM(old) from new",&RecordsAffected,adCmdText);
    _variant_t vIndex = (long)0;
    _variant_t vCount = m_pRecordset->GetCollect(vIndex);
    ///取得第一個字段的值放入vCount變量
    m_pRecordset->Close();///關閉記錄集
    m_pRecordset.Release();
    CString Message;
    Message.Format("總和是%d",(long)vCount);
    AfxMessageBox(Message);
    }

    void CTestadoView::OnOldAverage()
    {
    _RecordsetPtr m_pRecordset;
    _variant_t RecordsAffected;
    m_pRecordset =m_pConnection->Execute("select AVG(old) from new",&RecordsAffected,adCmdText);
    _variant_t vIndex = (long)0;
    _variant_t vCount = m_pRecordset->GetCollect(vIndex);
    ///取得第一個字段的值放入vCount變量
    m_pRecordset->Close();///關閉記錄集
    m_pRecordset.Release();
    CString Message;
    Message.Format("平均值是%d",(long)vCount);
    AfxMessageBox(Message);
    }}

      運行程序,執行菜單當中的匯總命令,我們可以得到相關的匯總信息。

    延伸閱讀

    文章來源于領測軟件測試網 http://www.kjueaiud.com/


    關于領測軟件測試網 | 領測軟件測試網合作伙伴 | 廣告服務 | 投稿指南 | 聯系我們 | 網站地圖 | 友情鏈接
    版權所有(C) 2003-2010 TestAge(領測軟件測試網)|領測國際科技(北京)有限公司|軟件測試工程師培訓網 All Rights Reserved
    北京市海淀區中關村南大街9號北京理工科技大廈1402室 京ICP備10010545號-5
    技術支持和業務聯系:info@testage.com.cn 電話:010-51297073

    軟件測試 | 領測國際ISTQBISTQB官網TMMiTMMi認證國際軟件測試工程師認證領測軟件測試網

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>