ADODC控件介绍及使用.docx
《ADODC控件介绍及使用.docx》由会员分享,可在线阅读,更多相关《ADODC控件介绍及使用.docx(20页珍藏版)》请在三一办公上搜索。
1、ADODC控件介绍及使用ADODC控件介绍 ADO (ActiveX Data Objects,ActiveX数据对象)是Microsoft提出的应用程序接口用以实现访问关系或非关系数据库中的数据。例如,如果您希望编写应用程序从DB2或Oracle数据库中向网页提供数据,可以将ADO程序包括在作为活动服务器页的HTML文件中。当用户从网站请求网页时,返回的网页也包括了数据中的相应数据,这些是由于使用了ADO代码的结果。 象Microsoft的其它系统接口一样,ADO是面向对象的。它是Microsoft全局数据访问的一部分,Microsoft认为与其自己创建一个数据,不如利用UDA访问已有的数据
2、库。为达到这一目的,Microsoft和其它数据库公司在它们的数据库和Microsoft的OLE数据库之间提供了一个“桥”程序,OLE数据库已经在使用ADO技术。ADO的一个特征支持网页中的数据相关的ActiveX控件和有效的客户端缓冲。作为ActiveX的一部分,ADO也是Microsoft的组件对象模式的一部分,它的面向组件的框架用以将程序组装在一起。 ADO从原来的Microsoft数据接口远程数据对象而来。RDO与ODBC一起工作访问关系数据库,但不能访问如ISAM和VSAM的非关系数据库。 ADO 是对当前微软所支持的数据库进行操作的最有效和最简单直接的方法,它是一种功能强大的数据访
3、问编程模式,从而使得大部分数据源可编程的属性得以直接扩展到你的Active Server 页面上。可以使用ADO 去编写紧凑简明的脚本以便连接到 Open Database Connectivity (ODBC) 兼容的数据库和 OLE DB 兼容的数据源,这样 ASP 程序员就可以访问任何与 ODBC 兼容的数据库,包括 MS SQL SERVER、Access、 Oracle 等等。 比如,如果网站开发人员需要让用户通过访问网页来获得存在于IBM DB2或者Oracle数据库中的数据,那么就可以在ASP页面中包含ADO程序,用来连接数据库。于是,当用户在网站上浏览网页时,返回的网页将会包含
4、从数据库中获取的数据。而这些数据都是由ADO代码做到的。 ADO是一种面向对象的编程接口,微软介绍说,与其同IBM和Oracle提倡的那样,创建一个统一数据库,不如提供一个能够访问不同数据库的统一接口,这样会更加实用一些。为实现这一目标,微软在数据库和微软的OLE DB中提供了一种“桥”程序,这种程序能够提供对数据库的连接。 开发人员在使用ADO时,其实就是在使用OLE DB,不过OLE DB更加接近底层。ADO的一项属性?远程数据服务,支持“数据仓库”ActiveX 组件以及高效的客户端缓存。作为ActiveX的一部分,ADO也是COM组件的一部分。ADO是由早期的微软数据接口?远程数据对象
5、RDO演化而来的。RDO同微软的ODBC一同连接关系数据库,不过不能连接非关系数据库。 ADO向我们提供了一个熟悉的,高层的对OLE DB的Automation封装接口。对那些熟悉RDO的程序员来说,你可以把OLE DB比作是ODBC驱动程序。如同RDO对象是ODBC驱动程序接口一样,ADO对象是OLE DB的接口;如同不同的数据库系统需要它们自己的ODBC驱动程序一样,不同的数据源要求它们自己的OLE DB提供者。目前,虽然OLE DB提供者比较少,但微软正积极推广该技术,并打算用OLE DB取代ODBC。 ADO向VB程序员提供了很多好处。包括易于使用,熟悉的界面,高速度以及较低的内存占用
6、。同传统的数据对象层次不同,ADO可以独立创建。因此你可以只创建一个Connection对象,但是可以有多个,独立的Recordset对象来使用它。ADO针对客户服务器以及WEB应用程序作了优化。 如何使用ADO 一旦安装了ADO,在VB的工程-引用对话框中你就可以看到象下图所示的东西了: 选择 ActiveX Data Objects 1.5 Library (ADODB).在其下的 ADO Recordset 1.5 Library是一个客户端的版本(ADOR),它定义了有聚的数据访问对象。ADOR 对于客户端的数据访问来说是足够的了,因为你不需要Connection对象来建立与远程数据源
7、的联系。 如果你想要访问更多的外部数据源,你需要安装这些外部数据源自己的OLE DB Provider,就象你需要为新的数据库系统安装新的ODBC驱动程序一样。如果该外部数据源没有自己的OLE DB Provider,你就得使用OLE DB SDK来自己为这个外部数据源创建一个OLE DB Provider了。这已不是本文讨论的范围了。 示例 下面的示例代码以Northwinds数据库作为远程数据源,然后用ADO来访问它。首先在控制面板中打开“32位数据源”,单击“添加”按钮。在弹出的对话框中选择 Microsoft Access Driver (*.mdb) 作为数据源驱动程序。 然后按下图
8、所示,在对话框中填写下面的内容 选择数据库Northwinds所在路径。单击完成,退出ODBC设备管理器。 启动一个新的VB工程,在窗体的Load事件中输入下面的代码: Private Sub Form_Load Dim cn As ADODB.Connection Set cn = New ADODB.Connection Set Connection properties cn.ConnectionString = DSN=RDC Nwind;UID=;PWD=; cn.ConnectionTimeout = 30 cn.Open If cn.State = adStateOpen The
9、n _ MsgBox Connection to NorthWind Successful! cn.Close End Sub 按F5运行程序,看看,一个消息框弹出来告诉你连接成功了。请注意,这里我特别注明了是ADODB.Connection,而不是ADOR.Connection,这样做是为了将二者区分开。连接字符串看上去同RDO的连接字符串差不多。事实上,二者确实差不多。 如果我们要访问一个SQL server数据库,你的Connection代码看上去应象下面所示: 设置连接属性cn.Provider = MSDASQL cn.ConnectionString = driver=SQL Se
10、rver; & server=prod1;uid=bg;pwd=;database=main cn.Open Provider属性指向SQL Server的OLE DB Provider. 回到我们的示例程序,让我们创建一个Recordset对象来访问“Orders”表,并从该表的ShipCountry字段中产生头十个不重复的国家名。修改窗体Load事件中的代码,让它看上去象下面这样。 Private Sub Form_Load Dim cn As ADODB.Connection Dim rs As ADODB.Recordset Dim sSQL As String Dim sOut As
11、 String Dim Count As Integer Set cn = New ADODB.Connection Set rs = New ADODB.Recordset Set properties of the Connection. cn.ConnectionString = DSN=RDC Nwind;UID=;PWD=; cn.ConnectionTimeout = 30 cn.Open If cn.State = adStateOpen Then _ MsgBox Connection to NorthWind Successful! sSQL = SELECT DISTINC
12、T Orders.ShipCountry FROM Orders Set rs = cn.Execute(sSQL) Enumerate the recordset sOut = For Count = 1 To 10 sOut = sOut & rs(ShipCountry) & vbCrLf rs.MoveNext Next Count MsgBox sOut, vbExclamation, ADO Results cn.Close End Sub 运行程序后,你会看到如下图所示的消息框。 不幸的是,目前这个Recrodset对象是只读的和forward cursor。如果你想要获取更多的
13、功能,你需要创建一个独立的Recordset对象,该对象拥有自己的Connection属性,就象下面的代码所示: Private Sub Form_Load Dim rs As ADODB.Recordset Dim sSQL As String Dim sOut As String Dim Count As Integer Set rs = New ADODB.Recordset sSQL = SELECT DISTINCT Orders.ShipCountry FROM Orders rs.Open sSQL, DSN=RDC Nwind;UID=;PWD=;, adOpenDynamic
14、 Report Recordset Connection information MsgBox rs.ActiveConnection, , Connection Info Enumerate the recordset sOut = For Count = 1 To 10 sOut = sOut & rs(ShipCountry) & vbCrLf rs.MoveNext Next Count MsgBox sOut, vbExclamation, ADO Results rs.Close End Sub 上面代码返回的结果同前例一样,但是本代码中的Recordset是独立的。这一点是DAO
15、和RDO做不到的。Recordset对象的Open方法打开一个代表从SQL查询返回的记录的游标。虽然你可以用Connection对象同远程数据源建立连接,但请记住,在这种情况下,Connection对象和Recordset对象是平行的关系。 总结 本文仅向你介绍了ADO强大的功能的冰山一角。微软承诺,在将来ADO将会取代DAO和RDO。所以现在你应该考虑如何将你的数据访问代码投向ADO的怀抱。这种转变不会很痛苦,因为ADO的语法同现有的语法差不多。也许微软或第三方会在将来开发出转换向导来简化这一转换过程。从现在起,你就应开发纯ADO代码的程序。你也可以继续使用DAO或RDO代码来开发你的程序,
16、但落伍的感觉总是不好的。 八、ADO编程应用 ADO是基于组件的数据库编程接口,它是一个和编程语言无关的COM组件系统。本文主要介绍用ADO编程所需要注意的技巧和在VC下进行ADO编程的模式,并对CExtensions进行了简单的讨论,希望对ADO开发人员有一定的帮助作用。因为ADO是一个和编程语言无关的COM组件系统,所以这里讨论的要点适用于所有的编程语言和编程环境,比如:VB、VBScript、VC、Java等等。 编程技巧 1显式定义对象类型 实际上,这条准则不仅适用于ADO编程,也适用于其他的与COM对象相关的编程。因为如果一开始就定义变量类型,则编译器在编译的时候就可以知道变量的类型
17、,此时编译器实际上是采用vtable偏移的方式来得到具体的COM对象包含的方法的地址;但如果一开始不指定变量类型的话,比如简单地采用如下的语句: DIM myCon as Object 或者是: DIM myCon 这样,编译器在编译的时候就不能得到变量的类型,而只能在运行的时候动态地得到方法的信息,如此为了得到方法的地址和相关的变量情况就需要在内部进行两次调用,无疑会降低程序的运行速度。 2绑定列到具体的字段对象 在程序开始时就建立对字段对象的引用,可以避免在每次得到记录后,再在Recordset:Fields中进行查找而增加系统的开销。 例如,可以采用如下所示的代码: Private Su
18、b TblBrowse_Click Dim fld1 As ADODB.Field Dim fld2 As ADODB.Field Dim rs As ADODB.Recordset set rs=g_cn.execute(.) g_cn为全局对象adodb.connection Set fld1 = rs.Fields(“id”) 数据表的字段 Set fld2 = rs.Fields(“name”) 数据表的字段 If rs.BOF = False Then While rs.BOF = False Debug.Print fld1.Value Debug.Print fld2.Value
19、 rs.MoveNext Wend End If rs.Close End Sub 3用SQL语句和存储过程进行数据更新 尽管采用Recordset对象来更新数据是非常方便的,但是它的开销也大,通过数据源对象返回的查询集不仅包含了数据,而且也包含了元数据,在有些时候元数据可能比数据本身还要大,所以最好采用SQL语句来更新数据。还有要使用存储过程而不是单一的SQL语句来获取信息。因为存储过程是在服务器端执行的,只把结果返回到客户端,这样一方面可以降低网络进行数据交互的开销,另一方面使系统更加容易维护,并且能保持数据的一致性。 4.使用集合操作单条的SELECT语句 在使用游标时,最好使用集合的方
20、法对单条的SELECT语句进行操作。Recordset:get_Collect方法和Recordset:put_Collect方法是Recordset 对象的快捷方式,可以快速地得到一个字段的值而不需要获得关于一个字段的引用。例如,可以采用如下代码: Sub Collect Dim rs As New Recordset rs.ActiveConnection = “.” rs.Source=“一条SQL查询语句” rs.Open Debug.Print rs.Collect(0),rs.Collect(1),rs.Collect(2) Debug.Print rs!au_id, rs!au_
21、fname, rs!au_lname End Sub 5只查询所需要的数据 尽管很多开发人员都习惯采用“SELECT FROM TBL”的模式进行查询,但是为了提高系统的效率,如果只需要其中某几个字段的值,最好把这几个字段直接写出来,同时需要限定返回记录集的范围。 6正确选择游标的位置、类型和锁方式 如果只需要按顺序读取记录并且不需要滚动和更新记录,最好使用服务器端游标、仅向前游标(adOpenForwardOnly)和读加锁(adLockReadOnly),这样可以获得最好的性能。如果需要滚动记录,采用客户端游标会比采用服务器端游标所得到的性能要好,因为ADO系统默认是采用服务器端游标类型。
22、当然如果数据集合相当大,采用服务器端游标的性能会好一些。同时需要注意:如果采用客户端游标,最好只采用读加锁的锁类型,因为如果需要更新数据,客户端游标引擎需要得到额外的信息,而获取这个信息的代价是非常昂贵的。 7调整记录集对象的CacheSize属性 ADO使用记录集对象的CacheSize属性来决定提取和缓存的记录的数目,当在缓存的范围内浏览数据时,ADO就只从缓存中提取数据。当要浏览的数据超出缓存范围的时候,ADO就释放当前缓存,提取下一些记录,所以必须根据具体的应用程序的情况,来设定CacheSize的大小,保证得到最佳的性能。 8定义Command对象的参数 在许多数据源中,得到参数信息
23、和执行命令的代价几乎是一样的,所以最好自己在程序中定义好Command参数(也就是说要定义好参数的名称、类型和方向信息),避免一些从数据提供者那里获取信息的操作。 9使用原始的OLE DB提供者 MDAC对许多数据源提供了原始的数据提供者,比如SQL Server、Oracle和Access数据库,这样就不需要再通过ODBC来获取数据,这样的好处是能更快地得到数据,并且能降低磁盘和内存的开销。 10断开Connection连接 如果使用客户端游标,就要断开Connection连接。ADO有一个特征是当使用客户端游标操作Recordset记录集的时候,不需要和服务器保持联系。所以可以充分利用这个
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- ADODC 控件 介绍 使用
链接地址:https://www.31ppt.com/p-3152215.html