在VB中用ADO实现数据库访问
提要 本文介绍了Visual Basic数据库访问技术发展的历史,详细阐述了利用ADO以非编程方式及编程方式实现数据库访问的方法。
Visual Basic作为一种面向对象的可视化编程工具,具有简单易学、灵活方便和易于扩充的特点,并且支持一套出色的数据库访问技术。Microsoft为其提供了与SQL Server通信的API函数集及工具集,因此它越来越多地用作前台应用程序的开发,与后台的Microsoft SQL Server相结合,从而提供一个高性能的客户机-服务器方案。
一、VB数据库访问技术的发展
早期的Visual Basic数据访问工具是简单的ASCII文件访问工具,极少数SQL Server 的前端应用程序是数据接口VBSQL编写的。在Visual Basic 3.0时代,许多用户强调转移包含远程数据源的ISAM(Indexed Sequential Access Method,索引顺序存取法)数据,为此Microsoft设计了Microsoft Jet Database Engine(或简称为Jet)和DAO(Data Access Object),使得Visual Basic Access开发人员很容易地同Jet接口,其操作针对记录和字段,主要用于开发单一的数据库应用程序。随着使用者需求的不断改变,Visual Basic又包含了更快的访问远程数据和对ODBC数据源访问的优化,出现了新的数据库接口RDO(Remote Data Object),它是访问关系型ODBC数据源的最佳界面接口,其操作针对行和列。ADO(ActiveX Data Objects)作为另一种可供选择的技术出现,正在逐渐代替其他数据访问接口。ADO比DAO和RDO具有更好的灵活性,更易使用,实现的功能也更全面。
二、ActiveX数据对象ADO
ADO是一种用于开发访问OLE DB数据源应用程序的API,是Visual Basic中新的数据访问标准。ADO提供了更为高级的易于理解的访问机制,具有更加简单、更加灵活的操作性能。ADO访问数据是通过OLE DB来实现的,OLE DB不仅能够以SQL Server、Oracle、Access等数据库文件为访问对象,还可对Excel表格、文本文件、图形文件、电子邮件等各种各样的数据通过统一的接口进行存取。ADO集中了DAO和RDO的优点,是DAO、RDO的后继产物而且不像DAO和RDO那样依赖于对象层次。ADO对象模型定义了一个可编程的分层对象集合,主要由七个对象成员Connection、Command、Recordset、Error、Parameter、Field和Property以及四个集合对象Errors、Parameters、Fields、Properties所组成。每个 Connection、Command、Recordset和Field对象都有Properties集合。
三、ADO数据库访问技术的应用
在VB中,使用ADO访问数据库主要有两种方式,一种是使用ADO Data控件,通过对控件的绑定来访问数据库中的数据,即非编程访问方式;另一种是使用ADO对象模型,通过定义对象和编写代码来实现对数据的访问,即编程访问方式。下面以SQL Server数据库为例,说明这两种方式的使用。首先在SQL Server 2000中建立一个XJGL的数据库,在XJGL数据库中建立student数据表,然后将此数据表的信息通过数据绑定控件DataGrid显示出来。
(一)使用ADO Data控件访问数据库。这是使用ADO快速创建数据绑定控件和数据提供者之间的连接。其中数据绑定控件可以是任何具有DataSource属性的控件;数据提供者可以是任何符合OLE DB规范的数据源。
ADO Data控件是ActiveX控件,在使用前必须先将其添加到工具箱中。方法是:
(1)单击“工程”—“部件”菜单选项,选中“Microsoft ADO Data Control 6.0(OLE DB)”后,按“确定”,此时ADO数据控件便出现在工具箱中。
(2)将ADO Data控件添加到窗体上,其默认的名称属性为“Adodc1”。
(3)右击ADO Data控件,选“ADODC属性”,弹出“属性页”对话框。
(4)选中“使用连接字符串”(也可以选择“ODBC数据源名称”),再单击“生成”按钮,弹出“数据链接属性”对话框。
(5)选择“提供程序”选项卡,在列表中选择“Microsoft OLE DB Provider For SQL SERVER”选项,单击“下一步”按钮。
(6)指定服务器的名称和登录信息并选择本连接要使用的数据库文件。
(7)单击“测试连接”按钮以确定连接是否正常。若得到测试成功的消息,单击“确定”按钮以继续。
(8)在“属性页”对话框中选择“记录源”选项卡,在命令类型下拉列表中选择“2-adCmdTable”选项,在表或存储过程名称下拉列表中选择数据表“student”。(若选择的命令类型为“1-adCmdText”,则可在命令文本框中输入SQL查询语句),然后单击“确定”按钮。
(9)在窗体上再添加一个数据绑定控件DataGridl,设定其DataSource为Adodc1。
通过上述操作便实现了SQL Server数据库XJGL中student表的浏览功能,得到预
期的运行结果。
(二)使用ADO 对象模型访问数据库。为了能够在程序中使用ADO对象编程,在连接数据库前,需要在Visual Basic 6.0菜单 “工程”—“引用”中选择Microsoft ActiveX Data Objects 2.8 Library组件。运用ADO对象模型的主要元素:Connection(连接)中的ConnectionString属性进行连接,ConnectionString为可读写string类型,指定一个连接字符串,告诉ADO如何连接数据库。
(1)首先创建一组ADO对象用于设置打开连接和产生结果集。声明语句如下:
Dim cn As New ADODB.Connection
Dim rs As New ADODB.Recordset
(2)创建ADO对象实例,声明了对象以后,还需要创建对象实例,否则不能使用。以下是两条重要语句:
Set cn =New ADODB.Connection
Set rs =New ADODB.Recordset
(3)设置Connection对象实例ConnectionString属性连接到数据库。有两种方法:
方法一:有源数据库连接。首要任务是要注册数据源名称(DSN),通过配置ODBC环境,进行数据源的注册,然后才能对数据源进行连接、访问和操作。例如,DSN数据源是“information”、用户名是“sa”、口令为空,与数据库“XJGL”建立的连接代码如下:
cn.ConnectionString=\"dsn=information;uid=sa;pwd=;database=XJGL\"
方法二:无源数据库连接。不需要配置ODBC数据源,区别在于是否使用了DSN来决定。例如,提供连接所需要的特定信息包括:服务器名称是“my_server”、用户名是“sa”、口令为空,与数据库“XJGL”建立的连接代码如下:
cn.ConnectionString=\"driver={sql server};server=my_server;uid=sa;pwd=;Database=XJGL\"
(4)设置好连接属性后,就可以打开连接对象了。语句如下:
cn.Open
这样,VB和后台SQL Server数据库的连接就创建好了。
实例:创建示图界面,并以无源数据库连接的方式完成上例同样的功能。编写代码如下:
Dim cn As New ADODB.Connection
Dim rs As New ADODB.Recordset
Dim cmd As New ADODB.Command
Private Sub Form_Load()
Set cn=New ADODB.Connection
Set rs=New ADODB.Recordset
cn.ConnectionString=\"driver={sql server};server=my_server;uid=sa;pwd=;Database=XJGL\"
cn.Open
cmd.ActiveConnection=cn
cmd.CommandType=adCmdText
cmd.CommandText=\"select* from student\"
rs.CursorLocation=adUseClient
rs.CursorType=adOpenDynamic
rs.LockType=adLockReadOnly
rs.Open cmd
Set DataGrid1.DataSource=rs
End Sub
ADO数据控件和ADO对象模型都为我们提供了数据库访问的接口技术,使用ADO Data控件在建立连接、选择数据表时,不需要创建连接对象和记录集对象,ADO Data控件几乎封装了相应代码的所有功能,只需设置好与之相关的属性、方法和事件,操作简单,但是ADO Data控件灵活性较差,不利于对大型数据库访问,一个ADO Data控件只能在同一数据源上打开一个记录集,在一个应用中若涉及多个记录集,则需要建立多个ADO Data控件。使用ADO对象模型,通过定义对象、编写代码来实现数据库的访问,可以很好地控制各种操作,使其具备了更多的灵活性和更强大的功能,便于实现对象重用、封装等技术,也利于事件处理,提高数据操作效率,特别是对海量数据的处理。两种方法各有优点,在开发应用程序时,应根据数据库应用程序的特点来选择具体的访问方式
因篇幅问题不能全部显示,请点此查看更多更全内容