- 浏览: 2031216 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (651)
- ACE (35)
- BAT (9)
- C/C++ (116)
- fast-cgi (14)
- COM (27)
- python (59)
- CGI (4)
- C# (2)
- VC (84)
- DataBase (29)
- Linux (96)
- P2P (6)
- PHP (15)
- Web (6)
- Memcached (7)
- IME输入法 (11)
- 设计模式 (2)
- 搜索引擎 (1)
- 个人情感 (4)
- 笔试/面试 (3)
- 一亩三分地 (33)
- 历史 (2)
- 地理 (1)
- 人物 (3)
- 经济 (0)
- 不仅仅是笑哦 (43)
- 小故事大道理 (2)
- http://www.bjdsmyysjk120.com/ (0)
- http://www.bjdsmyy120.com/ (0)
- 它山之石可以攻玉 (15)
- 大学生你关注些什么 (28)
- 数据恢复 (1)
最新评论
-
luokaichuang:
这个规范里还是没有让我明白当浏览器上传文件时,STDIN的消息 ...
FastCGI规范 -
effort_fan:
好文章!学习了,谢谢分享!
com技术简介 -
vcell:
有错误os.walk(strPath)返回的已经是全部的文件和 ...
通过python获取目录的大小 -
feifeigd:
feifeigd 写道注意:文章中的CPP示例第二行 #inc ...
ATL入门:利用ATL编写简单的COM组件 -
feifeigd:
注意:文章中的CPP示例第二行 #include " ...
ATL入门:利用ATL编写简单的COM组件
使用ADO封装类的数据库程序开发实例(上)
原文地址:http://www.vckbase.com/document/viewdoc/?id=610
下载本文示例源代码
源代码运行效果图如下:
一、前言
用过ADO的人都知道, 调用ADO要处理很多"麻烦"的事情,如异常处理等,要写很多try - catch块. 有点不甚其烦。我干脆把常用的函数都封装起来,免去老是要写try - catch块的麻烦。做起来虽然没有什么技术含量,但也比较烦琐,所以只完成了一部分,且由于时间及个人水平有限,没有对封装的东西作全面测试,并必定有很多错误,但想到对某些朋友可能有用。所以先"捐"出来了。^-^.
在介绍这两个类之前,让我们先来了解一下ADO,本文假设你已有一定的编程能力:
二、了解ADO的结构体系
ADO(ActiveX Data Object, Active 数据对象)是Microsoft提供的一种面向对象,与语言无关的数据访问应用编程接口。据大部分资料介绍,它有如下主要特点:
一:易于使用。
二:可以访问多种数据源。
三:访问速度快,效率高:
四:方便Web应用。
五:技术编程接口丰富。
六:低内存支出和占用磁盘空间较少.
正是看到ADO这么多优点,使我对用ADO开发数据库产生了兴趣.ADO用起来也如前面所说的一样,确实不难。总的来说,ADO模型包括了下列对象:连接(Connection)、命令 (Command)、记录集 (Recordset)、字段 (Field)、参数 (Parameter)、错误 (Error)、属性 (Property)、集合 、事件.它们之间的关系如下图:
(1)我们最常用的主要是Connection、Recordset及Command这三个对象.
(2)对于访问一个数据库来说,我们一般先建立一个ADO连接.
(3)ADO连接可以直接执行SQL语句来操纵数据库,但如果我们要对数据在应用程序和数据源之间进行存取的话,就需要用到记录集对象。一个ADO连接可以有多个ADO连接,但一个ADO连接一般只能对应一个且必须对应一个ADO连接.
(4)另外如果你可进行更高级别的访问的话,还可能要用到命令对象。例如要调用存储过程等。
(5)一个记录集包含有一个字段集,一个字段集则包含有多个字段对象。
(6)同样一个命令对象也包含一个参数集,一个参数集则包含有多个参数对象。
(7)连接对象也有一个错误集并包含有多个错误对象。
这就是ADO各对象之间大致的关系.
三、了解ADO连接
在使用数据库之前,要先建立连接.一般先用CreateInstance方法创建ADO连接对象,然后就可以用Open方法连接到数据库。它的原型是 Open(BSTR ConnectionString, BSTR UserID, BSTR Password, long Options);其中UserID和Password如果在ConnectionString已经指明了用户名和密码,一般就可以不必管它们.Options指的是是以同步方式(adConnectUnspecified)还是以异步方式(adAsyncConnect)进行连接,默认为同步.这个函数的关键这处在于ConnectionString参数,它决定了我们将以什么方式连接到什么数据源,例如:
如果是Access数据库,它的格式则一般为: "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=db.mdb";
如果是SQL Server: "Provider=SQLOLEDB.1;Data Source=sqlservername;Initial Catalog=master;UserID=sa; PWD=password";
具体的内容视你的环境而定.要连接到其他数据库,请参考相关的资料.
例如:
_ConnectionPtr pConnection;
LPCSTR strConnect = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=test.mdb";
//创建 Connection 对象---------------------------
HRESULT hr = pConnection.CreateInstance("ADODB.Connection");
//设置连接时间-----------------------------------
pConnection->put_ConnectionTimeout(long(5));
if (SUCCEEDED(hr))
{
// 连接数据库---------------------------------------------
pConnection->Open(strConnect, "", "", adConnectUnspecified))
}
四、了解ADO记录集
创建了ADO连接,我们就可以通过ADO记录集来访问数据库了.同样,在使用记录集之前要先创建对象.然后调用Open方法打开记录集.它不但可以执行普通的SQL语句,还可以调用存储过程等等:
Open(VARIANT Source, VARIANT ActiveConnection, CursorTypeEnum CursorType,LockTypeEnum LockType, LONG Options).
其中ActiveConnection参数为一个有效的 Connection 对象名,就是我们在上面所说过的ADO连接对象.
CursorType参数指的是记录集光标类型,在官方的资料中是这样说明它的取值类型的:
1.adOpenForwardOnly 仅向前游标,默认值。除了只能在记录中向前滚动外,与静态游标相同。当只需要在记录集中单向移动时,使用它可提高性能。
2.adOpenKeyset 键集游标。尽管从您的记录集不能访问其他用户删除的记录,但除无法查看其他用户添加的记录外,键集游标与动态游标相似。仍然可以看见其他用户更改的数据。
3.adOpenDynamic 动态游标。可以看见其他用户所作的添加、更改和删除。允许在记录集中进行所有类型的移动,但不包括提供者不支持的书签操作。
4.adOpenStatic 静态游标。可以用来查找数据或生成报告的记录集合的静态副本。另外,对其他用户所作的添加、更改或删除不可见。
我们现在可不用管这么多,就用默认的adOpenStatic类型吧.
LockType参数,用于指示在什么时候锁定记录:
AdLockReadOnly (默认值)只读 - 不能改变数据。
AdLockPessimistic 保守式锁定(逐个) - 提供者完成确保成功编辑记录所需的工作,通常通过在编辑时立即锁定数据源的记录。
AdLockOptimistic 开放式锁定(逐个) - 提供者使用开放式锁定,只在调用Update 方法时才锁定记录。
AdLockBatchOptimistic 开放式批更新-用于批更新模式(与立即更新模式相对)。
Options参数指的是操作类型:
adCmdText 指示strSQL为命令文本, 即普通的SQL语句.
adCmdTable 指示ADO生成SQL查询以便从在strSQL中命名的表中返回所有行.
adCmdTableDirect 指示所作的更改在strSQL中命名的表中返回所有行.
adCmdStoredProc 指示strSQL为存储过程.
adCmdUnknown 指示strSQL参数中的命令类型为未知
adCmdFile 指示应从在strSQL中命名的文件中恢复保留(保存的)Recordset.
adAsyncExecute 指示应异步执行strSQL.
adAsyncFetch 指示在提取 Initial Fetch Size 属性中指定的初始数量后,应该异步提取所有剩余的行.如果所需的行尚未提取,主要的线程将被堵塞直到行重新可用.
adAsyncFetchNonBlocking 指示主要线程在提取期间从未堵塞. 如果所请求的行尚未提取,当前行自动移到文件末尾.
唉又是一大串,如果你只是要执行SQL语句,就把它设为adCmdText吧. 这样Source就是你要执行的SQL语句了.
例如:
LPCSTR strSQL = "select * from vckbasetable";
_RecordsetPtr pRecordset;
pRecordset.CreateInstance("ADODB.Recordset");
pRecordset->Open(_bstr_t(strSQL),
_variant_t((IDispatch*)pConnection, true),
adOpenStatic,
AdLockOptimistic ,
adCmdText);
ADO中读取记录集中指定字段的值一般有两种方法:
第一种:
FieldsPtr pFields;
pRecordset->get_Fields(&pFields);
pFields->Item[L"COLUMN_NAME"]->Value;
//或pFields->Item[long(index)]->Value;
//其中index为整型或长整型.GetFields()函数返回的是记录集对象的字段集合对象的指针.
第二种:
pRecordset->get_Collect("COLUMN_NAME");
//或pRecordset->get_Collect(long(index));
它们都将返回一个_variant_t类型的值,推荐使用后一种方法.
例如:
int ncol = rset.GetFieldsCount();
while (!rset.IsEOF())
{
for (int i = 0; i < ncol; i++)
{
rset.GetValueString(value, (long)(i));
}
rset.MoveNext();
}
四、了解ADO字段.
一个记录集通常包含多个字段,通过访问记录,我们可以得到很多有用的信息,如字段名,字段的数据类型,定义的宽度,实际占有的宽度等等:
一般用记录集的get_Fields方法取得字段集合对象:
FieldsPtr pFields;
Recordset->get_Fields(&pFields);
然后可以获得相应的字段对象:
long lIndex = 0;
FieldPtr pf = pFields->GetItem(_variant_t(lIndex));
//或: FieldPtr pf = pFields->GetItem("COLUMN_NAME");
字段对象有很多有用的属性,这些可以参考我的源代码或其他相关资料.如:
get_ActualSize(long *pl) //实际宽度
get_Attributes(long *pl) //属性
get_DefinedSize(long *pl) //定义宽度(以字节为单位,如整型为4,长整型为8...)
get_Name(BSTR *pbstr) //字段名
get_Type(DataTypeEnum *pDataType) //数据类型
get_Value(VARIANT *pvar) // 字段的值
有了以上对ADO的基本了解后,我们将正式开始编写应用程序,请看下文。
使用ADO封装类的数据库程序开发实例(下)
发表评论
-
__declspec(novtable) 的用法
2010-11-27 14:37 1578__declspec(novtable) 的用法 __d ... -
解决URLDownloadToFile缓存问题的两种方法
2010-09-09 15:18 2906解决URLDownloadToFile缓存问题的两种方法 ... -
修改richedit背景
2010-07-19 22:52 1647RichEditCtrl::SetBackgroundCo ... -
使用ADO封装类的数据库程序开发实例(下)
2010-07-12 15:30 1473使用ADO封装类的数据库 ... -
VC防止窗口和控件闪烁的方法
2010-07-09 21:16 20221、将Invalidate()替换为Invalidate ... -
防止窗口闪烁地办法
2010-07-09 21:13 1512防止窗口闪烁地办法 也许我们都碰到过这种情况,当你 ... -
使用ADO _ConnectionPtr
2010-07-06 16:04 5265// GetUser.cpp : Defines the ... -
VC用ADO访问数据库全攻略
2010-07-06 15:29 1799VC用ADO访问数据库全 ... -
深入GetMessage和PeekMessage (引自-MSDN技术组)
2010-06-10 16:59 3726深入GetMessage和PeekMessage (引自 ... -
界面编程总结(1)
2010-06-02 13:32 4011原文地址:http://blog.csdn.net/byx ... -
获取信息的有关Windows API
2010-05-27 10:01 3146获取信息的有关Windows API 1.窗口信息 ... -
VC中如何实现窗口的隐藏
2010-05-13 10:08 7862VC中如何实现窗口的隐藏 用MFC做的Dialog ... -
SetConsoleCtrlHandler 处理控制台消息
2010-05-07 17:32 18142SetConsoleCtrlHandler 处理控制台消 ... -
解决决错误: error C2850: 'PCH header file'
2010-04-27 19:45 1953解决决错误: error C2850: 'PCH hea ... -
VC++ GDI+编程的字体和文本绘制
2010-04-13 13:12 7978字体是文字显示和打印的外观形式,它包括了文字的字样、风格和尺寸 ... -
VC利用GDI+显示透明的PNG图片
2010-04-12 16:59 115381.在你将要使用GDI+的工程中,完成初始化 ... -
GDI+编程基础(一)GDI+ Vs GDI
2010-04-12 15:59 2336下载源代码一、GDI GDI是位于应用程序与不同硬件之间 ... -
VC画图
2010-04-12 15:50 1538BOOL DrawPic(HDC hdc, TCHAR* ... -
对话框的数据交换--MFC深入浅出
2010-04-12 10:43 2457对话框数据交换指以下两种动作,或者是把内存数据写入对应的控 ... -
MFC中获取命令行参数的几种方法
2010-04-08 18:09 2970在MFC程序中,可以用以下几种方法来获取命令行参数。为方便 ...
相关推荐
本文将深入探讨如何使用ADO(ActiveX Data Objects)封装类进行数据库程序的开发,以【标题】"使用ADO封装类的数据库程序开发实例[第二版] 源码"为例,结合【描述】中的关键点,如SQL Server、Access、图片存取和XML...
在数据库程序开发中,ADO(ActiveX ...总之,通过使用ADO封装类进行数据库程序开发,可以降低开发难度,提高代码质量,并使项目更加易于维护。了解和熟练运用这些封装技巧,对于任何IT开发者来说都是一项重要的技能。
"使用ADO封装类的数据库程序开发实例[第二版]"是一个教程或书籍,旨在教导开发者如何高效地利用ADO进行数据库操作,并通过封装类来提高代码的可复用性和可维护性。 首先,我们需要了解ADO的核心概念。ADO包括一系列...
本压缩包文件"《使用ADO封装类的数据库程序开发实例》配套代码.zip"包含了使用ADO进行数据库编程的实践案例,可以帮助开发者深入理解和应用ADO技术。 首先,让我们详细了解什么是ADO。ADO是.NET Framework的一部分...
在.NET编程环境中,ADO(ActiveX Data Objects)是微软提供的一种数据访问技术,它允许开发者与各种数据库进行交互。在实际开发中,为了提高代码的可重用性和可...这就是使用ADO封装类的数据库程序开发实例的基本思路。
总之,ADO封装类的使用可以帮助开发者更加专注于业务逻辑,而不是底层的数据访问细节,从而提升开发效率和代码质量。通过深入理解和熟练运用这些封装类,可以更高效地开发数据库驱动的软件应用。
在本篇文档中,作者分享了一个使用ADO封装类进行数据库程序开发的实例,旨在提供一个更完善的ADO类库,以简化数据库操作。这个类库主要封装了ADO组件的大部分方法,并扩展了一些实用功能。 首先,作者提到的...
本文将深入探讨如何使用ADO封装类进行数据库程序的开发,以提高开发效率和代码的可维护性。 首先,ADO是一个由微软提供的面向对象的API,它允许开发者以语言无关的方式访问各种数据源,包括但不限于关系型数据库。...
总的来说,这个压缩包中的ADO封装类是软件开发中的重要工具,它简化了数据库访问的复杂性,使开发者能够更专注于业务逻辑,而不是数据库操作的细节。使用这样的封装类,可以保持代码的整洁,同时也便于团队协作和...
在这个场景中,"ADO封装类文件 数据库访问"指的是在VC6.0环境下,已经编写完成的用于简化ADO操作的C++类库,包括两个文件:ADOConn.h和ADOConn.cpp。 **ADOConn.h** 文件通常会定义一个名为ADOConn的类,这个类是对...
通过使用这样的封装类,开发人员能够更专注于业务逻辑,而不是数据库操作的细节,从而提高开发效率和代码质量。在实际项目中,根据需求,可能还需要对这个类进行进一步的定制和扩展,以满足特定的应用场景。
在实际项目中,使用这样的C++ ADO封装类可以显著提高开发效率,降低代码复杂性。MYADO这个文件可能是封装类的实现,包括头文件(.h)和源文件(.cpp),通过阅读和理解这些文件,我们可以了解具体如何使用和定制这个...
综上所述,"MFC ADO访问数据库封装类"是面向数据库操作的工具,它通过MFC和ADO的结合,提供了一种高效、统一的方式来处理数据库任务,从而节约开发时间和资源。在实际项目中,这样的封装对于提升开发效率和代码质量...
在VC++开发环境中,MFC(Microsoft Foundation Classes)是一个强大的库,它为Windows应用程序提供了一套C++类,简化了Windows API的使用。ADO(ActiveX Data Objects)是微软提供的一个用于访问数据库的接口,它...
**VC++使用ADO开发ACCESS数据库** 在Windows编程中,Visual C++(VC++)是一种强大的开发工具,尤其在处理数据库应用时。本教程将重点介绍如何利用ActiveX Data Objects(ADO)来连接和操作Microsoft Access数据库...
总的来说,在"ADO类连接数据库集成类"中,开发者通过封装ADO类,实现了VC++应用程序与SQL Server 2008数据库的无缝连接,简化了数据库操作,提高了开发效率。在实际项目中,这样的集成类可以作为基础组件复用,降低...
综上所述,“ADO封装类”是为了简化数据库操作而设计的,它可能包含了连接管理、SQL执行、数据获取和操作等功能,并通过实例代码帮助开发者快速上手。这样的封装使得开发者能更专注于业务逻辑,而不是底层数据访问的...