数据库连接

数据库访问技术

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();
}

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