应用程序访问数据库技术.docx
《应用程序访问数据库技术.docx》由会员分享,可在线阅读,更多相关《应用程序访问数据库技术.docx(14页珍藏版)》请在冰豆网上搜索。
应用程序访问数据库技术
应用程序访问数据库技术
1.应用程序访问数据库技术概述
应用程序必须通过DBMS来访问数据库中的数据,DBMS要向应用程序提供一个访问接口(API,一组函数),应用程序通过调用它们来访问数据库。
如图所示:
由于不同厂家开发DBMS的API各不相同,这给程序员带来很多麻烦,要编写基于某个厂家DBMS的应用程序,就必须学习、掌握该DBMS的API。
1.1ODBC
ODBC是开放数据库互联(OpenDataBaseConnectivity)的缩写,它是由Microsoft公司联合一些数据库厂商共同推出的一个应用程序访问数据库的公共接口(API)标准。
通过它应用程序可以访问任何一种数据源而不必了解该数据源的细节(当然该数据源要按ODBC标准提供驱动程序)。
其组成如下图所示:
通过ODBCAPI访问
可以说:
ODBC是一个中间件。
所谓中间件就是提供应用程序间通信、会话或翻译服务的程序。
1、ODBC驱动程序管理器作用
管理应用程序和驱动程序之间的交互作用,为应用程序加载和调用驱动程序。
2、ODBC驱动程序作用
执行ODBC函数调用,提交SQL请求给指定的数据源(DBMS)并将结果返回给应用程序。
3、网络通信软件的作用
负责网络通信。
例如:
TCP/IP协议。
1.2OLEDB
ODBC向应用程序提供了一个访问数据库的统一API,这样一来,程序员只要掌握ODBC的API就可以开发访问任何符合SQL标准的数据库(SQL数据源)的程序了。
然而,通过ODBC只能访问SQL数据源,不能访问其它数据源(例如:
文件系统、目录系统等)。
OLEDB是微软公司给出的访问数据源(包括:
SQL数据源、文件系统、目录系统等)的通用标准。
如图所示:
OLEDB标准的具体实现是一组C++API函数,OLEDB的API是符合COM标准、基于对象的。
利用OLEDBAPI可以编写出能够访问任何符合OLEDB标准的数据源的应用程序。
常用的OLEDB标准的服务提供程序介绍
名称
说明
MSDASQL
针对ODBC的OLEDB提供者
SQLOLEDB
针对SQLSERVER的OLEDB提供者
ADsDSOObject
针对活动目录的OLEDB提供者
MSIDXS
针对索引服务的OLEDB提供者
Microsoft.Jet.OLEDB.3.51
针对MicrosoftJet的OLEDB提供者
MSDAORA
针对Oracle的OLEDB提供者
1.3对象模型
我们把ODBC、OLEDB统称为访问数据库的中间件。
ODBC的API函数是用C语言编写的、OLEDB的API函数是用C++语言编写的。
开发应用程序的语言有许多种(C、C++、JAVA、VB等),如果开发应用程序的语言与访问数据库的中间件API的语言不同,那么调用将很麻烦,并且调用时还要考虑这些API函数的调用时序。
为了适应面向对象的程序设计,我们可以把ODBC、OLEDB的API函数封装成对象,使面向对象的语言调用更方便。
2.通过ODBC访问数据库
3.通过OLEDB访问数据库
4.通过ADO访问数据库
ADO对象模型是对OLEDB的封装。
4.1ADO对象模型层次结构
4.2Connection
Connection对象的主要用途是连接DBMS。
4.2.1属性
1、CommandTimeout
⑴ 作用
指定中止某个相关Command对象的Execute调用之前必须等待的时间。
⑵ 取值说明
可读写Long类型。
默认值为30秒。
2、ConnectionString
⑴ 作用
提供数据提供者或服务提供者打开到数据源的连接所需要的特定连接信息。
⑵ 取值说明
可读写String类型。
3、ConnectionTimeout
⑴ 作用
指定中止一个失败的Connection.Open方法调用之前必须等待的时间。
⑵ 取值说明
可读写Long类型。
默认值为15秒。
4、CursorLocation
⑴ 作用
确定是使用客户端(adUseClient)游标引擎,还是使用服务器端(adUseServer)游标引擎。
⑵ 取值说明
可读写Long类型,具体如下:
adUseClient:
客户段游标,好处是:
能降低网络流量。
adUseServer:
服务器段游标,好处是:
程序对数据库的修改可以立即反映到服务器,而且其他用户对数据库的操作也可以马上反映出来;缺点是:
网络流量高,每个数据访问都需要网络交换数据。
5、DefauitDatabase
⑴ 作用
设置连接的默认数据库,如果ConnectString中未指定数据库名称,就使用这里所指定的名称连接数据库服务器时,才需要指定该属性值。
因为一个数据库服务器下可能有许多数据库。
⑵ 取值说明
可读写String类型,服务器下的一个数据库名称。
6、Errors集合和Error对象
⑴ 作用
Errors集合:
存放着Connection连接产生的所有错误,每一个错误都是一个对象,对象ASError型。
该集合的方法有:
Clear:
清楚集合中的Error对象。
Refresh:
刷新集合。
该集合的属性有:
Item:
它是集合的默认方法,它返回对集合中Error对象的引用。
SetEr=Adocon.Errors[.Item](对象名|索引号)
Er为Error型变量。
Adocon为Connection型变量。
Count:
返回集合中对象的数目
Errors对象:
该对象有七个只读属性,没有方法。
Description:
对错误的简单文字说明。
String类型。
HelpContent:
指定错误在WindowsHelp文件中的标识ID。
Long型。
HelpFile:
指定WindowsHelp文件名全称。
String类型
NativeError:
指定特定提供者的错误代码。
Long型。
Number:
指定Errors在Errors集合中的索引值。
Long型
Source:
返回导致错误的对象的名称。
String类型
SQLstate:
String类型
注意:
不同厂家的DBMS的SQLstate不同。
⑵ 应用说明
dimcnnnwindasnewadodb.connection
dimrstcustsasnewadodb.recordset
onerrorgotol1
cnnnwind.provider=”Microsoft.Jet.OLEDB.3.51”
cnnnwind.openapp.path&“\nwind.mdb”,“admin”
withrstcusts
set.activeconnection=cnnnwind
.cursortype=adopenkeyset
.locktype=adlockbatchoptimistic
.open“select*fromnon-existent”
endwith
setadodc1.recordset=rstcusts
exitsub
l1:
dimcolerrorsaserrors
dimerrnwindaserror
setcolerrors=cnnnwind.errors
foreacherrnwindincolerrors
debug.print“错误描述:
”&errnwind.description
debug.print“提供者错误码:
”&errnwind.nativeerror
debug.print“SQL状态码:
”&errnwind.SQLstate
nexterrnwind
setcolerrors=nothing
seterrnwind=nothing
setrstcusts=nothing
setcnnnwind=nothing
7、IsolationLevel
⑴ 作用
指定和其他并发事务交互时,使用锁的行为,既设置锁的隔离级别。
只有用Connection对象的事务方法启动了事务,该属性的设置值才起作用。
⑵ 取值说明
可读写Long类型。
adXactCursorStability 只允许读其他事务已提交的改变(默认值)
adXactBrowse 允许读其他事务未提交的改变
adXactChaos 本事务不会覆盖其他位于更高隔离程度的事务所做的改变
adXactIsolated 所有事务相互独立
adXactReadCommitted 等同于adXactCursorStability
adXactReadUncommitted 等同于adXactBrowse
adXactRepeatableRead 禁止读其他事务的改变
adXactSerializable 等同于adXactIsolated
adXactUnspecified 不能确定提供者的事务隔离程度
⑶ 应用说明
8、Mode
⑴ 作用
指定本连接的读写权限。
⑵ 取值说明
Long类型。
adModeUnknown 未指定数据源的连接许可权(默认值)
adModeRead 连接是只读的
adModeReadWrite 连接是可读写的
adModeShareDenyNone 不拒绝其他用户的读写访问(Jet OLE DB Provider的默认值)
adModeShareDenyRead 拒绝其他用户打开到数据源的读连接
adModeShareDenyWrite 拒绝其他用户打开到数据源的写连接
adModeShareExclusive 以独占方式打开数据源
adModeWrite 连接是只写的
用SQL数据定义语言DDL时,必须是“独占方式”。
⑶ 应用说明
19、Properties
⑴ 作用
Connection对象的属性集合。
⑵ 取值说明
只读,Connection对象的属性
⑶ 应用说明
11、Provider
⑴ 作用
如果ConnectionString中未指定OLE DB数据或服务提供者的名称,就使用这时指定的名称
⑵ 取值说明
可读写String类型,具体如下:
MSDASQL:
针对ODBC。
SQLOLEDB:
针对SQLServer。
Microsoft.Jet.3.51:
针对MicrosoftJet。
MSDAORA:
针对Oracle。
ADsDSOObject:
针对“活动目录”服务。
MSIDXS:
针对“索引”服务。
12、State
⑴ 作用
设置或指示连接是处于什么状态。
⑵ 取值说明
可读写Long类型。
adStateClosed Connection(或其他对象)是关闭的(默认值)
adStateConnecting 正在连接数据源的状态
adStateExecuting Connection或Command对象的Execute方法已被调用
adStateFetching 返回行(row)到Recordset对象
adStateOpen Connection(或其他对象)是打开的(活动的)
4.2.2方法
1、BeginTans
⑴ 语法
FunctionBeginTans()asLong
连接对象名.BeginTans
⑵ 参数说明
⑶ 用途
初始化一个事务;其后必须有CommitTrans和/或RollbackTrans相呼应.
2、Cancel
⑴ 语法
SubCancel()
⑵ 参数说明
3、Close
⑴ 语法
SubClose()
连接对象名.Close
⑵ 参数说明
⑶ 用途
关闭连接.
⑷ 举例
4、CommitTrans
⑴ 语法
SubCommitTrans()
⑵ 参数说明
⑶ 用途
⑷ 举例
回送参数,返回插入、修改、删除操作后所影响的行数
5、Execute
⑴ 语法
FunctionExecute(CommandTextAsString,[RecordsAffected],[OptionsAsLong=-1])AsRecordset
⑵ 参数说明
CommandText:
要执行的SQL语句字符串。
RecordsAffected:
回送参数,返回插入、修改、删除操作后所影响的行数
OptionsAsLong:
确定以何种方式来产生“记录集”,取值如下:
取值
说明
adCmdUnknown
未定(默认值),由提供者去判断。
adCmdFile
是和对象类型相应的文件名称
adCmdStoredProc
是存储过程名
adCmdTable
是能产生内部SELECT*FROM表名查询的表名称
adCmdTableDirect
是能直接从表中获取行内容的表名
adCmdText
是一条SQL语句
⑶ 用途
执行一个SQL命令后,返回一个结果集。
⑷ 举例
dimADOconasNewADODB.Connection
dimADOcomasNewADODB.Command
dimADOrecasNewADODB.Recordset
dimsqlstringasstring
ADOcon.Open“连接串及属性设置”
Sqlstring=”select*from表名where条件”
SetADOrec=ADOcon.Execute(Sqlstring)
或
SetADOrec=ADOcon.Execute(Command:
=Strcommand,RowsAffected:
=
lngRowsAffected,Option:
=lngOption)
Strcommand:
SQL语句,表名,存储过程名
lngRowsAffected:
返回插入、修改、删除操作后所影响的行数。
对SELECT
语句返回0。
6、Open
⑴ 语法
SubOpen([ConnectionStringAsString],[UserIDAsString],[PasswordAsString],[OptionsAsLong=-1])。
连接对象名.Open
⑵ 参数说明
⑶ 用途
打开一个物理连接,用连接字符串来打开一个连接
⑷ 举例
DimadocnasNewADODB.Connect
① adocn.open:
使用连接串ConnectionString的值打开连接。
② adocn.open“Provider=SQLOLEDB;UserID=用户名;Password=密码
InitialCatalog=数据库名;DataSource=服务器名”
针对ODBC的提供者名指定ODBC的驱动程序
③ Connectstring=”provider=MSDASQL;driver={SQLServer};
server=数据库服务器名称;uid=用户名;pwd=密码;database=数据库名”
7、OpenSchema
⑴ 语法
FunctionOpenSchema(SchemaAsSchemaEnum,[Restrictions],[SchemaID])AsRecordset
⑵ 参数说明
⑶ 用途
返回一个Recordset对象,以提供数据源的结构信息。
⑷ 举例
SetAdoRs=Adocon.OpenSchemaadSchemaColumns
8、RollbackTrans
⑴ 语法
SubRollbackTrans()
⑵ 参数说明
⑶ 用途
⑷ 举例
4.2.3事件
4.2.4应用示例
4.3Command
Command对象的主要用途是执行SQL命令、存储过程。
4.3.1属性
4.3.2方法
4.3.3事件
4.4RecordSet
Connection对象的主要用途是连接DBMS。
4.2.1属性
4.2.2方法
4.2.3事件