ODBC、ADO

一、VC访问数据库的技术

  1、ODBC --Open Database Connectivity微软开放式数据互联,一组用于访问和操作数据库的API,可以访问不同的数据库产品,但只能访问关系型数据库。MFC将这组API函数封装成ODBC类,使用前需要将不同的数据库设置为ODBC数据源。

  2、DAO --基于ODBC的,目前已经被淘汰

  3、OLE DB  --基于COM技术的,提供了一组用于访问和操作数据库的接口。既可以访问关系型又可以访问非关系型数据,性能也有了很大提高。缺点是学习难度大,对程序员要求高,并未流行起来。

  4、ADO --基于OLE DB,对OLE DB又进行了封装,提供了一组简单的接口,逐渐流行起来,成为使用最广泛的技术之一。

  5、ADO.NET --基于.net平台的,适用于该平台之上的VB、VC、C#等各种语言。是一组用于访问和操作数据库的类。

二、ODBC类的使用

  1、相关类

    CDatabase类 -提供了数据库的连接和关闭功能,另外还提供了执行Sql语句的功能。

    CRecordset类 -提供了对数据表中数据的操作。

    以上两个类需包含头文件 #include <afxdb.h>

  2、使用步骤:

    2.1设置ODBC数据源

      控制面板->管理工具->数据源ODBC

      

    2.2使用ODBC类

      1--连接ODBC数据源 CDatabase::Open

      2--执行sql语句  CDatabase::ExecuteSQL

      3--打开数据表  CRecordset::Open

      4--获取字段数量  CRecordset::GetODBCFieldCount

      5--获取字段的信息  CRecordset::GetODBCFieldInfo

      6--获取字段的值   CRecordset::GetFieldValue

      7--记录的指针移动  CRecordset::MoveFirst/MoveLast/Move/MoveNext/MovePrevious

        CRecordset::IsBOF  //是否移动到了最开始

        CRecordset::IsEOF  //是否移动到了最末尾

      8--关闭记录集  CRecordset::Close

      9--关闭数据源  CDatabase::Close

   了解 CRecordView -显示数据库中记录的视图

三、使用ADO访问数据库

  1、ADO的文件:msado15.dll

    所在路径-C:/Program Files/Common Files/System/ado/msado15.dll

  2、导入ADO组件

    #import "组件文件所在路径" no_namespace rename("EOF","adoEOF")

    在项目头文件StdAfx.h中添加以上导入命令,编译后,在Debug文件下生成msado15.tlh、msado15.tli,这两个文件类似于控件的包装类。

  3、在使用任何COM组件时,都必须首先初始化COM库。

    3.1使用组件前,初始化COM库  CoInitialize(NULL);

    3.2使用组件后,卸载COM库  CoUninitialize();

  4、ADO组件的使用

    使用C++类封装ADO组件的接口,好处是方便C++程序对ADO的使用。

    4.1 Connection接口(使用CAdoDatabase类封装)

      功能与ODBC类的CDatabase类似

      1-- Open()函数,连接数据库

        HRESULT Open (

                                        _bstr_t ConnectionString,  //连接字符串

                                        _bstr_t UserID,  //登录名称;在连接字符串中设置了该处即为""

                                        _bstr_t Password,  //登录密码;在连接字符串中设置了该处即为""

                                        long Options   //连接方式,直接写-1

        );

        由于不同的数据库“连接字符串”各不相同,所以通过新建*.udl文件自动生成连接字符串:

在桌面新建文本文档->重命名为1.udl->打开该文件->选择[提供程序]选项卡->选择对应的数据库驱动,点击“下一步”->输入相关信息后,测试连接,成功后确定即可;将1.udl重新以记事本方式打开,即可见连接字符串,如:

          Provider=Microsoft.Jet.OLEDB.4.0;

          Data Source=D:\ado.mdb;

          或

          Provider=Microsoft.Jet.OLEDB.4.0;

          Password=123;User ID=ZWQ;

          Data Source=D:\ado.mdb;

    4.2 Recordset接口(使用CAdoRecordset类封装)

      功能与ODBC类的CRecordset类似

      1-- Open()函数,执行sql语句、打开表、执行存储过程

        HRESULT Open (

                         const _variant_t & Source,  //sql语句、表名、存储过程

                             const _variant_t & ActiveConnection,  //活动连接

                             enum CursorTypeEnum CursorType,  //游标类型

                             enum LockTypeEnum LockType,  //锁定类型

           long Options   //标识第一个参数,sql语句-adCmdText/表名-adCmdTable/存储过程-adCmdStoredProc

        );

        游标类型:

        enum CursorTypeEnum{

                                    adOpenForwardOnly = 0,  //单向的静态游标

                                    adOpenKeyset = 1,  //键集游标,动态游标

                                    adOpenDynamic = 2,  //动态游标

                                    adOpenStatic = 3  //双向的静态游标

        };

        如果记录集使用的是动态游标,记录集会随着用户对表的修改发生变化;如果使用的静态游标,从表中取出数据后不再改变。

        锁定类型(多用户对同一数据库进行操作时):

        enum LockTypeEnum{

                                adLockReadOnly = 1,  //只读记录集

                                adLockPessimistic = 2,  //悲观锁

                                adLockOptimistic = 3,  //乐观锁

                                adLockBatchOptimistic = 4  //批处理方式的乐观锁

        };

      2-- 获取字段的数量(Fields)  Fields->GetCount()

      3-- 获取字段标题  Fields->GetItem(nIndex)->GetName()

      4-- 获取字段的值  Fields->GetItem(nIndex)->Value

      5-- 记录集的指针操作  MoveNext/MovePrevious/MoveFirst/MoveLast/Move(long nNums)

        IsEOF -是否移动到了最末尾 / IsBOF -是否移动到了最开始

      6-- 方式一:通过记录集的方式增、删、改

        6.1添加记录

          1--从数据表中获取数据到记录集  OpenTable()

          2--在记录集中添加一条新记录  AddNew()

          3--设置该记录各个字段的值  SetFieldValue

          4--更新到数据库  Update()

          5--重新显示数据  ShowData()

        6.2删除记录

          1--从数据表中获取数据到记录集  OpenTable()

          2--将记录指针移动到要删除的记录  MoveLast()

          3--执行删除操作  Delete()

          4--更新到数据库  Update()

          5--重新显示数据  ShowData()

        6.3修改记录

          1--从数据表中获取数据到记录集  OpenTable()

          2--将记录指针移动到要修改的记录  MoveFirst()

          3--执行修改操作  SetFieldValue

          4--更新到数据库 Update()

          5--重新显示  ShowData()

      7--方式二:通过执行sql语句的方式增、删、改操作

        1、Connection接口Execute()函数

          返回一个记录集,无法通过参数设置记录集的游标类型和锁定类型,是一个只读的,游标类型是单向的静态游标,所以,常用它执行增、删、改操作

        2、Recordset接口Open()函数

          常用Open()函数执行查询操作,可结合记录集的增、删、改方式对数据表中的数据进行增、删、改

  5、事务处理

    Connection接口提供了事务处理的功能

      启动事务 BeginTrans()

      结束事务 EndTrans(FALSE)--事务结束时包含了执行事务CommitTrans和回滚事务RollbackTrans

  6、如何在数据表中保存视频、图片数据?

    通常在数据库中保存视频、图片所对应的文件的路径

 

posted @ 2017-05-29 22:48  Autumn_n  阅读(321)  评论(0编辑  收藏  举报
TOP