VC的数据库应用

时间:2022-04-10 11:24:34

VC的数据库应用

摘要:该文对VC的数据库编程特点进行了分析,指出了它的优势所在。然后分析了两种VC编程的模式,并且详细给出了ADO方式的具体实例。最后进一步指出VC下的ADO方式是一种较好的数据库应用方法。

关键词:VC;数据库;ADO;ODBC;计算机应用

中图分类号:TP311文章标识码:A 文章编号:1009-3044(2009)26-7338-02

VC++作为Windows平台上最优秀的C++编程环境之一,它既能面向对象又具有一些其它的特点。虽然学习、应用VC要了解很多Windows平台的特性并且还要掌握ATL、COM等的知识,难度比较大,但它仍然是一个对底层支持非常好的、必不可少的优秀编程环境。特别是它的MFC编程方式:MFC是一个很大的、扩展了的C++类层次结构,它能使开发 Windows 应用程序变得更加容易。在数据库开发中,VC也是一个强大的工具,本文就是分析在VC环境下的数据库开发,希望能够起到抛砖引玉的作用。

1 VC数据库编程的特点

对于像dBASE IV,FoxPro,Oracle和Access这样的产品是完全以数据库管理为中心的,这些产品非常善于创建数据库管理器。在应用这些商业数据库的时候,使用VisualBasic和Delphi等环境就可以协助来实现构建这种管理器。实际上应用这些软件,编写成熟的、用户界面良好的、具有高速搜索能力的数据库管理系统DBMS非常的简单。所以实际上从方便的角度讲,VisualBasic和Delphi这样的RAD环境更加适合于数据库开发,应用这些软件可以在使程序设计非常地容易。对大多数数据库应用来说,选择VC++也许并不适宜。

但是需要考虑到,单纯的数据库管理必须要和其它的功能结合才能发挥更大的作用,而数据库软件并不轻易地支持这些拓展的功能。这时为了实现各种复杂的功能,Visual C++就可以提供的一些重要东西。由于VC对底层强大的支持,其高效的率的代码结构,编写的数据库相关应用程序就会有规模小、提供底层访问并能提供实时访问的特点。比如编写数据库实用程序及驱动程序时,可以选择Visual C++语言;又比如在硬盘较小或内存有限制时,Visual C++提供了无价无限的工具。

2 VC数据库编程的方式

2.1 ODBC方式

Microsoft最初是以开放数据库互连(ODBC)为目标的, ODBC是Microsoft引进的一种早期数据库接口技术,是ADO的前身。Microsoft引进这种技术的一个主要原因是,以非语言专用的方式提供给程序员一种访问数据库内容的简单方法。它使得编程人员在访问DBF文件或Access Basic得到MDB文件中的数据时,无需懂得Xbase程序设计语言。ODBC工作起来和Windows一样,它用包含在DLL内的驱动程序完成任务。ODBC提供一套两个驱动程序:一个是数据库管理器的语言,另一个为程序设计语言提供公用接口。允许Visual C++用标准的函数调用经公用接口访问数据库的内容,是这两个驱动程序的汇合点。当然,还有其它和ODBC有关的实用程序类型的DLL。例如,一个这样的DLL允许管理ODBC数据源。

2.2 ADO方式

要理解ADO方式需要首先了解OLE-DB的含义。顾名思义OLE-DB用OLE(或者更具体一点,是部件对象模型COM)为数据访问提供一套接口。就像任何其它的COM对象一样,可以查询、创建和撤销一个OLE-DB对象。OLE-DB对象的来源被称为提供者。各种OLE-DB提供者是Visual C++软件包的一部分,也有可能在厂商升级其数据库产品时提供。OLE-DB的好处是,同一个提供者可以和任何Visual Studio产品协作:Visual C++,Visual Basic,Visual InterDev和Visual J++。OLE-DB还依赖于事件,这和任何COM对象一样。这些事件说明什么时候要求更新数据库表,以显示其它用户生成的新项,或者所请求的表什么时候准备好供查看。还会看到这样的事件,它们用来发送信号通知各种数据库错误和其它要求马上轮询的活动。

而ADO并不是数据库访问的底层解决方案。OLE-DB是使用ADO的基础;它也提供与数据库通信的基础。ADO只是OLE-DB提供的服务的包装。事实上甚至可以绕过ADO而直接使用OLE-DB,但是使用ADO开发应用程序的速度要快得多。

3 VC数据库编程实例

ADO既能应用到VC的强大功能,而且使用起来又比较方便,本文以ADO方式数据库访问为例,展示VC下如何进行数据库应用。

3.1 ADO数据库开发基本流程

1)初始化COM库,引入ADO库定义文件;2)用Connection对象连接数据库;3)利用建立好的连接,通过Connection、Command对象执行SQL命令,或利用Recordset对象取得结果记录集进行查询、处理;(4)使用完毕后关闭连接释放对象。

3.2 实例―BLOG数据保存

在实际的开发过程中常常需要存储较大的二进制数据对象,比如图像、音频文件、或其它二进制数据,这些数据称之为二进制大对象BLOB(Binary Large Object),其存取的方式与普通数据有所区别。这里利用ADO在数据库中存取BLOB数据的具体实现过程。BLOB类型的数据无法用普通的方式进行存储,需要使用AppendChunk函数,AppendChunk包含在Field对象中,原型如下:HRESULT AppendChunk (const _variant_t & Data );从函数原型中可以看到关键的问题是需把二进制数据赋值给VARIANT类型的变量,下面给出具体的代码并作简单的分析。

///假设m_pBMPBuffer指针指向一块长度为m_nFileLen的二进制数据,并且已经成功打开了记录集对象m_pRecordset///

char*pBuf = m_pBMPBuffer; VARIANTvarBLOB; SAFEARRAY *psa;

SAFEARRAYBOUND rgsabound[1];

m_pRecordset->AddNew();///添加新记录

m_pRecordset->PutCollect("username",_variant_t("小李")); ///为新记录填充username字段

m_pRecordset->PutCollect("old",_variant_t((long)28); ///填充old字段

if(pBuf)

{ rgsabound[0]. Lbound = 0;

rgsabound[0].cElements = m_nFileLen;

psa = SafeArrayCreate(VT_UI1, 1, rgsabound); ///创建SAFEARRAY对象

for (long i = 0; i < (long)m_nFileLen; i++)

SafeArrayPutElement (psa, &i, pBuf++);

///将pBuf指向的二进制数据保存到SAFEARRAY对象psa中

varBLOB.vt = VT_ARRAY | VT_UI1; ///将varBLOB的类型设置为BYTE类型的数组

varBLOB.parray = psa; ///为varBLOB变量赋值

m_pRecordset->GetFields()->GetItem("photo")->AppendChunk(varBLOB);

///加入BLOB类型的数据}

m_pRecordset->Update();///保存数据到库中

至此数据已经成功地保存到了数据库中。

4 总结

ADO是Microsoft数据库应用程序开发的新接口,是建立在OLE /DB之上的高层数据库访问技术,即使对OLE/DB,COM不了解也能轻松应用ADO。在VC下应用ADO方式进行数据库开发既能应用到VC的优良特性,又不失简便,是一种值得推荐的方法。

参考文献:

[1] 张慧平.电网中利用ODBC实现对历史数据库的访问[J].航空精密制造技术,1998.34(6):42-44.

[2] 王聪华.ADO访问数据库实例剖析[J].计算机应用研究,2002(5):159-160.

[3] 郑章,程刚,张勇.Visual C++6.0数据库开发技术[M].北京:机械工业出版社,1999.

上一篇:基于虚拟现实的成人教育系统 下一篇:鸿合多媒体教室方案的运用