VB访问SQLServer的探讨

[入库:2005年8月18日] [更新:2007年3月24日]

本文简介:选择自 shawls 的 blog

 

vb访问sqlserver的探讨 -----------(vb数据库)

摘要

本文讨论了visual basic应用程序访问sql server数据的几中常用的方法,分别说

明了每种方法的内部机理并给出了每种方法的一个简单的实例,最后比较了每种方法的

性能和优缺点。

引言

microsoft visual basic(简称vb)作为一种面向对象的可视化编程工具,具有简单

易学的,灵活方便和易于扩充的特点。而且microsoft为其提供了与sql server通信的

api函数集及工具集。因此它越来越多地用作大型公司数据和客户机—服务器应用程序

的前端。与后端的microsoft sql server相结合,vb能够提供一个鲁棒的、高性能的客

户机—服务器方案。

使用visual basic作为前端开发语言,与sql server接口有三种常用的方法,即:


*数据访问对象/jet
*为odbc api编程
*使用sql server的visual basic库(vbsql)为db库api编程
本文将讨论这三种vb应用程序管理sql server数据的方法,并比较每种方法的性
能和优缺点。

方法1.数据访问对象/jetvisual basic支持data access objects(daos)的子集。dao的

方法虽然不是性能最好的管理客户机—服务器之间的对话方式,但它确有许多优点。使

用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()
set mydb=opendatabase("",fa|se,fa|se,"odbc;dsn=myserver;wsid=lcl;database=sa|es")
set mydynaset=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)的思想是访问异种数据库的一种可移植的方式。

与数据资源对话的公用函数组装在一个称为驱动程序管理器(odbc.dll)的动态连接中。

应用程序调用驱动程序管理器中的函数,而驱动程序管理器反过来通过驱动器反过来通

来驱动器(sqlsrvr.dll)把它们送到服务器中。

用odbc api编程,一般要用到以下一些函数。下面列出了常用的函数以及它们的功能。
函数 功能
sqlallocenv 初始化odbc环境,返回环境句柄
sqlallocconnect 为连接句柄分配内存并返回连接句柄
sqlconnect 连接一个sql数据资源
sqldriverconnect 连接一个sql数据资源,允许驱动器向用户询问信息
sqlallocstmt 为语句句柄分配内存并返回语句句柄
sqlexecdirect 把sql语句送到服务器
sqlfetchadvances 到结果集的下一行(或第一行)
sqlgetdata 从结果集的特定的一列取回数据
sqlfreestmt 释放与语句句柄相关的资源
sqldisconnect 切断连接
sqlfreeconnect 释放与连接句柄相关的资源
sqlfreeenv 释放与环境句柄相关的资源
下面的代码使用上面一些函数先登录到一个服务器数据库,并为随后的工作设置了语句
句柄。
global gihenv as long
global gihdb as long
global gihstmt as long
dim myresult as integer
dim myconnection as srting
dim mybuff as string*256
dim mybufflen as integer
if sqla||ocenv(gihenv)<>sql_success then
msgbox"a||ocation couldn't happen!"
end if
if sql||occonnect(gihenv,gihdb)<>sql_success then
msgbox "sql server couldn't connect!"
end if
myconnection="dsn=myserver;uid=|c|;pwd=;app=odbctest;ws|d=lcl;database=sales"
myresult=sqldriverconnect(gihdb,test,form1.hwnd,myconnection.len(myconnection),
mybuff,256,mybufflen,sql_driver_complete_requied)
myresult=sqla||ocstmt(gihds,gihstmt)
myresult=sqlfreestmt(gihstmt,sql_colse)
rssql="select*from customers where city="wuhan""
myresult=sqlexecdirect(gihstmt,rssql,len(rssql))

方法3.使用vbsql对db库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工程文件中,并确保vb程序运行时有
vbsql.vbx文件。
一个典型的vbsql对话中,一般要用到以下这些函数。
函数 功能
sqllnit 在客户机上装载db库
sqlopenconnection 打开服务器连接,返回连接句柄
sqlcmd 在客户机上建立批处理命令
sqlexec 向服务器提交批处理命令
sqlrexu|ts 把客户机定位在第一条(或下一条)结果集的开端
sqlnextrow 驱动每个结果集的行之间的循环
sqldata 访问一个特定列的数据
sqlc|ose 切断特定的连接
sqlexit 切断所有找开的连接
sqlwinexit 卸下db库
一般的db库api编程的过程是这样的:先通过调用sqlinit对db库进行初始化,再调用
sqlconnection打开一个连接,然后就可做一些工作。下面的代码是一个初始化db库并
登录到服务器的通用例程。
private sub |nitia|izeapp|ication()
dbl|b-vers|on=sq||nit()
|f dbl|b_vers|on=""then
msgbox"could not initia|ize dbl|b!exit app|ication.", mb_|conexclamat|on
end
end if
end sub
private function logintoserver() as integer
logintoserver=succeed
status%=sq|setlogintime%(logintimeout)
|f gisq|conn<>0 then
sq|c|ose(gisq|conn) '关闭已打开的连接
gisq|conn=sq|openconnection(gsservername,gslogin|d,gspassword,progr amname,programname)
|f gisq|conn<>o then
|iresu|t=sq|use(gisq|conn,"sales")
else
logintoserver=fa|l
end |f
end function

性能比较

以上三种访问sql server的方法各有各的特点。daos方法是基于对象的,因而便于

使用,但是它从visual basic到sql server的最慢的方式。odbc api和vbsql方法从本质

上讲是基于程序的。odbc api方法通用性好,允许最强的互操作性,编程简单,但速度

慢于vbsql方法。vbsql方法通过vbsql控件,提供了重要的sql` server前端应用程序所

需的灵活性、强大功能和良好性能。它具有真正的事件驱动及错误处理能力,完全支持

异步处理、游标和计算列等。这些都是vbsql方法超出其它方法的优势,但其编程稍复

杂。至于实际使用哪一种接口方式,在很大程度上依赖于用户的应用程序的具体情况而

定。

本文关键:VB,访问,SQLServer
 

本站最佳浏览方式为 分辨率 1024x768 IE 6.0(或更高版本的 IE浏览器)

go top