第17章VB/ SQL Server应用程序开 发 17-1VB前端开发概泷 17-2客户端与 SQL Server的关联 17-3使用ADO控件访问 SQL Server数据 库 17-4使用ADO对象访问 SQL Serve数据 库 17-5本章小结 本章主要介绍如何在Ⅴ isual basic6中利用ADO开 发 SQL Server2000的数据库应用系统。要求重点掌握在 Visual basic6中用ADO数据控件和ADO对象访问、控制 SQL Server2000数据库对象的方法,如对表、视图、存 储过程等的操作和控制等
第17章 VB / SQL Server应用程序开 发 17-1 VB前端开发概述 17-2 客户端与SQL Server的关联 17-3 使用ADO控件访问SQL Server 数据 库 17-4 使用ADO对象访问SQL Server 数据 库 17-5 本章小结 本章主要介绍如何在Visual Basic 6中利用ADO开 发SQL Server 2000的数据库应用系统。要求重点掌握在 Visual Basic 6中用ADO数据控件和ADO对象访问、控制 SQL Server 2000数据库对象的方法,如对表、视图、存 储过程等的操作和控制等
第17章VB/ SQL Server应用程序开发 17-1VB前端开发概泷 Visual basic6是 Microsoft visual studio98的成员之一, Microsoft为其提 供了与 SQLSever通信的各种API囪数集及对象库,提供了更好的功能和性能,因此它 越来越多地用作大型公司数据库和客户/服务器应用程序的前端开发工具,与后端 (后台)的 Microsoft SQL Server相结合,VB能够提供一种高性能的客户/服务器方 案 使用 Visual basic开发 SQL server数据库应用程序时,主要有以下常用编程接口可 供选择,它们分别是: ●DAO( Data Access objects,数据访问对象)该对象通过Jet数据库引擎与ODBC 的数据源进行通信,可以读取 Access数据库(MDB文件)中的数据,也可以从 FoXPro或 dBase等ISAM数据库和任何ODBC数据源中读取数据,包括 SQL Server RDO( Remote Data Objects,远程数据对象),该对象实质就是 ODBC API的对 象化,也就是将标准的C函数包装成 Visual basic开发工具易于调用的对象模型,它提 供用代码生成和操作远程○DBC数据库系统组件的框架。RD○对象模型比DA○对象模 型简单,功能比DAO多。 ●ADO( Active Data Objects,活动数据对象),它改进了DAO、RDO和各种其他 数据访问接口的缺陷,或者说它是一种更加标准的接口,架起了不同数据库、文件系 统和E—mai服务器之间的公用桥梁 ● ODBC API。ODBC是 OLE DE的前身,首次对不同数据库台提供了数据的标准接口
第17章 VB / SQL Server应用程序开发 17-1 VB前端开发概述 Visual Basic 6 是 Microsoft Visual Studio 98 的成员之一,Microsoft为其提 供了与SQLSever通信的各种API函数集及对象库,提供了更好的功能和性能,因此它 越来越多地用作大型公司数据库和客户/服务器应用程序的前端开发工具,与后端 (后台)的Microsoft SQL Server相结合,VB能够提供一种高性能的客户/服务器方 案。 使用Visual Basic开发SQL server数据库应用程序时,主要有以下常用编程接口可 供选择,它们分别是: l DAO(Data Access Objects,数据访问对象) 该对象通过Jet数据库引擎与ODBC 的数据源进行通信,可以读取Access数据库(MDB文件)中的数据,也可以从 FoxPro或dBase等ISAM数据库和任何ODBC数据源中读取数据,包括 SQL Server。 l RDO(Remote Data Objects,远程数据对象),该对象实质就是ODBC API的对 象化,也就是将标准的C函数包装成Visual Basic开发工具易于调用的对象模型,它提 供用代码生成和操作远程ODBC数据库系统组件的框架。RDO对象模型比DAO对象模 型简单,功能比DAO多。 l ADO(Active Data Objects,活动数据对象),它改进了DAO、RDO和各种其他 数据访问接口的缺陷,或者说它是一种更加标准的接口,架起了不同数据库、文件系 统和E-mail服务器之间的公用桥梁。 l ODBC API 。ODBC是OLE DB的前身,首次对不同数据库平台提供了数据的标准接口
通过○DBC访问数据要求特定数据源有相应的驱动器。 ODBC API是数据源的低级接 口,可以通过 API Declare语句在 Visual basic中使用 ODBC AP。ADO是微软推出 的新一代的数据访问技术,它使用户能够编写应用程序以通过 OLEDB提供者访问和 操作数据库服务器中的数据。 OLEDB是一组“组件对象模型”(COM)接口,是新的数 据库低层接口,它封装了ODBC的功能,并以统一的方式访问存储在不同信息源中的 数据。 OLE DB是 Microsoft uda( Universal Data Access,见图17-1)策略的技 术基础。 OLE DB为任何数据源提供了高性能的访问,这些数据源包括关系和非关系 数据库、电子邮件和文件系统、文本和图形、自定乂业务对象等等。也就是说,OLE DB并不局限于ISAM、Jet甚至关系数据源,它能够处理任何类型的数据,而不考虑 它们的格式和存储方法。在实际应用中,这种多样性意味着可以访问驻留在 Excel电 子数据表、文本文件、电子邮件/目录服务甚至邮件服务器,诸如 Microsoft Exchange中的数据。但是, OLED应用程序编程接口的目的是为各种应用程序提 供最佳的功能,它并不符合简单化的要求。用户需要的API应该是一座连接应用程序 和 OLE DB的桥梁,这就是 ActiveX Data Objects(ADO)。 ADO的一般特征如下 能够从一个查询返回多个记录集 易于使用与高级记录集缓存管理。 复杂临时表类型,包括批处理和服务器方与客户机方临时表 高性能与优秀的错误捕获 灵活性一适用于现有数据库技术和所有 OLE DB数据提供者。 临时表的编程控制 可复用、可改变属性的对象。 同步、异步和事件驱动查询执行。 与其它数据访问对象(如RDO和DAO)相比,ADO对象模型的对象更少,使用更简单
通过ODBC访问数据要求特定数据源有相应的驱动器。ODBC API是数据源的低级接 口,可以通过API Declare语句在Visual Basic中使用ODBC API。ADO是微软推出 的新一代的数据访问技术,它使用户能够编写应用程序以通过 OLEDB 提供者访问和 操作数据库服务器中的数据。OLEDB是一组“组件对象模型”(COM) 接口,是新的数 据库低层接口,它封装了ODBC的功能,并以统一的方式访问存储在不同信息源中的 数据。OLE DB是Microsoft UDA(Universal Data Access,见图17-1)策略的技 术基础。OLE DB 为任何数据源提供了高性能的访问,这些数据源包括关系和非关系 数据库、电子邮件和文件系统、文本和图形、自定义业务对象等等。也就是说,OLE DB 并不局限于 ISAM、Jet 甚至关系数据源,它能够处理任何类型的数据,而不考虑 它们的格式和存储方法。在实际应用中,这种多样性意味着可以访问驻留在 Excel 电 子数据表、文本文件、电子邮件/目录服务甚至邮件服务器,诸如 Microsoft Exchange 中的数据。但是,OLEDB 应用程序编程接口的目的是为各种应用程序提 供最佳的功能,它并不符合简单化的要求。用户需要的API 应该是一座连接应用程序 和 OLE DB 的桥梁,这就是 ActiveX Data Objects (ADO)。 ADO的一般特征如下: l 能够从一个查询返回多个记录集。 l 易于使用与高级记录集缓存管理。 l 复杂临时表类型,包括批处理和服务器方与客户机方临时表。 l 高性能与优秀的错误捕获。 l 灵活性一适用于现有数据库技术和所有OLE DB数据提供者。 l 临时表的编程控制。 l 可复用、可改变属性的对象。 l 同步、异步和事件驱动查询执行。 与其它数据访问对象(如RDO和DAO)相比,ADO对象模型的对象更少,使用更简单
客户机应用程序 ADO OLEDB ODBC 关采数据 井关系数据 QLServer E-mail 大型 Jet Text Oracle Directory Services 数据库 DB2 ISAM Database 图17-1 Universal Data Access结构
客户机应用程序 ADO OLEDB 关系数据 SQL Server Jet Oracle DB2 ISAM DataBase 非关系数据 E-mail Text DirectoryServices 大型 数据库 ODBC 图17-1 Universal Data Access结构
17-2客户端与 SQL Server的关联 SQL Server2000作为 Microsoft. NET企业服务器的重要组成部分,是以后 台数据库的身份出现的。对于应用 SQL Server数据库系统的用户,访问和操作数 据库通常是通过前端(客户端)来完成的,这就是通常所说的客户机/服务器模式 ADO的目的是让应用程序访问不同地点不同格式的各种数据,这是通过 OLEDE数据提供者实现的,其提供数据给数据使用者(这里中是ADO)。通过 OLE DB访问不同数据源的要求是○LEDB数据提供者发展的必然结果。就像公司 对不同数据源发布ODBC驱动器一样,他们也发布 OLE DB数据提供者以满足通过 OLE DB访问数据的需求。 17-3使用ADO控件访问 SQL Server数据库 Visual basic60具有的最新数据组件是ADO数据控件,ADO数据控件 可以使用户通过 OLE DB访问本地或远程数据源并且把它们与窗体的其他控件相结 合而不需编写很多代码。其常用的属性为 Recordset(记录集),其实ADO控件就 是返回数据源提供的记录集。 17-3-1ADO控件 AD○数据控件使用○对象来建立数据约束控件和数据提供者之间的连接,并 快速创建数据集,然后将数据通过数据约束控件提供给用户。其中数据约束控件可 以是任何具有“数据源”属性的控件,而数据提供者可以是任何符合 OLE DB规范 的数据源。ADO数据控件的图标和添加到窗体上的形状如图17-2所示
SQL Server 2000作为Microsoft .NET企业服务器的重要组成部分,是以后 台数据库的身份出现的。对于应用SQL Server数据库系统的用户,访问和操作数 据库通常是通过前端(客户端)来完成的,这就是通常所说的客户机/服务器模式。 ADO的目的是让应用程序访问不同地点不同格式的各种数据,这是通过 OLEDB数据提供者实现的,其提供数据给数据使用者(这里中是ADO)。通过 OLE DB访问不同数据源的要求是OLE DB数据提供者发展的必然结果。就像公司 对不同数据源发布ODBC驱动器一样,他们也发布OLE DB数据提供者以满足通过 OLE DB访问数据的需求。 17-3 使用ADO控件访问SQL Server 数据库 Visual Basic 6.0具有的最新数据组件是ADO数据控件,ADO数据控件 可以使用户通过OLE DB 访问本地或远程数据源并且把它们与窗体的其他控件相结 合而不需编写很多代码。其常用的属性为Recordset(记录集),其实ADO控件就 是返回数据源提供的记录集。 17-3-1 ADO控件 ADO数据控件使用O对象来建立数据约束控件和数据提供者之间的连接,并 快速创建数据集,然后将数据通过数据约束控件提供给用户。其中数据约束控件可 以是任何具有“数据源”属性的控件,而数据提供者可以是任何符合OLE DB规范 的数据源。ADO数据控件的图标和添加到窗体上的形状如图17-2所示。 17-2 客户端与SQL Server的关联
<aDodc 图17-2ADO数据控件 Visual basic6.0中,可以使用ADO数据控件实现下面一些功能 连接一个本地数据库或远程数据库。 打开一个指定的数据库表,或定义一个基于结构化查询语言(SQL)的查询、存储 过程或者是该数据库中表的视图的记录集合。 将数据字段的数值传递给数据绑定挫件,可以在这些控件中显示或更改这些数值。 添加新记录,或根据对显示在绑定的控件中的数据的仔何更改来更新一个数据库。 1.ADO数据控件的主要属性 Caption属性:标题(常用来显示当前记录所处的位置) UserName属性:用来指定用户的名称,当数据库受密码保护时,需要指定该 属性。该属性可以在 Connectionstring中指定。如果同时提供 个 Connectionstring属性以及一个 UserName属性,则 Connection string中的值将 覆盖 UserName属性的值。 Connection String属性:返回或设置用来建立到数据源的连接字符串。该属性通过 传递含一系列由分号分隔的“参数=值”语句的详细连接字符串指定ADO数据控件 的数据源,在连接字符串中包含进行一个连接所需的所有设置值,其传递的参数与 驱动程序相关,如ODBC 驱动程序允许该字符串包含驱动程序、提供者、缺 省的数据库、服务器、用户名称以及密 码等。 ConnectionString属性参数参见表17-1
图17-2 ADO数据控件 Visual Basic 6.0中,可以使用ADO数据控件实现下面一些功能: 连接一个本地数据库或远程数据库。 打开一个指定的数据库表,或定义—个基于结构化查询语言(SQL)的查询、存储 过程或者是该数据库中表的视图的记录集合。 将数据字段的数值传递给数据绑定控件,可以在这些控件中显示或更改这些数值。 添加新记录,或根据对显示在绑定的控件中的数据的仔何更改来更新一个数据库。 1.ADO数据控件的主要属性 Caption属性:标题(常用来显示当前记录所处的位置)。 UserName属性:用来指定用户的名称,当数据库受密码保护时,需要指定该 属 性 。 该属性可以在 ConnectionString 中指定 。 如果同时提供了一个 ConnectionString属性以及—个 UserName属性,则ConnectionString中的值将 覆盖UserName属性的值。 ConnectionString属性:返回或设置用来建立到数据源的连接字符串。该属性通过 传递含一系列由分号分隔的“参数=值”语句的详细连接字符串指定ADO数据控件 的数据源,在连接字符串中包含进行一个连接所需的所有设置值,其传递的参数与 驱动程序相关,如ODBC 驱动程序允许该字符串包含驱动程序、提供者、缺 省的数据库、服务器、用户名称以及密 码等。ConnectionString属性参数参见表17-1
参数 描 Provider 指定数据源的名称。 File name 指定基于数据源的文件名称。 Remote provider指定在打开一个客户端连接时使用的数据源 名称。 Remote server 指定打开数据连接时使用的服务器的路径和 名称。 表17-1 Connection String属性的参数
参 数 描 述 Provider 指定数据源的名称。 File Name 指定基于数据源的文件名称。 Remote Provider 指定在打开一个客户端连接时使用的数据源 名称。 Remote Server 指定打开数据连接时使用的服务器的路径和 名称。 表17-1 ConnectionString属性的参数
Password属性:在访问一个受保护的数据库时需要设置 Password属性。与 Provider属性和 UserName属性类似,如果在 Connectionstring属性中指定了密码,则将覆盖在这个属性中 指定的值。 RecordSource属性:返回或设置AD○挫件的记录源,用于决定从数据库检索的信息。其设 置值可以是数据库表名,也可以是有效的SQL语句,如 SELECT*FROM学生WHRE(性 别=男") Mode属性∶决定用记录集进行的操作。 1 CommandType属性∶用以确定 Source属性是SQL语句、一个表名、一个存储过程,还是 个未知的类型。 Cursonlocation属性:指定光标的位置,是位于客户机上还是位于服务器上 ConnectionTimeout属性∶设置等待建立一个连接的时间,以秒为单位。如果连接超时,则 返回一个错误。 MaxRecord属性决定光标的大小。如何决定这个属性的值取决于所检索的记录的大小, 以及计算机可用资源(内存)的多少。 MaxRecords属性不能太大。 Cashsize属性:指定从光标中可以检索的记录数。若将 Cursor location属性设为客户端, 则这个属性只能设为一个较小的数目(可能为1).不会有任何不利的影响;若光标的位置位 于服务器,则可以对这个数进行调整,将其设为可以查看的行数。 2.ADO数据控件的主要方法 Refresh方法:用于更新集合中的对象以便反映来自指定提供者的对象情况。在调用 Refresh方法之前,应该将 Commandy对象的 ActiveConnection属性设置为有效 Connection对象,将 CommandText属性设置为有效命合,并且将 Command type属性 置为 adCmdstoredProc。 Refresh方法的语法格式为: DODO1 Refresh
l Password属性:在访问一个受保护的数据库时需要设置Password属性。与Provider属性和 UserName属性类似,如果在ConnectionString属性中指定了密码,则将覆盖在这个属性中 指定的值。 l RecordSource属性:返回或设置ADO控件的记录源,用于决定从数据库检索的信息。其设 置值可以是数据库表名,也可以是有效的 SQL语句,如SELECT * FROM 学生 WHERE (性 别 = '男') l Mode属性:决定用记录集进行的操作。 l CommandType属性:用以确定Source属性是SQL语句、一个表名、一个存储过程,还是一 个未知的类型。 l CursonLocation属性:指定光标的位置,是位于客户机上还是位于服务器上。 l ConnectionTimeout属性:设置等待建立一个连接的时间,以秒为单位。如果连接超时,则 返回一个错误。 l MaxRecord属性:决定光标的大小。如何决定这个属性的值取决于所检索的记录的大小, 以及计算机可用资源(内存)的多少。MaxRecords属性不能太大。 l CashSize属性:指定从光标中可以检索的记录数。若将CursorLocation属性设为客户端, 则这个属性只能设为一个较小的数目(可能为1).不会有任何不利的影响;若光标的位置位 于服务器,则可以对这个数进行调整,将其设为可以查看的行数。 2.ADO数据控件的主要方法 Refresh方法:用于更新集合中的对象以便反映来自指定提供者的对象情况。在调用 Refresh方法之前,应该将Command对象的ActiveConnection属性设置为有效 Connection对象,将CommandText属性设置为有效命令,并且将CommandType属性 置为adCmdStoredProc。 Refresh方法的语法格式为:ADODC1 .Refresh
UpdateRecord方法∶据此可将约束控件上的当前内容写入数据库。 UpdateControls方法∶从控件的 ADO Recordset对象中获取当前行,并在绑定到此控 件的控件中显示相应的数据 Close方法:主要用于关闭打开的对象及任何相关对象。使用该法可以关闭 Connection 或 Recordset对象以便释放所有关联的桑统资源。关闭对象并井将它从内存中删除,要 将对象从内存中完全删除,可将对象变量设置为 Nothing 3.ADO数据控件的常用事件 Willmove和 MoveComplete事件: WillMove事件在执行挂起操作更改 Recordset中的当 前位置前调用,而 Move Complete事件在执行挂起操作更改 Recordset中的当前位置后 调用。当执行ADO数据控件自动创建的记录集的Open、 MoveNext、Move、 Movelast、 MoveFirst movePrevious、 Bookmark、 AddNew、 Delete、 Requery以及 Resync方 法时,这两个事件将被触发。 WillChange Field和 FieldChangeComplete事件: WillChange Field事件发 Recordset对 象中的Feld对象的值被修改之前,而 Field Change Complete事件则发生在被修改之后 般来说,对记录集执行了 Update、 Delete、 CancelUpdate、 Update Batch.或 Cancelbatch方法之前或之后,这两个事件将分别被触发。 WillChangeRecordse和 Recordset change Complete事件: WillChangerecordset和 Recordset Change Complete事件分别发生在对 Recordset对象进行挂起或修改操作之前 和之后。 般来说,如果对 Recordset对象执行了 Requery、 Resync、 Close、Open和 Filter方法之前或之后,这两个事件被触发。 Infomessage事件∶一且 Connectionevent操作成功完成,该事件被调用并且由提供者返 回附加信息
UpdateRecord方法:据此可将约束控件上的当前内容写入数据库。 UpdateControls方法:从控件的ADO Recordset对象中获取当前行,并在绑定到此控 件的控件中显示相应的数据。 Close方法:主要用于关闭打开的对象及任何相关对象。使用该法可以关闭Connection 或Recordset对象以便释放所有关联的系统资源。关闭对象并非将它从内存中删除,要 将对象从内存中完全删除,可将对象变量设置为Nothing。 3.ADO数据控件的常用事件 WillMove和MoveComplete事件:WillMove事件在执行挂起操作更改Recordset中的当 前位置前调用,而MoveComplete事件在执行挂起操作更改Recordset中的当前位置后 调用。当执行ADO数据控件自动创建的记录集的Open、MoveNext、Move、MoveLast、 MoveFirst MovePrevious、Bookmark、AddNew、Delete、Requery以及Resync方 法时,这两个事件将被触发。 WillChangeField和FieldChangeComplete事件:WillChangeField事件发Recordset对 象中的Field对象的值被修改之前,而FieldChangeComplete事件则发生在被修改之后。 一般来说,对记录集执行了Update、Delete、CancelUpdate、UpdateBatch或 CancelBatch方法之前或之 后,这两个事件将分别被触发。 WillChangeRecordset和RecordsetChangeComplete事件:WillChangeRecordset和 RecordsetChangeComplete事件分别发生在对Recordset对象进行挂起或修改操作之前 和之后。 一般来说,如果对Recordset对象执行了Requery、Resync、Close、Open和 Filter方法之前或之后,这两个事件被触发。 InfoMessage事件:一旦ConnectionEvent操作成功完成,该事件被调用并且由提供者返 回附加信息
17-3-2ADO摔件的添加与设置 1.岙加ADO数据控件 在使用AD○数据控件之前,首先需要将ADO数据控件添加到当前的工程中,其步骤 (1)打开一个新的工程,将工程的Name属性设置为 ADODCDemo,并且将工程保存 为 ADODCDemo.vbp,将桑统默认的窗体的Name属性设置为 frmADOdO,将窗体的 Caption属性设置为“使用ADO数据挡件实例”,最后将窗体保存为 frmadodc frm文件。 (2)在 Visual basic中选择【工程】|【部件 】命爷,打开【部件】对话框【部 件】对话框中【控件】标签中选中【 Microsoft ado data Control6.0( OLE DB)选 项,如图17-3所示。然后单击【确定】按钮关闭对话框;当前工程的工具箱中会自动 出现ADO数据控件的图标。 2.在窗体中放置ADo数据控件 将一个ADO数据控件添加到当前工程中以后,可以把它从工具箱中拖放到窗体上,然后 将它连接到信息管理数据库。具体步骤如下 (1)将AD○数据控件从工具箱中拖放到窗体上,在属性窗口中将它的Name属性设置 为 Adodcxxgl (2)ADO数据控件的 Align属性设置为2- VbAlignBotton,表示将控件放置在窗体底 部
1.添加ADO数据控件 在使用ADO数据控件之前,首先需要将ADO数据控件添加到当前的工程中,其步骤: (1)打开一个新的工程,将工程的Name属性设置为ADODCDemo,并且将工程保存 为 ADODCDemo.vbp,将系统默认的窗体的Name属性设置为frmADODC,将窗体的 Caption属性设置为“使用ADO数据控件实例”,最后将窗体保存为frmadodc.frm文件。 (2)在Visual Basic中选择【工程】|【部件...】命令,打开【部件】对话框【部 件】对话框中【控件】标签中选中【Microsoft ADO Data Control 6.0(OLE DB)选 项,如图17-3所示。然后单击【确定】按钮关闭对话框;当前工程的工具箱中会自动 出现ADO数据控件的图标。 2.在窗体中放置ADO数据控件 将一个ADO数据控件添加到当前工程中以后,可以把它从工具箱中拖放到窗体上,然后 将它连接到信息管理数据库。具体步骤如下: (1)将ADO数据控件从工具箱中拖放到窗体上,在属性窗口中将它的Name属性设置 为Adodcxxgl。 (2)ADO数据控件的Align属性设置为2-VbAlignBottom,表示将控件放置在窗体底 部。 17-3-2 ADO控件的添加与设置