MFC数据库编程
Microsoft ODBC 数据库管理
微机普及的部分原因在于它在查询目录、处理要求、打印薪水册等方面价格低廉。商务应用程序需要到大型数据库中某个记录的快速连接。最早的微机数据库工具是dBase II,它是拥有特定编程语言和文件格式的单用户产品。如今有很多可编程数据库管理系统供Windows程序员选择,包括Inprise Paradox,Microsoft Access,Microsoft FoxPro和PowerBuilder。这些产品大多数具有访问本地数据和远程中心计算机上的数据能力。后者需要数据库服务器软件如ORACLE和Microsoft SQL Server。
Visual C++ 企业版自带了SQL Server。
作为一个MFC程序员,您如何做到这些?Visual C++包含了编写Windows数据库应用程序所需的所有组件。事实上,这个产品包括了两个不同的客户端数据库访问系统:ODBC(Open Database Connectivity)和DAO(Data Access Objects)。另外,Visual C++现在包含了通过OLE DB直接访问数据的模板。本章主要介绍ODBC标准。ODBC包含了一系列提供标准数据应用程序编程接口的可扩展DLL。ODBC是基于标准的数据查询语言(SQL)的。使用ODBC和SQL,你就能写出独立于任何数据库产品的数据库访问代码。
Visual C++为ODBC编程提供了相应工具和MFC类,这是本章的主题。你将了解ODBC的基本概念,并且你将看到四个示例程序:示例EX31A利用MFC类Crecordset来使用ODBC rowset,示例EX31B使用MFC类CrecordView,EX31C使用符合记录集,EX31D在不帮定的情况下使用Crecordset。
数据库管理的优点
序列化进程将一个文档对象和一个磁盘文件绑定。当文档打开时,所有数据必须读入内存,并且在文档关闭时所有数据又必须写回磁盘文件。很显然,你不能将一个比可用虚拟内存大的文档。即使文档能装入内存,也没有必要每次都将数据读入内存。
也许你可以自己编写任意读写磁盘文件,事实上发明了你自己的DBMS,但是你不一定有那么多精力。并且,使用DBMS能给你带来很多好处,包括以下:
· 使用标准文件格式-提到数据库格式,很多人联想到dBase/Xbase DBF文件。这只是一种数据库文件格式,但是很普及。很多数据以DBF文件分发,并且很多程序能读写这种文件格式。后来Microsoft Access MDB格式变得很普及。使用MDB格式,数据库的所有表格和索引多能存储在一个磁盘文件里。
· 索引化的文件访问-如果你想通过关键字快速访问记录,你就需要索引化的文件访问。你可以自己编写B树文件访问过程,但那很繁琐并且别人已经完成。所有DBMS多带有高效的索引化访问过程。
· 数据完整性完全保护-很多专业化的DBMS产品拥有保护数据的过程。事务处理就是一个例子。一个事务包括一系列相互联系的变化。如果整个事务不能进行,它能回滚,从而使数据库恢复此次事务以前的数据。
· 多用户访问控制-也许你的程序目前不需要多用户访问功能,但可能将来需要。大多数DBMS提供记录锁定以防止用户之间互相影响。有些多用户DBMS使用客户-服务器模式。在此模式下,大多数操作由一个数据库服务器处理;工作站负责和用户沟通。有些多用户DBMS在工作站上处理数据操作,而他们负责控制工作站对共享文件的访问。
结构化查询语言
结构化查询语言在软件业界可以说是家喻户晓的。在SQL世界里,数据库就是由行和列组成的表的集合。很多DBMS支持SQL,并且很多程序员知道SQL。SQL标准在不断改进,并且不同产品的SQL语法也不尽相同。一些SQL扩展,比如blob能力,允许存储图像、声音等复杂数据结构。
ODBC标准
ODBC不仅定义了SQL语法规则还定义了所有SQL数据库的C语言编程借口。现在一个C/C++程序能访问任何拥有DBMS驱动的DBMS。Visual C++里自带的ODBC SDK提供了DBF文件、Access MDB文件、Excel XLS文件、Foxpro 文件、ASCII文本文件和SQL Server数据库的驱动。
其他数据库公司,例如Oracle、Infomix、Progress、Ingres和Centura Software也在他们的DBMS产品提供了ODBC驱动。例如,你使用dBase/Xbase驱动编写了一个MFC程序,这个程序使用Access驱动照样运行。不需要重新编译程序,应用程序只需装载不同的DLL。
除 C ++程序以外,还有其他 DBMS 编程环境能利用这种新标准的有点。你可以编写一个 C++ 程序去更新 SQL Server 数据库,然后你可以使用现成的 ODBC 兼容报表工具格式化和打印数据。 ODBC 将用户界面和实际数据库管理进程分离开来。你再也不需要从数据库引擎供应商哪里另外购买界面工具。