《VB如何访问SQLServer数据库》由会员分享,可在线阅读,更多相关《VB如何访问SQLServer数据库(10页珍藏版)》请在金锄头文库上搜索。
1、VB访问 SQL Server数据库技术全揭密2006-08-03 05:00 作者:蒋涛出处:电子技术责任编辑:方舟摘 要: 本文讨论了 Visual Basic 应用程序访问 SQL Server 数据库的几种常用的方法,分别说明了每种方法的内部机理并给出了每种方法的一个简单的实例,最后比较了每种方法性能和优缺点。 一、引言 SQL Server 是微软推出的中小型网络数据库系统,是目前最常用的数据库系统之一。随着SQL Server 网络数据库应用程序日益增多,这种 Web 数据库应用系统的正常运行一般依赖于已存在的用户数据库。创建维护数据库的工作可用 SQL Server 提供的 SQ
2、L Enterprise Manager 工具来进行,如能提供一种定制的数据库管理工具,通过管理应用程序来管理数据库及其设备,对用户来说无疑是最理想的。 Visual Basic 作为一种面向对象的可视化编程工具,具有简单易学,灵活方便和易于扩充的特点。而且 Microsoft 为其提供了与 SQL Server 通信的 API 函数集及工具集,因此它越来越多地用作大型公司数据和客户机服务器应用程序的前端,与后端的 Microsoft SQL Server 相结合,VB 能够提供一个高性能的客户机服务器方案。 二、VB 访问 SQL Server 数据的常用方法 使用 Visual Basic
3、 作为前端开发语言,与 SQL Server 接口有几种常用的方法,即: 数据访问对象/Jet 为 ODBC API 编程 使用 SQL Server 的 Visual Basic 库(VBSQL)为 DB 库的 API 编程 RDO 远程数据对象(RemoteData Objects) ADO 数据对象(Active Data Objects) 1、数据访问对象 /Jet VB 支持 Data Access Objects(DAOs)的子集。DAO 的方法虽然不是性能最好的管理客户机服务器之间的对话方式,但它的确有许多优点。DAO/Jet 是为了实现从 VB 访问 Access 数据库而开发
4、的程序接口对象。使用 DAOs 访问 SQL Server 的过程如下:应用程序准备好语句并送至Jet,Jet 引擎(MASJT200.DLL) 优化查询,载入驱动程序管理器并与之通讯,驱动程序管理器(ODBC.DLL)通过调用驱动器(SQLSRVR.DLL)的函数,实现连接到数据源,翻译并向 SQL Server提交 SQL 语句且返回结果。下面是一个用 DAOs 访问 SQL Server 的 VB 实例。 注释:Form Declarations Dim mydb As Database Dim mydynaset As Dynaset Private Sub Form_Load() S
5、et mydb = OpenDatabase(, False, False, ODBC; DSN=Myserver; WSID=LCL; DATABASE = sales) Set mydynaset = mydb CreateDynaset(Select*from Customers) End Sub 上述例子是以非独占、非只读方式打开 sales 数据库,并检索 Customers 表中的所有字段。OpenDatabase 函数的最后一个参数是 ODBC 连接字符串参数,它指明了 Microsoft Access 连接到SQL Server 所需要知道的一些内容。其中 “DSN”为数据源名
6、,“WSID”为工作站名,“DATABASE”为所要访问的数据库名。 2、利用 ODBC API 编程 ODBC(Open Database Connectivity)的思想是访问异种数据库的一种可移植的方式。与数据资源对话的公用函数组装在一个称为驱动程序管理器(ODBC.DLL)的动态连接中。应用程序调用驱动程序管理器中的函数,而驱动程序管理器反过来通过驱动器(SQLSRVR.DLL)把它们送到服务器中。 下面的代码使用上面一些函数先登录到一个服务器数据库,并为随后的工作设置了语句句柄。 Global giHEnv As Long Global giHDB As Long Global gi
7、HStmt As Long Dim myResult As integer Dim myConnection As Srting Dim myBuff As String*256 Dim myBufflen As Integer If SQLAllocEnv(giHEnv)SQL_SUCCESS Then MsgBox SQL Server couldn 注释:t connect! End If myConnection=DSN=myServer;UID=LCL;PWD=;APP=ODBCTest;WSID=LCL;DATABASE=sales myResult=SQLDriverConnec
8、t(giHDB,Test,form1.hWnd,myConnection.len(myConnection),myBuff,256,myBufflen,SQL_DRIVER_COMPLETE_REQU IE D) myResult=SQLAllocStmt(giHDS,giHStmt) myResult=SQLFreeStmt(giHStmt,SQL_COLSE) rsSQL=Select * from Customers Where City = Hunan myResult = SQLExecDirect(giHStmt,rsSQL,Len(rsSQL) 3、使用 VBSQL 对 DB 库
9、 API 编程 DB 库是 SQL Server 的本地 API,SQL Server 的 Visual Basic 库(VBSQL)为 Visual Basic 程序员提供 API。从一定意义上说,VBSQL 是连接 Visual Basic 程序到 SQL Server 的性能最好最直接的方式。VBSQL 包含以下三个文件: VBSQL.VBX: 包含库函数,具有访问重要的消息和处理错误的能力 VBSQL.BI:包括所有的常量和变量说明 VBSQL.HLP:Windows 帮助文件,使用 VBSQL 的指南 使用 VBSQL 时,必须将 VBSQL.BI 加入到 Visual Basic
10、工程文件中,并确保 VB 程序运行时有VBSQL.VBX 文件。 一般的 DB 库 API 编程的过程是这样的:先通过调用 SqlInit 对 DB 库进行初始化,再调用SqlConnection 打开一个连接,然后就可做一些工作。下面的代码是一个初始化 DB 库并登录到服务器的通用例程。Private Sub InitializeApplication() DBLIB_VERSION=SqlInit() If DBLIB_VERSION=Then MsgBoxCould not initialize DBLIB!Exit application., MB_ICONEXCLAMATION En
11、d If End Sub Private Function LoginToServer() As integer loginToServer=SUCCEED Status%=SqlSetloginTime%(loginTimeOut) If giSqlConn0 Then liresuit=SqlUse(giSqlConn,Sales) Else LogintoServer=FAIL End If End Function 4、RDO 远程数据对象(RemoteData Objects) 要讨论 RDO,就必然要谈到 DAO。RDO 是从 DAO 派生出来的 ,但两者很大的不同在于其数据库模式
12、。DAO 是针对记录(Records)和 字段( Fields),而 RDO 是作为 行(Rows)和列(Columns)来处理。也就是说 DAO 是 ISAM 模式,RDO 是关系模式。此外 DAO 是访问 Access 的 Jet 引擎(Jet 是ISAM)的接口,而 RDO 则是访问 ODBC 的接口。 可见,RDO 是综合了 DAO/Jet、VBSQL/DBLib 以及 ODBC 的优点的对象(Object) 。需要强调的是,RDO 是包裹着 ODBC API 的一层薄薄的外壳, 被设计成在后台(服务器端)有数据库存在的前提下运行,同时也是针对 SQL Server 和 Oracle
13、而特别设计的。 RDO 的优势在于它完全被集成在 VB 之中。此外,直接访问 SQL Server 存储过程、完全支持T-SQL、 T-SQL 调试集成在开发环境中、Visual Database Tools 的集成化等,也是 RDO 的长处。 在 RDO 的对象和集合中,有很多对数据库的状态和设定进行操作的属性(Property),以及对数据库进行操作的方法(Method)。利用这些,从 RDO2.0 起就可以开发事件驱动的数据库应用程序。 RDO 对象与 VB 中其他对象的概念相同。与 VB 用的 ActiveX 控件(以往称为 Custom Control或 OCX、VBX)相似的是,R
14、DO 也带有属性和方法;但同 Spread、InputMan 等普遍应用的 ActiveX控件不同的是,RDO 没有自己的用户界面,因而可以和 VB 标准的 Timer 控件归为同一类。当然也可以将 RDO 看作调用 ODBC API 函数,进而对后台数据库操作加以控制的对象。在 RDO 的属性和方法中,包含了对单个的 ODBC API 函数以及一连串 API 函数的调用。 rdoEngine 对象 最初调用 RDO 对象以及 RDC(远程数据控件)时,自动生成 rdoEngine 对象的附带事件(incident) 。rdoEngine 用于对 RDO 全局属性的参数、选项进行设置,是在 R
15、DO 的阶层结构内处于最上层的对象,包含了所有的其他对象。 rdoEngine 对象与 DAO/Jet 不同,虽然被多个应用程序共享,但体现 rdoEngine 对象的设定值的属性却并不共用,而是在各自的应用程序的程序界面中对其分别加以设定。这些设定值对其他使用 RDO 以及 RDC 的应用程序没有任何影响。rdoEngine 不是集合的要素,而是重新定义的对象,rdoEngine 对象不能被追加作成对象属性的初值。 rdoEnvironment 对象 RDO 对象在自动创建 rdoEngine 对象时,将 rdoEnviroment 对象的初始值生成并保存为rdoEnviroments(0)
16、。一般情况下,应用程序中不必追加 rdoEnvironment 对象,大多只需对已有的rdoEnviroments(0)进行操作就可以了。只有在支持一个以上事务(Transaction),需要将用户名和口令信息分别处理的情况下,利用 rdoCreateEnvironment 方法将特定的用户名和口令值做成新的rdoEnvironment 对象。在这个方法中可以指定固有名、用户名和口令,如果所指定的值与rdoEnvironments 集合的已经存在的成员名称相同,会产生错误。新建的 rdoEnvironment 对象自动追加在 rdoEnvironments 集合的最后。调 rdoCreateEnvironment 方法时,其 name 参数可以是长度为 0 的文字列,这时新的 rdoEnvironment 对象将不会被追加在 rdoEnvironments 集合之中。 rdoConnection 对象 rdoConnection 对