zoukankan      html  css  js  c++  java
  • 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、如何在数据表中保存视频、图片数据?

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

  • 相关阅读:
    UVA 1025 A Spy in the Metro DP水题
    ZOJ 3814 Sawtooth Puzzle BFS
    ZOJ 3816 Generalized Palindromic Number
    UVA 10859 Placing Lampposts 树形DP
    UVA 11825 Hackers' Crackdown 状压DP
    POJ 2887 Big String 线段树 离线处理
    POJ 1635 Subway tree systems Hash法判断有根树是否同构
    BZOJ 3110 k大数查询 & 树套树
    sdoi 2009 & 状态压缩
    来自于2016.2.24的flag
  • 原文地址:https://www.cnblogs.com/zhouwanqiu/p/6919241.html
Copyright © 2011-2022 走看看