VB访问SQL Server数据库文档格式.docx
- 文档编号:22816929
- 上传时间:2023-02-05
- 格式:DOCX
- 页数:17
- 大小:23.19KB
VB访问SQL Server数据库文档格式.docx
《VB访问SQL Server数据库文档格式.docx》由会员分享,可在线阅读,更多相关《VB访问SQL Server数据库文档格式.docx(17页珍藏版)》请在冰豆网上搜索。
DimmydbAsDatabase
DimmydynasetAsDynaset
PrivateSubForm_Load()
Setmydb=OpenDatabase("
"
False,False,"
ODBC;
DSN=Myserver;
WSID=LCL;
DATABASE=sales"
)
Setmydynaset=mydbCreateDynaset("
Select*fromCustomers"
EndSub
上述例子是以非独占、非只读方式打开sales数据库,并检索Customers表中的所有字段。
OpenDatabase函数的最后一个参数是ODBC连接字符串参数,它指明了MicrosoftAccess连接到SQLServer所需要知道的一些内容。
其中“DSN”为数据源名,“WSID”为工作站名,“DATABASE”为所要访问的数据库名。
2、利用ODBCAPI编程
ODBC(OpenDatabaseConnectivity)的思想是访问异种数据库的一种可移植的方式。
与数据资源对话的公用函数组装在一个称为驱动程序管理器(ODBC.DLL)的动态连接中。
应用程序调用驱动程序管理器中的函数,而驱动程序管理器反过来通过驱动器(SQLSRVR.DLL)把它们送到服务器中。
下面的代码使用上面一些函数先登录到一个服务器数据库,并为随后的工作设置了语句句柄。
GlobalgiHEnvAsLong
GlobalgiHDBAsLong
GlobalgiHStmtAsLong
DimmyResultAsinteger
DimmyConnectionAsSrting
DimmyBuffAsString*256
DimmyBufflenAsInteger
IfSQLAllocEnv(giHEnv)<
>
SQL_SUCCESSThen
MsgBox"
Allocationcouldn注释:
thappen!
EndIf
IfSQLAllocConnect(giHEnv,giHDB)<
MsgBox"
SQLServercouldn注释:
tconnect!
myConnection="
DSN=myServer;
UID=LCL;
PWD=;
APP=ODBCTest;
WSID=LCL;
DATABASE=sales"
myResult=SQLDriverConnect(giHDB,Test,form1.hWnd,myConnection.len(myConnection),myBuff,256,myBufflen,SQL_DRIVER_COMPLETE_REQUIED)
myResult=SQLAllocStmt(giHDS,giHStmt)
myResult=SQLFreeStmt(giHStmt,SQL_COLSE)
rsSQL="
Select*fromCustomersWhereCity="
Hunan"
myResult=SQLExecDirect(giHStmt,rsSQL,Len(rsSQL))
3、使用VBSQL对DB库API编程
DB库是SQLServer的本地API,SQLServer的VisualBasic库(VBSQL)为VisualBasic程序员提供API。
从一定意义上说,VBSQL是连接VisualBasic程序到SQLServer的性能最好最直接的方式。
VBSQL包含以下三个文件:
VBSQL.VBX:
包含库函数,具有访问重要的消息和处理错误的能力
VBSQL.BI:
包括所有的常量和变量说明
VBSQL.HLP:
Windows帮助文件,使用VBSQL的指南
使用VBSQL时,必须将VBSQL.BI加入到VisualBasic工程文件中,并确保VB程序运行时有VBSQL.VBX文件。
一般的DB库API编程的过程是这样的:
先通过调用SqlInit对DB库进行初始化,再调用SqlConnection打开一个连接,然后就可做一些工作。
下面的代码是一个初始化DB库并登录到服务器的通用例程。
PrivateSubInitializeApplication()
DBLIB_VERSION=SqlInit()
IfDBLIB_VERSION="
Then
CouldnotinitializeDBLIB!
Exitapplication."
MB_ICONEXCLAMATION
EndSub
PrivateFunctionLoginToServer()Asinteger
loginToServer=SUCCEED
Status%=SqlSetloginTime%(loginTimeOut)
IfgiSqlConn<
0Then
SqlClose(giSqlConn)注释:
关闭已打开的连接
giSqlConn=SqlOpenConnection(gsServerName,gsLoginID,gsPassword,ProgramName,ProgramName)
liresuit=SqlUse(giSqlConn,"
Sales"
Else
LogintoServer=FAIL
EndFunction
4、RDO远程数据对象(RemoteDataObjects)
要讨论RDO,就必然要谈到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是包裹着ODBCAPI的一层薄薄的外壳,被设计成在后台(服务器端)有数据库存在的前提下运行,同时也是针对SQLServer和Oracle而特别设计的。
RDO的优势在于它完全被集成在VB之中。
此外,直接访问SQLServer存储过程、完全支持T-SQL、T-SQL调试集成在开发环境中、VisualDatabaseTools的集成化等,也是RDO的长处。
在RDO的对象和集合中,有很多对数据库的状态和设定进行操作的属性(Property),以及对数据库进行操作的方法(Method)。
利用这些,从RDO2.0起就可以开发事件驱动的数据库应用程序。
RDO对象与VB中其他对象的概念相同。
与VB用的ActiveX控件(以往称为CustomControl或OCX、VBX)相似的是,RDO也带有属性和方法;
但同Spread、InputMan等普遍应用的ActiveX控件不同的是,RDO没有自己的用户界面,因而可以和VB标准的Timer控件归为同一类。
当然也可以将RDO看作调用ODBCAPI函数,进而对后台数据库操作加以控制的对象。
在RDO的属性和方法中,包含了对单个的ODBCAPI函数以及一连串API函数的调用。
①rdoEngine对象
最初调用RDO对象以及RDC(远程数据控件)时,自动生成rdoEngine对象的附带事件(incident)。
rdoEngine用于对RDO全局属性的参数、选项进行设置,是在RDO的阶层结构内处于最上层的对象,包含了所有的其他对象。
rdoEngine对象与DAO/Jet不同,虽然被多个应用程序共享,但体现rdoEngine对象的设定值的属性却并不共用,而是在各自的应用程序的程序界面中对其分别加以设定。
这些设定值对其他使用RDO以及RDC的应用程序没有任何影响。
rdoEngine不是集合的要素,而是重新定义的对象,rdoEngine对象不能被追加作成对象属性的初值。
②rdoEnvironment对象
RDO对象在自动创建rdoEngine对象时,将rdoEnviroment对象的初始值生成并保存为rdoEnviroments(0)。
一般情况下,应用程序中不必追加rdoEnvironment对象,大多只需对已有的rdoEnviroments(0)进行操作就可以了。
只有在支持一个以上事务(Transaction),需要将用户名和口令信息分别处理的情况下,利用rdoCreateEnvironment方法将特定的用户名和口令值做成新的rdoEnvironment对象。
在这个方法中可以指定固有名、用户名和口令,如果所指定的值与rdoEnvironments集合的已经存在的成员名称相同,会产生错误。
新建的rdoEnvironment对象自动追加在rdoEnvironments集合的最后。
调rdoCreateEnvironment方法时,其name参数可以是长度为0的文字列,这时新的rdoEnvironment对象将不会被追加在rdoEnvironments集合之中。
③rdoConnection对象
rdoConnection对象用于同SQLServer的连接管理。
下面是与SQLServer连接的例子。
用OpenConnection方法的一个实例。
设定的DSN为MyDSN:
DimCnAsrdoConnection
DimEnAsrdoEnvironment
DimConnAsString
Conn="
DSN=MyDSN;
UID=Jacob;
amp;
"
PWD=123456;
DATABASE=MyDb;
SetCn=En.OpenConnection("
rdDriverPrompt,False,Conn)
SetCn=En.OpenConnection(Prompt:
=rdDriverPrompt,ReadOnly:
=False,Connect:
=Cnn)
用EstablishConnection方法的一个实例。
这里以独立的rdoConnection对象为例说明与SQLServer的连接。
PublicWithEventsEngAsrdoEngine
PublicWithEventsCnAsrdoConnection
SetEng=NewrdoEngine
SetCn=NewrdoConnection
WithCn
.Connect="
UID=;
PWD=;
DATABASE=pubs;
DSN=biblio"
.LoginTimeout=5
.EstablishConnectionrdoDriverNoPromt,True,rdAsyncEnable
EndWith
在这个例子中,Form_Load函数对rdoEngine和rdoConnection对象进行初始化。
这里有一点需要注意,rdoConnection对象是处于独立的状态之下,即使是处于未连接状态也可以设置属性的值。
接下来是rdoConnect对象的事件处理程序。
从RDO2.0起可以实现异步方式(rdAsyncEnable),EstablishConnection就设定为该值。
在异步状态下,不必等待与数据库的连接,程序可以迅速从Form_Load函数中退出。
然后是BeforeConnect事件,该处理在与数据库的连接开始以前被激发,此时不能进行有关终止连接的操作:
PrivateSubCn_BeforeConnect(ConnetStringAsString,PromptAsVariant)
正在连接"
ConnectString,vbOKOnly,"
连接前"
EndSub
连接完成之后的事件处理:
PrivateSubCn_Connect(ByValErrorOccurredAsBoolean)
DimMAsString
IfErrorOccurredThen
ForEacherInrdoErrors
M=Meramp;
vbCrLfamp;
M
Next
连接失败"
连接成功"
这是确认连接状态的测试代码
Cn.Excute"
usepubs"
RDO连接处理结束后,在该事件中确认连接成功与否。
连接成功的情况下ErrorOccurred返回False,失败时为True,由此可以对rdoErrors集合进行检测:
PrivateSubEng_InfoMessage()
Debug.Printer
RdoErrors.Clear
不能与SQLServer连接的原因多种多样,有可能是由于对数据库的访问权限、网络连接问题、数据库表的信息错误、SQLServer同时连接的许可数、资源不足等等,具体情况需要与网络管理员商量。
断开连接的操作非常简单,但又很重要,因为RDO不提供自动断开的功能。
Cn.Close
SetCn=Nothing注释:
释放对象所占的内存资源
En.Close
SetEn=Nothing注释:
释放对象所占的内存资源
VB是对象语言,Form、ActiveX控件也都是对象。
使用对象后必须养成将对象设为Nothing把它从内存中释放的编程习惯。
这样可以预防很多不可预测错误,往往程序中发生原因不明的错误时,其原因就在于此。
5、ADO数据对象(ActiveDataObjects)
ADO是基于全新的OLEDB技术,OLEDB可对电子邮件、文本文件、复合文件、数据表等各种各样的数据通过统一的接口进行存取。
随着ActiveX控件的升级(Windows98的ActiveX5.0),RDO将被以ActiveX技术为基础的ADO接口所替代。
下面将介绍基于ActiveX技术的ADO访问SQLServer6.5数据库的技术和方法。
基于浏览器的ADO接口常用函数如下:
(1)取当前的工作数据库
由于管理任务一般都必须在Master库中完成,因此在执行管理任务之前,最好保存当前工作库,以便完成任务之后再切换回原来的任务。
PublicFunctionSQLGetCurrentDatabaseName(CnAsADODB.Connection)AsString
DimsSQLAsString
DimRSAsNewADODB.Recordset
OnErrorGoToerrSQLGetCurrentDatabaseName
sSQL="
selectCurrentDB=DB_NAME()"
RS.OpensSQL,Cn
SQLGetCurrentDatabaseName=Trim$(RS!
CurrentDB)
RS.Close
ExitFunction
errSQLGetCurrentDatabaseName:
SQLGetCurrentDatabaseName="
(2)取SQLServer安装目录下的DATA子目录路径
取SQLServer的设备文件缺省目录,返回如D:
MSSQLDATA。
PublicFunctionSQLGetDataPath(CnAsADODB.Connection)AsString
DimsFullPathAsString
OnErrorGoToerrSQLGetDataPath
sSQL="
selectphynamefrommaster..sysdeviceswherename=注释:
master注释:
sFullPath=RS!
phyname
SQLGetDataPath=Left$(sFullPath,Len(sFullPath)-10)注释:
MASTER.DAT的大小
errSQLGetDataPath:
SQLGetDataPath="
(3)创建一个新数据库
PublicFunctionSQLCreateDatabase65(CnAsADODB.Connection,sDBNameAsString,sDataDeviceNameAsString,nDataSizeAsInteger,OptionalsLogDeviceName,OptionalnLogSize)AsBoolean
OnErrorGoToerrSQLCreateDatabase65
DimsDBAsString
sDB=SQLGetCurrentDatabaseName(Cn)
sSQL="
USEmaster"
Cn.ExecutesSQL
sSQL="
CREATEDATABASE"
sDBName
sSQL=sSQLamp;
ON"
sDataDeviceNameamp;
="
nDataSize
IfNotIsMissing(sLogDeviceName)AndNotIsMissing(nLogSize)Then
LOGON"
sLogDeviceNameamp;
amp;
nLogSize
USE"
sDB
SQLCreateDatabase65=True
ExitFunction
errSQLCreateDatabase65:
OnErrorResumeNext
USE"
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- VB访问SQL Server数据库 VB 访问 SQL Server 数据库