數據庫連接

數據庫訪問技術

ODBC(Open Database Connectivity),開放數據庫互連。
ODBC是上個世紀八十年代末九十年代初出現的技術,它爲編寫關係數據庫的客戶軟件提供了一種統一的接口。
ODBC提供一個單一的API,可用於處理不同數據庫的客戶應用程序。
使用ODBC API的應用程序可以與任何具有ODBC驅動程序的關係數據庫進行通信。

DAO(Data Access Object),數據訪問對象。
DAO就是一組Microsoft Access/Jet數據庫引擎的COM自動化接口。
DAO不像ODBC那樣是面向C/C++程序員的,它是微軟提供給Visual Basic開發人員的一種簡單的數據訪問方法,用於操縱Access數據庫。

RDO(Remote Data Object),遠程數據對象。由於RDO直接調用ODBC API(而不是像DAO那樣通過Jet引擎),所以,可以爲使用關係數據庫的應用程序提供更好的性能。

OLE DB,對象鏈接與嵌入數據庫。
OLE DB在兩個方面對ODBC進行了擴展。
首先, OLE DB提供了一個數據庫編程的COM接口;
第二, OLE DB提供了一個可用於關係型和非關係型數據源的接口。
OLE DB的兩個基本結構是OLE DB提供程序(Provider)和OLE DB用戶程序(Consumer)。
OLE DB提供程序可以訪問ODBC數據庫、電子表格、電子郵件、其他非關係型存儲

ADO(ActiveX Data Object),ActiveX數據對象,它建立在OLE DB之上。
ADO是一個OLE DB用戶程序。
使用ADO的應用程序都要間接地使用OLE DB。
ADO簡化了OLE DB,提供了對自動化的支持,使得像VBScript這樣的腳本語言也能夠使用ADO訪問數據庫。


ADO的三個核心對象

Connection對象
表示了到數據庫的連接,它管理應用程序和數據庫之間的通信。
Recordset和Command對象都有一個ActiveConnection屬性,該屬性用來引用Connection對象。

Command對象
用來處理重複執行的查詢,或處理需要檢查在存儲過程調用中的輸出或返回參數的值的查詢。

Recordset對象
用來獲取數據。
 Recordset對象存放查詢的結果,這些結果由數據的行(稱爲記錄)和列(稱爲字段)組成。
每一列都存放在Recordset的Fields集合中的一個Field對象中。


VC如何訪問數據庫編程?
找到StdAfx.h,在裏面添加

#import "C:/Program Files/Common Files/System/ado/msado15.dll" no_namespace rename("EOF","rsEOF")--》找到你係統文件夾下的msado15.dll

添加按鈕
void CAdoDlg::OnBtnQuery()
{
    // TODO: Add your control notification handler code here
    CoInitialize(NULL);
    _ConnectionPtr pConn(__uuidof(Connection));
    _RecordsetPtr pRst(__uuidof(Recordset));
    _CommandPtr pCmd(__uuidof(Command));

    //pConn->ConnectionString="Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;Initial Catalog=pubs";
    pConn->ConnectionString="Provider=SQLOLEDB.1;Password=sa;Persist Security Info=True;User ID=sa;Initial Catalog=pubs";
    pConn->Open("","","",adConnectUnspecified);

    pRst=pConn->Execute("select * from authorsInfo",NULL,adCmdText);
    //pRst->Open("select * from authors",_variant_t((IDispatch*)pConn),
    //    adOpenDynamic,adLockOptimistic,adCmdText);
/*    pCmd->put_ActiveConnection(_variant_t((IDispatch*)pConn));
    pCmd->CommandText="select * from authorsInfo";
    pRst=pCmd->Execute(NULL,NULL,adCmdText);
*/    while(!pRst->rsEOF)
    {
        ((CListBox*)GetDlgItem(IDC_LIST1))->AddString(
            (_bstr_t)pRst->GetCollect("au_lname"));
        pRst->MoveNext();
    }
   
    pRst->Close();
    pConn->Close();
    pCmd.Release();
    pRst.Release();
    pConn.Release();
    CoUninitialize();
}

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