2022年ADO连接数据库[收 .pdf

上传人:Che****ry 文档编号:27259924 上传时间:2022-07-23 格式:PDF 页数:15 大小:447.74KB
返回 下载 相关 举报
2022年ADO连接数据库[收 .pdf_第1页
第1页 / 共15页
2022年ADO连接数据库[收 .pdf_第2页
第2页 / 共15页
点击查看更多>>
资源描述

《2022年ADO连接数据库[收 .pdf》由会员分享,可在线阅读,更多相关《2022年ADO连接数据库[收 .pdf(15页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、ADO 数据库编程中大型的数据库管理信息系统(MIS) 的开发, 一般很少用VC 来完成(因为开发效率低,不过运行效率很高) ,而是使用VB , C#,Java 等开发效率较高的语言。但小型MIS 系统完全可以用VC 来实现。下面讲解VC 中访问数据库的基本技术。一、四种数据库访问技术ODBC (Open Database Connectivity)开放式数据库连接,是一种用来在数据库管理系统(DBMS )中存取数据的标准应用程序接口。有ODBC API 和 MFC ODBC 两种开发技术。DAO(Data Access Object ) 即数据访问对象集, 是 Microsoft 提供的基于

2、一个数据库对象集合的访问技术。和 ODBC一样,他们都是Windows API 的一部分,可以独立于(DBMS )进行数据库的访问。DAO 跟 ODBC 的区别是:访问机制不同!ODBC 工作依赖于数据库制造商(MS SQL Server , Oracle, Sybase等)提供的驱动程序。使用ODBC API的时候, Windows 的 ODBC 管理程序,把对数据库的访问请求传递给正确的驱动程序,驱动程序再使用SQL 语句指示 DBMS 完成数据库访问工作。DAO 则绕开中间环节,直接使用数据库引擎(Microsoft Jet Database Engine)提供的各种对象进行工作。速度比

3、ODBC 快。OLE DB (Object Link and Embedding Database )非常底层, 基于 COM 接口技术; 功能强大灵活, 但编程非常非常非常麻烦,使用 ADO只需要 3-5 行代码的事情,用OLEDB 却需要将近200-300 行代码才能完成。WinCE 目前不支持 ADO ,但支持 OLEDB 。推荐阅读文章:VC+ 实战 OLEDB 编程 (一 )至(九) http:/ Data Object) 是建立在 OLE DB 之上的高层数据库访问技术,是对OLEDB 的封装,微软为我们提供了丰富的COM 组件(包括ActiveX )来访问各种关系型/非关系型数据

4、库。特点是简单、易用,这也是为什么大多数数据库应用软件开发者选择 ADO 的重要原因。下面重点讲解使用ADO 连接数据库的方法。二、 ADO 对象ADO 是一个面向对象的COM 组件库,用ADO 访问数据库,其实就是利用ADO 对象来操作数据库中的数据,所以我们首先要撑握ADO 的对象。 ADO 对象有:连接对象( connection) :连接对象用于与数据库建立连接,执行查询及进行事务处理。在连接时必须指定使用何种数据库的OLEDB 供应者。命令对象( Command) :可以执行数据库操作命令(如查询,修改,增加和删除)。用命令对象执行一个查询字名师资料总结 - - -精品资料欢迎下载

5、- - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 15 页 - - - - - - - - - 串,可以返回一个记录集合。记录集对象( Recordset) :用于表示查询返回的结果集,它可以在结果集中增加,删除,修改和移动记录。当建立一个记录集时, 一个游标就自动建立了,查询所产生的记录就放在本地的游标中,游标有四种类型:仅能向前移动的游标,静态游标,键集游标和动态游标。记录集对象是对数据库进行查询和修改的主要对象。字段对象( Fields 字段集合对象,Field 字段对象):字段对象用于表示数据库或记录集中的

6、信息,包括列值等信息。 一个记录集或一个数据库中的表包括了多行记录,若将其当做二维网格,字段将是网格中的列,每个字段分别有名称,数据类型和值等属性,字段中包括了来自数据库中的真实数据。要修改其中的数据可在记录集中修改Filed 字段对象,也可以通过在记录集中访问Fields 字段集合对象,再定位要修改的 Filed 字段对象。对记录集的修改将最终被传送给数据库。参数对象( Parameter) :是和 命令对象 联合使用的一个对象。当命令对象执行的查询是一个有参数的查询时,就要用参数对象来为命令对象提供参数信息和数据。下面我们先看一个简单的通过ADO 控件 访问数据库的例子,然后再学习如何通过

7、上述ADO 对象 访问数据库。三、通过 ADO 控件 访问数据库示例下面以 Microsoft Office Access 数据库 为例, 讲解通过 ADO 控件访问数据库的方法。这种方法基本不用编写代码,就可以完成对数据库的访问,非常方便。1、在 Access 中建立数据库student.mdb,并添加表stu_info ,如下图:这里的字段名使用了中文,只是为了教学方便,建议在实际工作中使用英文字段名。2、建立一个MFC 对话框工程AdoCtrl 。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - -

8、 - - - 第 2 页,共 15 页 - - - - - - - - - 3、在对话框界面编辑器中增加如下的2 个 ADO 控件:ADO Data 控件,用于建立数据库连接。ADO DataGrid 控件,用于表示一个结果记录集。在对话框编辑器中-右键菜单 -选择 Insert ActiveX Control- 在出现的对话框中选择Microsoft ADO Data Control,Version 6.0-点 OK,这样 ADO Data 控件 IDC_ADODC1就加入到对话框中了;同样方法, 选择 Microsoft DataGrid Control ,Version 6.0 加入到对

9、话框中。这样 DataGrid控件 IDC_DATAGRID1就加入到对话框中了。4、设置对话框中连接控件的属性设置 ADO Data 控件的属性:在属性对话框中选择Control 页面,选择Use Connection String 选项,点 Build 按钮, 在出现的对话框中选择Microsoft Jet 4.0 OLEDB Provider提供者。点下一步 ,选择刚建立的Access 数据库文件名称student.mdb。点测试连接 ,应能连接数据库通过。 再次打开ADO Data 控件的属性设置,选择 RecordeSource 页面,在 Command Type中选择 2-adCm

10、dTable,在 Table Or StoredProcedure Name 中选择 stu_info 表。设置 DataGrid 控件的属性:在属性对话框中选择Control 页面,选中Allow AddNew和Allow Delete 复选框,再选择All页面,设置DataSource 参数为连接控件的ID即IDC_ADODC1 。5、运行该程序将可以在对话框中连接数据库,并取出表中的数据显示在Grid 控件中。如下图:名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共

11、15 页 - - - - - - - - - 四、预备知识:数据类型_bstr_t 和 _variant_t VC 可以连接各种数据库,而不同数据库对数据类型的定义各有不同,为了在VC 中对数据库中的各种类型进行统一的表达,我们需要用到如下知识:4.1 数据类型BSTR BSTR 是 BASIC 中字符串 类型数据的表示方式, 是一个指向UNICODE 字符串的指针。有关 BSTR 的处理函数,参见下表。API 函数说明SysAllocString ()申请一个BSTR 指针,并初始化为一个字符串SysFreeString()释放 BSTR 内存SysAllocStringLen()申请一个指

12、定字符长度的BSTR 指针,并初始化为一个字符串SysAllocStringByteLen()申请一个指定字节长度的BSTR 指针,并初始化为一个字符串SysReAllocStringLen()重新申请BSTR 指针Cstring类说明AllocSysString()从 CString 得到 BSTRSetSysString()重新申请BSTR 指针,并复制到CString 中CComBSTR是 BSTR 的封装类。在atlbase.h 中定义Append ()、AppendBSTR() 、 AppendBytes() 、ArrayToBSTR()、BSTRToArray()、AssignBS

13、TR() 、 Attach() 、Detach()、Copy()、CopyTo() 、Empty() 、Length() 、ByteLength() 、ReadFromStream()、WriteToStream()、LoadString() 、ToLower() 、ToUpper() 运算符重载: !,!=,=,&,+=,+,=,BSTR太 多 了 。 详 细 资 料 , 查 看MSDN 吧 。CComBSTR 类简化了对BSTR 类型的使用4.2 数据类型VARIANT C+、BASIC 、Java、Pascal、Script.计算机语言多种多样,而它们各自又都有自己的数据类型, COM

14、产生目的,其中之一就是要跨语言。而VARIANT 数据类型就具有跨语言的特性,同时它可以表示(存储)任意类型 的数据。另外,使用CComVariant 类可简化 VARIANT ,如: VARIANT v = CComVariant(任意C+类型 ); 4.3 用_bstr_t 类封装数据类型BSTR _bstr_t 是一个对BSTR 的完整 封装类 ,实际上它隐藏了底层的BSTR。它提供各种构造函数和操作符来访问底层的C 语言风格的字符串。然而,_bstr_t 却没有访问BSTR 本身的操作符, 所以一个 _bstr_t 类型的字符串不能被作为输出参数传给一个COM 方法。 如果你需要一个

15、BSTR* 参数,使用类CComBSTR 是比较容易的方式。一个 _bstr_t 字符串能够传给一个接收参数类型为BSTR 的函数,只是因为下列3 个条件同时满足。首先,_bstr_t 有一个向wchar_t* 转换的转换函数;其次,对编译器而言,因为BSTR 的定义, wchar_t* 和 BSTR 有同样的含义;第三,_bstr_t 内部含有的wchar_t* 指向一名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 15 页 - - - - - - - - - 片按 B

16、STR 的形式存储数据的内存。所以,即使没有文档说明,_bstr_t 可以转换成BSTR,这种转换仍然可以正常进行。注意 _bstr_t 也提供 char*和 wchar_t* 之间的转换操作符。但不提倡使用,因为即使它们是非常量字符串指针,你也一定不能使用这些指针去修改它们指向的缓冲区的内容,因为那将破坏内部的BSTR 结构。一个用在自动化接口中的变量类型是VARIANT 。它被用来在无类型(typeless)语言,如 Jscript 和 VBScript , 来传递数据。 一个 VARIANT可能含有很多不同类型的数据,例如 long和 IDispatch* 。当一个VARIANT包含一个

17、字符串,字符串被存成一个BSTR。4.4 用_variant_t 类封装数据类型VARIANT _variant_t 是一个对VARIANT的完整 封装类 ,它提供很多构造函数和转换函数来操作一个 VARIANT可能包含的大量的数据类型。这里,介绍与字符串有关的操作。没有从一个 _variant_t变量到一个MBCS 字符串的直接转换。你需要创建一个临时的_bstr_t 变量,使用提供 Unicode 到 MBCS 转换的另一个字符串类或者使用一个ATL 转换宏。不像 _bstr_t,一个 _variant_t 变量可以被直接作为参数传递给一个COM 方法。 _variant_t继承自 VAR

18、IANT类型,所以传递一个_variant_t 来代替 VARIANT变量是C+语言所允许的。五、通过ADO 对象 编程访问数据库通过 ADO 对象 进行数据库开发的基本流程如下:初始化 COM 库 CoInitialize(NULL)引入 ADO 库定义文件msado15.dll用 Connection 对象连接数据库利用建立好的连接,通过Connection、 Command 对象执行SQL 命令,或利用Recordset 对象取得结果记录集进行查询、处理。使用完毕后关闭连接释放对象。1、COM 库的初始化和释放我们可以使用CoInitialize(NULL)或者 AfxOleInit()

19、 来初始化COM 库,这项工作通常在CWinApp:InitInstance() 的重载函数中完成::CoInitialize(NULL); /*if(!AfxOleInit() AfxMessageBox(COM Error!); return FALSE; */ 退出程序前,可以在CWinApp:ExitInstance() 中使用 CoUninitialize ()释放 COM 。2、用 #import 指令引入ADO 类型库在 stdafx.h 中加入如下语句:#prgama warning (disable : 4146) #include icrsint.h #import C:P

20、rogram FilesCommon FilesSystemadomsado15.dll no_namespace rename(EOF,EndOfFile) rename(BOF,FirstOfFile) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 15 页 - - - - - - - - - 这个 #import 语句的作用同我们熟悉的#include 类似,编译时系统会为我们自动生成msado15.tlh 和 msado15.tli,这两个文件分别相当于.h 和

21、.cpp 文件,是ADO COM 组件相关的文件。头文件icrsint.h 文件包含了VC+ 对 COM 扩展的一些预处理指令、宏等的定义。注意 1:你的环境中msado15.dll 不一定在这个目录下,请按实际情况修改;注意 2:如果去掉 #prgama warning (disable : 4146) ,则在编译的时候可能会出现如下警告,对此微软在MSDN 中作了说明,并建议我们不要理会这个警告:msado15.tlh(405) : warning C4146: unary minus operator applied to unsigned type, result still unsi

22、gned 3、创建 Connection 对象并连接数据库首先添加一个指向Connection 对象的指针:_ConnectionPtr m_pConnection; 下面的代码演示了如何创建Connection 对象实例及如何连接数据库并进行异常捕捉。BOOL CADOTest1Dlg:OnInitDialog() CDialog:OnInitDialog(); HRESULT hr; CString sConnectStr = Provider=Microsoft.Jet.OLEDB.4.0;Data Source=db1.mdb; try hr = m_pConnection.Creat

23、eInstance(ADODB.Connection);/创建 Connection 对象if (SUCCEEDED(hr) hr = m_pConnection-Open(sConnectStr, , , adModeUnknown);/连数据库 catch(_com_error e) /捕捉异常 CString sErr; sErr.Format(连接数据库失败!rn 错误信息 :%s, e.ErrorMessage(); AfxMessageBox(sErr); /显示错误信息 这里,我们是通过Connection 对象的 Open 方法来连接数据库的,该方法的原型如下:HRESULT

24、Connection15:Open ( _bstr_t ConnectionString, /连接数据库的字符串_bstr_t UserID, /数据库用户名_bstr_t Password, /数据库密码long Options /连接选项);其中 ConnectionString 为连接字串, UserID 是用户名,Password 是登陆密码,Options是连接选项, 用于指定Connection 对象对数据的更新许可权,Options 可以是如下几个常量: adModeUnknown :缺省。当前的许可权未设置。adModeRead:只读adModeWrite :只写名师资料总结

25、- - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 15 页 - - - - - - - - - adModeReadWrite:可以读写adModeShareDenyRead:阻止其它Connection 对象以读权限打开连接adModeShareDenyWrite:阻止其它Connection 对象以写权限打开连接adModeShareExclusive:阻止其它Connection 对象打开连接adModeShareDenyNone:允许其它程序或对象以任何权限建立连接。我们给出一些

26、常用数据库的连接方式供大家参考:通过 JET 数据库引擎对Access 2000 数据库的连接m_pConnection-Open(Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:test.mdb, ,adModeUnknown); 通过 DSN 数据源对任何支持ODBC 的数据库进行连接:m_pConnection-Open(Data Source=adotest;UID=sa;PWD=;, ,adModeUnknown); 不通过 DSN 对 SQL SERVER 数据库进行连接:m_pConnection-Open(driver=SQLSer

27、ver;Server=127.0.0.1;DATABASE=vckbase; UID=sa;PWD=139 , , ,adModeUnknown); 其中 Server 是 SQL 服务器的名称或者IP 地址, DATABASE 是库的名称。Connection 对象除 Open 方法外还有许多方法,我们先介绍Connection 对象中两个有用的属性: ConnectionTimeOut 与 State ConnectionTimeOut ,用来设置连接的超时时间,需要在 Open 之前调用,例如:m_pConnection-ConnectionTimeout = 5; /设置超时时间为5

28、秒m_pConnection-Open(Data Source=adotest; , , ,adModeUnknown); State属性指明当前Connection 对象的状态, 0 表示关闭, 1 表示已经打开,我们可以通过读取这个属性来作相应的处理,例如:if (m_pConnection-State) m_pConnection-Close(); /如果已经打开了连接则关闭它4、执行 SQL 命令并取得结果记录集为了取得结果记录集,我们定义一个指向Recordset 对象的指针,并为其创建Recordset对象的实例:_RecordsetPtr m_pRecordset; m_pRec

29、ordset.CreateInstance(ADODB.Recordset); SQL 命令的执行可以采用多种形式,下面我们一一进行阐述。(1)、利用 Connection 对象的 Execute 方法执行SQL 命令,原型如下:_RecordsetPtr Connection15:Execute ( _bstr_t CommandText, VARIANT *RecordsAffected, long Options ); 其中 CommandText 通常是 SQL 命令字符串。 RecordsAffected 是操作完成后所影响的行数,Options 表示 CommandText 中内容

30、的类型,Options 可以取如下值之一:名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 15 页 - - - - - - - - - adCmdText:表明 CommandText 是 SQL 文本命令adCmdTable:表明 CommandText 是一个表名adCmdProc:表明 CommandText 是一个存储过程adCmdUnknown :未知Execute 执行完后返回一个指向记录集的指针,下面我们给出示例代码并作说明:/执行 SQL 命令: CREA

31、TE TABLE创建表格users,users 包含四个字段 : /整形 ID,字符串username,整形 age,日期型birthday _variant_t RecordsAffected; m_pConnection-Execute(CREATE TABLE users(ID INTEGER, username TEXT, age INTEGER, birthday DATETIME),&RecordsAffected ,adCmdText); /往表格里面添加记录m_pConnection-Execute(INSERT INTO users(ID, username,age,birt

32、hday) VALUES (1 , Washington,25,1970/1/1) ,&RecordsAffected ,adCmdText); /将所有记录的age字段的值加一m_pConnection-Execute(UPDA TE users SET age = age+1,&RecordsAffected ,adCmdText); /执行 SQL 统计命令得到包含记录条数的记录集m_pRecordset = m_pConnection-Execute(SELECT COUNT(*) FROM users, &RecordsAffected, adCmdText); _variant_t

33、 vIndex = (long)0; _variant_t vCount = _pRecordset-GetCollect(vIndex);/取得第一个字段的值放入vCount 变量m_pRecordset-Close(); /关闭记录集CString message; message.Format(共有 %d 条记录 ,vCount.lVal); AfxMessageBox(message); /显示当前记录条数(2)、利用 Command 对象来执行SQL 命令_CommandPtr m_pCommand; m_pCommand.CreateInstance(ADODB.Command);

34、 _variant_t vNULL; vNULL.vt = VT_ERROR; vNULL.scode = DISP_E_PARAMNOTFOUND; /定义为无参数m_pCommand-ActiveConnection = m_pConnection; /非常关键,将建立的连接赋值给它m_pCommand-CommandText = SELECT * FROM users; /SQL 命令字符串m_pRecordset = m_pCommand-Execute(&vNULL,&vNULL ,adCmdText); /执行命令,取得记录集在这段代码中我们只是用Command 对象来执行了SEL

35、ECT 查询语句, Command 对象在对 存储过程 的调用中能真正体现它的作用。(3)、直接用Recordset对象进行查询取得记录集名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 15 页 - - - - - - - - - m_pRecordset-Open(SELECT * FROM users,_variant_t(IDispatch *)m_pConnection,true),adOpenStatic,adLockOptimistic , adCmdText

36、); Open 方法的原型如下:HRESULT Recordset15:Open ( const _variant_t &Source, const _variant_t &ActiveConnection, enum CursorTypeEnum CursorType, enum LockTypeEnum LockType, long Options ); 其中:Source:是数据查询字符串ActiveConnection :是已经建立好的连接(我们需要用Connection 对象指针来构造一个_variant_t 对象 ) CursorType:光标类型,它可以是以下值之一,请看这个枚举

37、结构: enum CursorTypeEnum adOpenUnspecified = -1 ,/不作特别指定adOpenForwardOnly = 0 ,/前滚静态光标。这种光标只能向前浏览记录集,/比如用 MoveNext 向前滚动,这种方式可以提高/浏览速度。但诸如BookMark ,RecordCount,/AbsolutePosition , AbsolutePage 都不能使用adOpenKeyset = 1,/采用这种光标的记录集看不到其它用户的新增、/删除操作,但对于更新原有记录的操作对你是可/见的。adOpenDynamic = 2 ,/动态光标。所有数据库的操作都会立即在各

38、用户/记录集上反应出来。adOpenStatic = 3 /静态光标。它为你的记录集产生一个静态备份,/但其它用户的新增、删除、更新操作对你的记录/集来说是不可见的。; LockType:锁定类型,它可以是以下值之一,请看如下枚举结构:enum LockTypeEnum adLockUnspecified = -1 ,/未指定adLockReadOnly = 1 ,/只读记录集adLockPessimistic = 2 ,/悲观锁定方式。数据在更新时锁定其它所有动/作,这是最安全的锁定机制adLockOptimistc = 3 ,/乐观锁定方式。 只有在你调用Update 方法时才锁/定记录。

39、 在此之前仍然可以做数据的更新、插入、/删除等动作adLockBatchOptimistic = 4 ,/乐观分批更新。编辑时记录不会锁定,更改、插名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 9 页,共 15 页 - - - - - - - - - /入及删除是在批处理模式下完成。; Options:请参考本文中对Connection 对象的 Execute 方法的介绍5、记录集的遍历、更新根据我们刚才通过执行SQL 命令建立好的users 表,它包含四个字段:ID ,usern

40、ame,age,birthday 以下的代码实现:打开记录集,遍历所有记录,删除第一条记录,添加三条记录,移动光标到第二条记录,更改其年龄,保存到数据库。_variant_t vUsername, vBirthday ,vID ,vAge; _RecordsetPtr m_pRecordset; m_pRecordset.CreateInstance(ADODB.Recordset); m_pRecordset-Open(SELECT * FROM users,_variant_t(IDispatch*)m_pConnection,true),adOpenStatic,adLockOptimi

41、stic ,adCmdText); while (!m_pRecordset-adoEOF) /这里为什么是adoEOF 而不是 EOF 呢 ?还记得 rename(EOF ,adoEOF) 这一句吗 ? vID = m_pRecordset-GetCollect(_variant_t(long)0); /取得第 1 列的值,从0 开始计数,你也可以直接给出列的名称,如下一行vUsername = m_pRecordset-GetCollect(username); /取得 username 字段的值vAge = m_pRecordset-GetCollect(age); vBirthday

42、= m_pRecordset-GetCollect(birthday); /在 DEBUG 方式下的OUTPUT 窗口输出记录集中的记录if (vID.vt != VT_NULL & vUsername.vt != VT_NULL & vOld.vt != VT_NULL & vBirthday.vt != VT_NULL) TRACE(id:%d, 姓名 :%s,年龄 :%d,生日 :%sr, vID.lVal,(LPCTSTR)(_bstr_t)vUsername, vOld.lVal ,(LPCTSTR)(_bstr_t)vBirthday) ; m_pRecordset-MoveNex

43、t(); /移到下一条记录 m_pRecordset-MoveFirst(); /移到首条记录m_pRecordset-Delete(adAffectCurrent); /删除当前记录/添加三条新记录并赋值for(int i=0;iAddNew(); /添加新记录m_pRecordset-PutCollect(ID, _variant_t(long)(i+10); m_pRecordset-PutCollect(username, _variant_t( 奥巴马 ); m_pRecordset-PutCollect(age, _variant_t(long)71); m_pRecordset-

44、PutCollect(birthday, _variant_t(1930-3-15); /从第一条记录往下移动一条记录,即移动到第二条记录处m_pRecordset-Move(1, _variant_t(long)adBookmarkFirst); m_pRecordset-PutCollect(_variant_t(age), _variant_t(long)45); /修改其年龄m_pRecordset-Update(); /保存到数据库中6、关闭记录集与连接记录集或连接都可以用Close 方法来关闭m_pRecordset-Close(); /关闭记录集m_pConnection-Clo

45、se(); /关闭连接至此,我们已经熟悉了ADO 操作数据库的大致流程六、使用 ADO 对象进行数据库开发实例1、 创建一个 MFC 对话框工程AdoObject ,并设计如下对话框界面。2、关联变量:名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 11 页,共 15 页 - - - - - - - - - 3、在 stdafx.h 引入 ADO 库定义文件,包含头文件。#prgama warning (disable : 4146) #include icrsint.h #impo

46、rt C:Program FilesCommon FilesSystemadomsado15.dll no_namespace rename(EOF,EndOfFile) rename(BOF,FirstOfFile) 4、在 AdoObject.cpp 中,初始化COM 库BOOL AdoObjectApp:InitInstance() :CoInitialize(NULL); /*if(!AfxOleInit() AfxMessageBox(COM Error!); return FALSE; */ AfxEnableControlContainer(); /. 5、为对话框类添加成员:_

47、ConnectionPtr m_pConnection; /数据库连接指针(对象)_RecordsetPtr m_pRecordSet; /记录集指针(对象)_variant_t vFieldValue; /字段对应的记录值CString strFieldValue; /字段对应的记录值void DisplayFields(); /显示记录到绑定的对话框控件上名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 12 页,共 15 页 - - - - - - - - - 6、在对话框类的O

48、nInitDialog中添加如下代码,实现数据库连接:/ 数据库连接m_pConnection.CreateInstance(_uuidof(Connection); m_pConnection-Open(Provider=Microsoft.Jet.OLEDB.4.0;Data Source = student.mdb;, ,-1); / 打开数据库记录m_pRecordSet.CreateInstance(_uuidof(Recordset); m_pRecordSet-Open(select * from stu_info,m_pConnection.GetInterfacePtr()

49、,adOpenDynamic , adLockOptimistic , adCmdText); / 移动游标到打开的第一条数据库记录m_pRecordSet-MoveFirst(); DisplayFields(); /显示表中的记录信息7、添加对话框成员函数DisplayFields :负责显示对应表中的记录信息。void CAdoObjectDlg:DisplayFields() vFieldValue= m_pRecordSet-GetCollect( 学号 ); strFieldValue = (char*)_bstr_t(vFieldValue); m_sNo = strFieldV

50、alue; vFieldValue.Clear(); vFieldValue= m_pRecordSet-GetCollect( 姓名 ); strFieldValue=(char*)_bstr_t(vFieldValue); m_sName = strFieldValue; vFieldValue.Clear(); vFieldValue= m_pRecordSet-GetCollect( 出生日期 ); strFieldValue=(char*)_bstr_t(vFieldValue); m_sBirthday = strFieldValue; vFieldValue.Clear(); v

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 高考资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁