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、如何在数据表中保存视频、图片数据?

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

  • 相关阅读:
    博客链接--竹子
    升级sudo至1.9.5p2,修复sudo漏洞
    使用Jenkins自动打包部署前端
    升级sudo至1.9.5p2,修复sudo漏洞
    60行C代码实现一个shell
    copy_{to, from}_user()的思考
    Code Server 是什么?
    Linux常用命令学习(5)
    Linux sudo权限提升漏洞(CVE-2021-3156)
    厚书读薄丨《Vim实用技巧》第一部分 模式
  • 原文地址:https://www.cnblogs.com/zhouwanqiu/p/6919241.html
Copyright © 2011-2022 走看看