VB访问SQLSERVER大数据库地几种方法

上传人:shug****ng1 文档编号:153659077 上传时间:2022-09-19 格式:DOCX 页数:18 大小:21.39KB
收藏 版权申诉 举报 下载
VB访问SQLSERVER大数据库地几种方法_第1页
第1页 / 共18页
VB访问SQLSERVER大数据库地几种方法_第2页
第2页 / 共18页
VB访问SQLSERVER大数据库地几种方法_第3页
第3页 / 共18页
资源描述:

《VB访问SQLSERVER大数据库地几种方法》由会员分享,可在线阅读,更多相关《VB访问SQLSERVER大数据库地几种方法(18页珍藏版)》请在装配图网上搜索。

1、VB访问SQL SERVER数据库的几种方法讨论了 Visual Basic应用程序访问SQL Server数据库的几种常用的方法, 分别说明了每种方法的部机理并给出了每种方法的一个简单的实例,最后比较 了每种方法性能和优缺点。一、引言SQL Server是微软推出的中小型网络数据库系统,是目前最常用的数据库 系统之一。随着SQL Server 网络数据库应用程序日益增多,这种Web数据库应 用系统的正常运行一般依赖于已存在的用户数据库。创建维护数据库的工作可 用SQL Server提供的SQL Enterprise Manager工具来进行,如能提供一种定 制的数据库管理工具,通过管理应用程

2、序来管理数据库及其设备,对用户来说 无疑是最理想的。Visual Basic作为一种面向对象的可视化编程工具,具有简单易学,灵活 方便和易于扩充的特点。而且Microsoft为其提供了与SQL Server通信的API 函数集及工具集,因此它越来越多地用作大型公司数据和客户机一服务器应用 程序的前端,与后端的Microsoft SQL Server相结合,VB能够提供一个高性 能的客户机一服务器方案。二、VB访问SQL Server数据的常用方法使用VB作为前端开发语言,与SQL Server接口有几种常用的方法,即: 数据访问对象/Jet; 为ODBC API编程; 使用 SQL Serve

3、r 的 Visual Basic 库(VBSQL)为 DB 库的 API 编程; RDO 远程数据对象(RemoteData Objects); ADO 数据对象(Active Data Objects) o1、数据访问对象/JetVB支持Data Access Objects(DAOs)的子集。DAO的方法虽然不是性能最好 的管理客户机一服务器之间的对话方式,但它的确有许多优点oDAO/Jet是为了 实现从VB访问Access数据库而开发的程序接口对象。使用DAOs访问SQL Server 的过程如下:应用程序准备好语句并送至Jet, Jet引擎(MASJT200.DLL)优化查 询,载入驱

4、动程序管理器并与之通讯,驱动程序管理器(ODBC.DLL)通过调用驱 动器(SQLSRVR.DLL)的函数,实现连接到数据源,翻译并向SQL Server提交SQL 语句且返回结果。下面是一个用DAOs访问SQL Server的VB实例。注释:Form DeclarationsDim mydb As DatabaseDim mydynaset As DynasetPrivate Sub Form_Load()Set mydb = OpenDatabase(, False, False, ODBC; DSN=Myserver;WSID=LCL; DATABASE = sales)Set mydy

5、naset = mydb CreateDynaset(Select*from Customers)End Sub上述例子是以非独占、非只读方式打开sales数据库,并检索Customers 表中的所有字段。OpenDatabase函数的最后一个参数是ODBC连接字符串参数,它指明了 Microsoft Access连接到SQL Server所需知道的一些容。其中“DSN” 为数据源名,“WSID”为工作站名,“DATABASE”为所要访问的数据库名。2、利用ODBC API编程ODBC(Open Database Connectivity)的思想是访问异种数据库的一种可移植的方式。与数据资源对

6、话的公用函数组装在一个称为驱动程序管理器 (ODBC.DLL)的动态连接中。应用程序调用驱动程序管理器中的函数,而驱动程 序管理器反过来通过驱动器(SQLSRVR.DLL)把它们送到服务器中。下面的代码使用上面一些函数先登录到一个服务器数据库,并为随后的工 作设置了语句句柄。Global giHEnv As LongGlobal giHDB As LongGlobal giHStmt As LongDim myResult As integerDim myConnection As SrtingDim myBuff As String*256Dim myBufflen As IntegerIf

7、 SQLAllocEnv(giHEnv)SQL_SUCCESS ThenMsgBoxAllocation couldn t happen!End IfIf SQLAllocConnect(giHEnv,giHDB)SQL_SUCCESS ThenMsgBox SQL Server couldn t connect!myConnection=DSN=myServer;UID=LCL;PWD=;APP=ODBCTest;WSID=LCL;DATABASE=salesmyResult=SQLDriverConnect(giHDB,Test,form1.hWnd,myConnection.len(my

8、Connection), 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库API编程DB 库是 SQL Server 的本地 API,SQL Server 的 Visu

9、al Basic 库(VBSQL) 为Visual Basic程序员提供API。从一定意义上说,VBSQL是连接Visual Basic 程序到SQL Server的性能最好最直接的方式。VBSQL包含以下三个文件:VBSQL.VBX:包含库函数,具有访问重要的消息和处理错误的能力;VBSQL.BI:包括所有的常量和变量说明;VBSQL.HLP: Windows帮助文件,使用VBSQL的指南;使用VBSQL时,必须将VBSQL.BI加入到Visual Basic 工程文件中,并确 保VB程序运行时有VBSQL.VBX文件。一般的DB库API编程的过程是这样的:先通过调用SqlInit对DB库进

10、行 初始化,再调用SqlConnection打开一个连接,然后就可做一些工作。下面的实用文档代码是一个初始化DB库并登录到服务器的通用例程。Private Sub InitializeApplication()DBLIB_VERSION=SqlInit()If DBLIB_VERSION=ThenMsgBoxCould not initialize DBLIB!Exit application.,MB_ICONEXCLAMATIONEnd IfEnd SubPrivate Function LoginToServer() As integerloginToServer=SUCCEEDStatu

11、s%=SqlSetloginTime%(loginTimeOut)If giSqlConn0 ThenSqlClose(giSqlConn)注释:关闭已打开的连接giSqlConn=SqlOpenConnection(gsServerName, gsLoginID, gsPassword, ProgramName, ProgramName)If giSqlConn0 Thenliresuit=SqlUse(giSqlConn,Sales)ElseLogintoServer=FAIL实用文档End Function4、RDO 远程数据对象(RemoteData Objects)要讨论RDO,就必

12、然要谈到DAO。RDO是从DAO派生出来的,但两者很大的不 同在于其数据库模式。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 Serve

13、r和 Oracle而特别设计的。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)相似的是,RDO也带有属性和方法;但

14、同Spread、 InputMan等普遍应用的ActiveX控件不同的是,RDO没有自己的用户界面,因 而可以和VB标准的Timer控件归为同一类。当然也可以将RDO看作调用ODBC API函数,进而对后台数据库操作加以控制的对象。在RDO的属性和方法中,包含 了对单个的ODBC API函数以及一连串API函数的调用。 rdoEngine对象最初调用RDO对象以及RDC(远程数据控件)时,自动生成rdoEngine对象的 附带事件(incident)。rdoEngine用于对RDO全局属性的参数、选项进行设置, 是在RDO的阶层结构处于最上层的对象,包含了所有的其他对象。rdoEngine对象

15、与DAO/Jet不同,虽然被多个应用程序共享,但体现rdoEngine 对象的设定值的属性却并不共用,而是在各自的应用程序的程序界面中对其分 别加以设定。这些设定值对其他使用RDO以及RDC的应用程序没有任何影响。 rdoEngine不是集合的要素,而是重新定义的对象,rdoEngine对象不能被追加 作成对象属性的初值。 rdoEnvironment 对象RDO对象在自动创建rdoEngine对象时,将rdoEnviroment对象的初始值生 成并保存为rdoEnviroments(0)。一般情况下,应用程序中不必追加 rdoEnvironment对象,大多只需对已有的rdoEnvirome

16、nts(0)进行操作就可以 了。只有在支持一个以上事务(Transaction),需要将用户名和口令信息分别处 理的情况下,利用rdoCreateEnvironment方法将特定的用户名和口令值做成新 的rdoEnvironment对象。在这个方法中可以指定固有名、用户名和口令,如果 所指定的值与rdoEnvironments集合的已经存在的成员名称相同,会产生错误。 新建的rdoEnvironment对象自动追加在rdoEnvironments集合的最后。调 rdoCreateEnvironment方法时,其name参数可以是长度为0的文字列,这时新的rdoEnvironment对象将不会被

17、追加在rdoEnvironments集合之中。实用文档 rdoConnection 对象rdoConnection对象用于同SQL Server的连接管理。下面是与SQL Server连接的例子。用OpenConnection方法的一个实例。设定的DSN为MyDSN:Dim Cn As rdoConnectionDim En As rdoEnvironmentDim Conn As StringConn = DSN = MyDSN; UID = Jacob; & PWD = 123456; DATA BASE = MyDb;Set Cn= En.OpenConnection(, rdDrive

18、rPrompt, False, Co nn)Set Cn= En.OpenConnection(Prompt:= rdDriverPrompt, Rea dOnly:= False,Connect:= Cnn)用EstablishConnection方法的一个实例。这里以独立的rdoConnection对象 为例说明与SQL Server的连接。Public WithEvents Eng As rdoEnginePublic WithEvents Cn As rdoConnectionPrivate Sub Form_Load()Set Eng = New rdoEngineSet Cn =

19、New rdoConnectionWith Cn.Connect = UID = ; PWD = ; & DATABASE = pubs; DSN = biblio.LoginTimeout = 5.EstablishConnection rdoDriverNoPromt, True, rdAsyncEna bleEnd WithEnd Sub在这个例子中,Form_Load函数对rdoEngine和rdoConnection对象进行 初始化。这里有一点需要注意,rdoConnection对象是处于独立的状态之下,即 使是处于未连接状态也可以设置属性的值。接下来是rdoConnect对象的事件

20、处 理程序。从 RDO 2.0 起可以 实现异 步方式(rdAsyn cEnable), EstablishConnection就设定为该值。在异步状态下,不必等待与数据库的连接, 程序可以迅速从Form_Load函数中退出。然后是BeforeConnect事件,该处 理在与数据库的连接开始以前被激发,此时不能进行有关终止连接的操作:Private Sub Cn_BeforeConnect(ConnetString As String, Pro mpt As Variant)MsgBox 正在连接& ConnectString, vbOKOnly,连接前End Sub连接完成之后的事件处理:P

21、rivate Sub Cn_Connect(ByVal ErrorOccurred As Boolean)Dim M As StringIf ErrorOccurred ThenFor Each er In rdoErrorsM = M & er & vbCrLf & MNextMsgBox 连接失败& vbCrLf & MElse实用文档MsgBox ”连接成功”注释:这是确认连接状态的测试代码Cn.Excute use pubsEnd SubRDO连接处理结束后,在该事件中确认连接成功与否。连接成功的情况下 ErrorOccurred返回False,失败时为True,由此可以对rdoErr

22、ors集合进行 检测:Private Sub Eng_InfoMessage()For Each er In rdoErrorsDebug.Print erNextRdoErrors.ClearEnd Sub不能与SQL Server连接的原因多种多样,有可能是由于对数据库的访问权 限、网络连接问题、数据库表的信息错误、SQL Server同时连接的许可数、资 源不足等等,具体情况需要与网络管理员商量。断开连接的操作非常简单,但 又很重要,因为RDO不提供自动断开的功能。Cn.CloseSet Cn = Nothing注释:释放对象所占的存资源En.CloseSet En = Nothing注

23、释:释放对象所占的存资源VB是对象语言,Form、ActiveX控件也都是对象。使用对象后必须养成将对象设为Nothing把它从存中释放的编程习惯。这样可以预防很多不可预测错误, 往往程序中发生原因不明的错误时,其原因就在于此。5、ADO 数据对象(Active Data Objects)ADO是基于全新的OLE DB技术,OLE DB可对电子、文本文件、复合文件、数据 表等各种各样的数据通过统一的接口进行存取。随着 ActiveX控件的升级 (Windows 98的ActiveX 5.0),RDO将被以ActiveX技术为基础的ADO接口所 替代。下面将介绍基于ActiveX技术的ADO访问

24、SQL Server 6.5数据库的技术 和方法。基于浏览器的ADO接口常用函数如下:(1)取当前的工作数据库由于管理任务一般都必须在Master库中完成,因此在执行管理任务之前,最好 保存当前工作库,以便完成任务之后再切换回原来的任务。Public Function SQLGetCurrentDatabaseName(Cn As ADODB.Connection) As StringDim sSQL As StringDim RS As New ADODB.RecordsetOn Error GoTo errSQLGetCurrentDatabaseNamesSQL=select Curre

25、ntDB=DB_NAME ()RS.Open sSQL, CnSQLGetCurrentDatabaseName=Trim $ (RS! CurrentDB)RS.CloseExit FunctionerrSQLGetCurrentDatabaseName:SQLGetCurrentDatabaseName=End Function取SQL Server安装目录下的DATA子目录路径,取SQL Server的设备文件缺省目录,返回如D:MSSQL DATAoPublic Function SQLGetDataPath(Cn As ADODB.Connection) As StringDim s

26、SQL As StringDim RS As New ADODB.RecordsetDim sFullPath As StringOn Error GoTo errSQLGetDataPathsSQL=select phyname from master.sysdevices where name=注释:master注释:RS.Open sSQL, CnsFullPath = RS! phynameRS.CloseSQLGetDataPath=Left $ (sFullPath, Len(sFullPath) -10) 注释:MASTER.DAT 的大小Exit FunctionerrSQLG

27、etDataPath:SQLGetDataPath=End Function(3) 创建一个新数据库实用文档Public Function SQLCreateDatabase65 (Cn As ADODB.Connection,sDBName As String, sDataDeviceName As String, nDataSize As Integer, Optional sLogDeviceName, Optional nLogSize) As BooleanDim sSQL As StringOn Error GoTo errSQLCreateDatabase65Dim sDB As

28、 StringsDB =SQLGetCurrentDatabaseName(Cn)sSQL = USE masterCn.Execute sSQLsSQL =CREATE DATABASE & sDBNamesSQL = sSQL & ON & sDataDeviceName & = & nDataSizeIf Not IsMissing(sLogDeviceName) And Not IsMissing(nLogSize) Then sSQL = sSQL & LOG ON & sLogDeviceName & =& nLogSizeEnd IfCn.Execute sSQLsSQL = U

29、SE & sDBCn.Execute sSQLSQLCreateDatabase65 = TrueExit FunctionerrSQLCreateDatabase65:On Error Resume NextsSQL = USE & sDB实用文档Cn.Execute sSQLSQLCreateDatabase65 = FalseEnd Function(4) 判断一个数据库是否存在Public Function SQLExistDatabase(Cn As ADODB.Connection, sDBName As String) As BooleanDim sSQL As StringDi

30、m RS As New ADODB.RecordsetDim bTmp As Booleanon Error GoTo errSQLExistDatabasesSQL = select CntDB = count ( * )sSQL = sSQL & From master.dbo.sysdatabasessSQL = sSQL & Where name =注释:& sDBName & 注释:RS.Open sSQL, CnIf RS! CntDB = 0 Then bTmp = False Else bTmp = TrueRS.CloseSQLExistDatabase = bTmpExit

31、 FunctionerrSQLExistDatabase:SQLExistDatabase = FalseExit FunctionEnd Function(5) 删除一个数据库(Cn As ADODB.Connection, sDBName As String) As BooleanDim sSQL As StringOn Error GoTo errSQLDropDatabaseIf Not SQLExistDatabase(Cn, sDBName) ThenSQLDropDatabase = TrueExit FunctionEnd IfDim sDB As StringsDB = SQ

32、LGetCurrentDatabaseName(Cn)sSQL = Use masterCn.Execute sSQLsSQL = DROP DATABASE & sDBNameCn.Execute sSQLsSQL = USE & sDBCn.Execute sSQLSQLDropDatabase = TrueExit FunctionerrSQLDropDatabase:On Error Resume NextsSQL = USE & sDBCn.Execute sSQLSQLDropDatabase = False实用文档End Function三、性能比较及应用说明用VB开发基于SQL

33、 Server的数据库系统,以上几种访问SQL Server的方 法各有各的特点。DAOs方法是基于对象的,因而便于使用,但是它是从Visual Basic到SQL Server最慢的连接方式。ODBC API和VBSQL方法从本质上讲是基 于程序的。ODBC API方法通用性好,允许最强的互操作性,编程简单,但速度 慢于VBSQL方法。VBSQL方法通过VBSQL控件,提供了重要的SQL Server前端 应用程序所需的灵活性、强大功能和良好性能。它具有真正的事件驱动及错误 处理能力,完全支持异步处理、游标和计算列等。这些都是VBSQL方法超出其 它方法的优势,但其编程稍复杂。RDO是位于O

34、DBC API之上的一个对象模型层, 它依赖ODBCAPI、ODBC驱动程序以及后端数据库引擎来实现,用RDO所需的程 序短小(约250 KB)、快速。RDO具备基本的ODBC处理方法,可直接执行大多数 ODBC API函数,RDO包含在VB 4.0/VB 5.0企业版中,由MSRDO32.DLL动态连 接库来实现。RDO是综合了 DAO/Jet、VBSQL/DBLib和ODBC的优点的对象模型, 包含ODBC API应用层,设计为在后台(服务器端)有数据库存在的前提下运行, 是针对SQL Server和Oracle而特别设计的。RDO的优势在于它完全被集成在 VB之中,可直接访问SQL Se

35、rver存储过程、完全支持T-SQL、T-SQL调试集成 在开发环境中、Visual Database Tools的集成化等。但微软已宣布今后不再 对VBSQL/DBLib进行升级,而ODBC API函数一般的编程方式也不为人们所喜爱, RDO的应用将逐渐减少。至于实际使用哪一种接口方式,在很大程度上依赖于用 户的应用程序的具体情况而定。四、VisualBasic访问数据库的前景近来随着Web应用软件的迅速发展和现有数据存储形式的多种多样,Visual Basic访问数据库的解决方案面临诸如快速提取分布于企业部和外部有用商业 信息等的多种挑战。为此Microsoft提出一种新的数据库访问策略,即“统一 数据访问”(UniversalDataAccess)的策略。“统一数据访问”提供了高性能 的存取包括关系型和非关系型在的多种数据源,提供独立于开发工具和开发语 言的简单的编程接口,这些技术使得企业集成多种数据源、选择更好的开发工 具、应用软件、操作平台、建立容易维护的解决方案成为可能。

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!