2022年ADO连接数据库[收 .pdf
《2022年ADO连接数据库[收 .pdf》由会员分享,可在线阅读,更多相关《2022年ADO连接数据库[收 .pdf(15页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
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:允许其它程序或对象以任何权限建立连接。我们给出一些
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2022年ADO连接数据库收 2022 ADO 连接 数据库
限制150内