Visual C++ 数据库开发
初级篇
几种VC++数据库开发技术的比较
从功能简单的数据库(如Jet Engine)到复杂的大型数据库系统(如oracle),VC++6.0都提供了一些编程接口。本文主要介绍以下五种
ODBC基本概念
ODBC(Open
Database Connectivity,开放数据库互连)是微软公司开放服务结构(WOSA,Windows Open Services
Architecture)中有关数据库的一个组成部分,它建立了一组规范,并提供了一组对数据库访问的标准API(应用程序编程接口)
Visual C++ 中的ODBC编程
ODBC(Open Database
Connectivity,开放式数据库连接),是一种用来在相关或不相关的数据库管理系统(DBMS)中存取数据的标准应用程序接口(API)。本文给出Windows 95 环境下用Visual C++ 进行ODBC 编程的具体方法及技巧
用Visual
C++开发数据库应用程序
Visual C++提供了多种多样的数据库访问技术——ODBC API、MFC ODBC、DAO、OLE DB、ADO等。这些技术各有自己的特点,它们提供了简单、灵活、访问速度快、可扩展性好的开发技术
ADO篇
VC用Ado接口连接和使用数据库
进行方法调用时,所传递的参数的类型的转换(可能存在比本文更简便的处理方法但我未发现)
VC中利用ADO共同实现数据库的操作
ADO是应用层的编程接口,它通过OLE DB提供的COM接口访问数据,它适合于各种客户机/服务器应用系统和基于Web的应用,尤其在一些脚本语言中访问数据库操作是ADO的主要优势
ADO第一次亲密接触 -- ADO开发实践之一
ADO(ActiveX
Data Object)是Microsoft数据库应用程序开发的新接口,是建立在OLE DB之上的高层数据库访问技术
使用ADO实现BLOB数据的存取
-- ADO开发实践之二
在实际的开发过程中我们常常需要存储较大的二进制数据对象,比如:图像、音频文件、或其它二进制数据,这些数据我们称之为二进制大对象BLOB(Binary Large Object),其存取的方式与普通数据有所区别
单独使用CRecordSet
一般情况下AppWizard会在数据库应用程序中自动产生CRecordset的派生类,并将派生类和某个数据源中的表联系起来也可以和视图上的子窗口联系起来
高级篇
Visual C++中实现对图像数据的读取显示
在利用VC进行数据库编程时,经常需要处理数据库中的图像数据,将该图像从数据库中读取出来并显示,图像数据与文本字段不同,它是作为OLE字段在数据库中存储
在Visual
C++中用ADO进行数据库编程
创建一个标准的MFC
AppWizard(exe)应用程序,然后在使用ADO数据库的InitInstance函数中初始化OLE/COM库(因为ADO库是一个COM DLL库)
在ODBC中应用DDX和RFX
MFC 中 针 对ODBC 数 据 库 编 程 提 供 了 五 种 基 类。 这 些 类 封 装 了 有 关ODBC 的API 调 用, 使 用 户 能 够 利 用ODBC 完 成 不 同 类 型 的 数 据 库 编 程 工 作, 如 访 问Foxpro、dBASE 或Sybase 等 不 同 类 型 数 据 库 文 件, 从 而 避 开 各 种 类 型 数 据 库 文 件 的 复 杂 的 内 部 结 构
Visual C++多线程DAO处理
在DAO多线程处理中,有许多局限性,所以我设计了这么一个类,通过GUI线程来使用DAO的强制调用
|
几种VC++数据库开发技术的比较 |
|
|
|
2001-12-04· ·陆尔东、邓利平··yesky |
|
|
3.MFC DAO(数据访问对象)编程:DAO用于和微软的Access数据库接口。在数据库应用程序如果只需与Access数据库接口时,使用DAO编程较方便。其主要类如下。
CDaoWorkspace:CDaoWorkspace对象可以让一个用户管理从登陆到离开期间,指定的密码保护的数据库会话全过程。大多数情况下不要多个工作区也不要创建明确的工作区对象。因为在打开数据库和记录集对象时,它们可以使用DAO缺省工作区。
CDaoDatabase:代表一个连接,类似上述CDatabase类。
CDaoRecordSet:用来选择记录集并操作,类似上述CRecordSet类。
CDaoRecordView:类似上述CRecordView类。
CDaoException:类似上述CDBException类。
CDaoTableDef:表示基本表或附加表的定义。每个DAO数据库对象包括一个称为TableDef的收集,包含所有存储的DAO表定义对象。CDaoTableDef对象可以用来控制表定义。
CDaoQueryDef:CDaoQueryDef对象表示了一个查询定义(querydef)。
CDaoFieldExchange:支持数据库类使用的DAO字段交换(DFX)例程。也可处理事务,类似MFC ODBC类。
MFC DAO仅用来支持Access数据库,应用范围相对固定。
4.OLE DB:OLE DB在数据提供程序和用户之间提供了灵活的组件对象模型(COM)接口,这种灵活性有时会使得操作复杂化。OLE DB框架定义了应用的三个基本类。
数据提供程序Data
Provider:拥有自己的数据并以表格形式显示数据的应用程序。提供OLE DB的行集COM接口,期显示范围可以从单一数据表格的简单提供者知道更复杂的分布式数据库系统。
使用者Consumers:使用OLE DB接口对存储在数据提供程序中的数据进行控制的应用程序。用户应用程序归为使用类。
服务提供程序Service
Provider:是数据提供程序和使用者的组合。服务提供程序没有自己的数据,但使用
OLE DB使用者接口来访问存储在数据提供程序中的数据。然后,服务提供程序通过打开数据提供程序接口使得数据对使用者有效。服务提供程序常用于向应用程序提供高层次服务,比如高级分布式查询。
OLE DB编程时,用户使用组件对象开发应用程序。这些组件有:
枚举器:用于列出可用的数据源;
数据源:代表单独的数据和服务提供程序,用于创建对话;
对话:用于创建事务和命令;
事务:用于将多个操作归并为单一事务处理;
命令:用于向数据源发送文本命令(SQL),返回行集;
错误:用于获得错误信息。
5.ActiveX数据对象(ADO):是微软提供的面向对象的接口,与OLE DB类似,但接口更简单,具有更广泛的特征数组和更高程度的灵活性。ADO基于COM,提供编程语言可利用的对象,除了面向VC++,还提供面向其他各种开发工具的应用,如VB,VJ等。ADO在服务器应用方面非常有用,特别是对于动态服务器页面ASP(Active
Server Page)。
ADO对象结构类似于OLE DB,但并不依靠对象层次。大多数情况下,用户只需要创建并只使用需要处理的对象。下面的对象类组成了ADO接口。
Connection:用于表示与数据库的连接,以及处理一些命令和事务。
Command:用于处理传送给数据源的命令。
Recordset:用于处理数据的表格集,包括获取和修改数据。
Field:用于表示记录集中的列信息,包括列值和其他信息。
Parameter:用于对传送给数据源的命令之间来回传送数据。
Property:用与操作在ADO中使用的其他对象的详细属性。
Error:用于获得可能发生的错误的详细信息。
在VC++使用ADO需要进行COM操作,详细方法在此就不赘述了。
在当今流行的分布式开发环境下,VC++6.0在数据库开发方面有较强的优势,学会
在不同的场合选用不同的技术,对开发人员来说是必要的技术。
|
ODBC基本概念 |
|
|
|
2002-03-21· · ··yeah |
|
ODBC(Open Database Connectivity,开放数据库互连)是微软公司开放服务结构(WOSA,Windows Open Services Architecture)中有关数据库的一个组成部分,它建立了一组规范,并提供了一组对数据库访问的标准API(应用程序编程接口)。这些API利用SQL来完成其大部分任务。ODBC本身也提供了对SQL语言的支持,用户可以直接将SQL语句送给ODBC。
|
|
【责任编辑:】 |
Visual C++ 中的ODBC编程
2000-01-30
00:00:00· 董毅·CPCW
篛DBC(Open Database
Connectivity,开放式数据库连接),是一种用来在相关或不相关的数据库管理系统(DBMS)中存取数据的标准应用程序接口(API)。本文给出Windows 95 环境下用Visual C++ 进行ODBC 编程的具体方法及技巧。
----
关键字:ODBC,Visual C++,Windows 编程。
----
一.概述
----
ODBC 是一种使用SQL 的程序设计接口。使用ODBC 让应用程序的编写者避免了与数据源相联的复杂性。这项技术目前已经得到了大多数DBMS 厂商们的广泛支持。
----
Microsoft Developer Studio 为大多数标准的数据库格式提供了32 位ODBC 驱动器。这些标准数据格式包括有:SQL Server、Access、Paradox、dBase、FoxPro、Excel、Oracle 以及Microsoft Text。如果用户希望使用其他数据格式,用户需要相应的ODBC 驱动器及DBMS。
----
用户使用自己的DBMS 数据库管理功能生成新的数据库模式后,就可以使用ODBC 来登录数据源。对用户的应用程序来说,只要安装有驱动程序,就能注册很多不同的数据库。登录数据库的具体操作参见有关ODBC 的联机帮助。
----
二.MFC 提供的ODBC 数据库类
----
Visual C++ 的MFC 基类库定义了几个数据库类。在利用ODBC 编程时,经常要使用到CDatabase( 数据库类),CRecordSet( 记录集类) 和CRecordView( 可视记录集类)。其中:
----
CDatabase 类对象提供了对数据源的连接,通过它你可以对数据源进行操作。
----
CRecordSet 类对象提供了从数据源中提取出的记录集。CRecordSet 对象通常用于两种形式:动态行集(dynasets)和快照集(snapshots)。动态行集能保持与其他用户所做的更改保持同步。快照集则是数据的一个静态视图。每一种形式在记录集被打开时都提供一组记录,所不同的是,当你在一个动态行集里滚动到一条记录时,由其他用户或是你应用程序中的其他记录集对该记录所做的更改会相应地显示出来。
----
CRecordView 类对象能以控制的形式显示数据库记录。这个视图是直接连到一个CRecordSet 对象的表视图。
----
三.应用ODBC 编程
----
应用Visual C++ 的AppWizard 可以自动生成一个ODBC 应用程序框架。方法是:打开File 菜单的New 选项,选取Projects,填入工程名,选择MFC AppWizard
(exe),然后按AppWizard 的提示进行操作。当AppWizard 询问是否包含数据库支持时,如果你想读写数据库,那么选定Database view
with file support;而 阆敕梦适菘獾男畔⒍幌牖匦此龅母谋洌敲囱《―atabase view without
file support 选项就比较合适了。选择了数据库支持之后Database
Source 按钮会激活,选中它去调用Data Options 对话框。在Database
Options 对话框中会显示已向ODBC 注册的数据库资源,选定你所要操作的数据库,如:Super_ES,单击OK 后会出现Select Database
Tables 对话框,其中列举了你所选中的数据库中包含的全部表,选择你希望操作的表后,单击OK。在选定了数据库和数据表之后,你可以按照惯例继续进行AppWizard 操作。
----
特别需要指出的是:在生成的应用程序框架View 类(如:CSuper_ESView)中包含一个指向CSuper_ESSet 对象的指针m_pSet,该指针由AppWizard 建立,目的是在视表单和记录集之间建立联系,使得记录集中的查询结果能够很容易地在视表单上显示出来。有关m_pSet 的详细用法可以参见Visual C++
Online Book。
----
程序与数据语言建立联系,使用CDatebase::OpenEx()
或CDatabase::Open()
函数来进行初始化。数据库对象必须在你使用它构造一个记录集对象之前被初始化。
----
下面举例说明在Visual C++ 环境中ODBC 的编程技巧:
----
1 .查询记录
----
查询记录使用CRecordSet::Open()
和CRecordSet::Requery()
成员函数。在使用CRecordSet 类对象之前,必须使用CRecordSet::Open()
函数来获得有效的记录集。一旦已经使用过CRecordSet::Open()
函数,再次查询时就可以应用CRecordSet::Requery()
函数。在调用CRecordSet::Open()
函数时,如果已经将一个已经打开的CDatabase 对象指针传给CRecordSet 类对象的m_pDatabase 成员变量,则使用该数据库对象建立ODBC 连接;否则如果m_pDatabase 为空指针,就新建一个CDatabase 类对象并使其与缺省的数据源相连,然后进行CRecordSet 类对象的初始化。缺省数据源由GetDefaultConnect()
函数获得。你也可以提供你所需要的SQL 语句,并以它来调用CRecordSet::Open()
函数,例如:
Super_ESSet.Open(AFX_DATABASE_USE_DEFAULT,strSQL);
----
如果没有指定参数,程序则使用缺省的SQL 语句,即对在GetDefaultSQL()
函数中指定的SQL 语句进行操作:
CString
CSuper_ESSet::GetDefaultSQL()
{return
_T("[BasicData],[MainSize]");}
----
对于GetDefaultSQL()
函数返回的表名,对应的缺省操作是SELECT 语句,即:
SELECT
* FROM BasicData,MainSize
----
查询过程中也可以利用CRecordSet 的成员变量m_strFilter 和m_strSort 来执行条件查询和结果排序。m_strFilter 为过滤字符串,存放着SQL 语句中WHERE 后的条件串;m_strSort 为排序字符串,存放着SQL 语句中ORDER BY 后的字符串。如:
Super_ESSet.m_strFilter="TYPE=电动机";
Super_ESSet.m_strSort="VOLTAGE";
Super_ESSet.Requery();
对应的SQL语句为:
SELECT
* FROM BasicData,MainSize
WHERE
TYPE=电动机
ORDER
BY VOLTAGE
----
除了直接赋值给m_strFilter 以外,还可以使用参数化。利用参数化可以更直观,更方便地完成条件查询任务。使用参数化的步骤如下:
----
(1) .声明参变量:
CString
p1;
float
p2;
----
(2) .在构造函数中初始化参变量
p1=_T("");
p2=0.0f;
m_nParams=2;
----
(3) .将参变量与对应列绑定
pFX-
>SetFieldType(CFieldExchange::param)
RFX_Text(pFX,_T("P1"),p1);
RFX_Single(pFX,_T("P2"),p2);
----
完成以上步骤之后就可以利用参变量进行条件查询了:
m_pSet-
>m_strFilter="TYPE=? AND VOLTAGE=?";
m_pSet-
>p1=" 电动机";
m_pSet-
>p2=60.0;
m_pSet-
>Requery();
----
参变量的值按绑定的顺序替换查询字串中的"?"
适配符。
----
如果查询的结果是多条记录的话,可以用CRecordSet 类的函数Move(),MoveNext(),MovePrev(),MoveFirst() 和MoveLast() 来移动光标。
----
2 .增加记录
----
增加记录使用AddNew() 函数,要求数据库必须是以允许增加的方式打开:
m_pSet-
>AddNew(); //在表的末尾增加新记录
m_pSet-
>SetFieldNull(&(m_pSet- >m_type), FALSE);
m_pSet-
>m_type=" 电动机";
...
//输入新的字段值
m_pSet-
> Update(); //将新记录存入数据库
m_pSet-
>Requery(); //重建记录集
----
3 .删除记录
----
直接使用Delete() 函数,并且在调用Delete() 函数之后不需调用Update() 函数:
m_pSet-
>Delete();
if
(!m_pSet- >IsEOF())
m_pSet-
>MoveNext();
else
m_pSet-
>MoveLast();
----
4 .修改记录
----
修改记录使用Edit() 函数: