SQL Server数据库技术
关键字: sql server数据库技术http://www.cncms.com.cn/mssql/2129.htm
在前面我们已经提到过有关视图的下述观点:由于视图返回的结果集与具有行列结构的表有着相同的表格形式,并且我们可以在SQL
语句中像引用表那样引用视图,所以我们常把视图称为虚表。标准视图的结果集并不以表的形式存储在数据库中,而是在执行引用了视图的查询时,sql
server(WINDOWS平台
上强大的数据库平台)
2000 才把相关的基本表中的数据合并成视图的逻辑结构。
上面的结论常让我们产生这样的焦虑:由于是在执行了引用了视图的查询时,sql server(WINDOWS平台上强大的数据库平台)
2000 才把相关的基本表中的数据合并成视图的逻辑结构,那么当查询所引用的视图包含大量的数据行或涉及到对大量数据行进行合计运算或连接操作,毋庸置疑,动态地创建视图结果集将给系统带来沉重的负担,尤其是经常引用这种大容量视图。
解决这一令人头痛问题的方法就是为视图创建聚簇索引,只有这样才会显著地提高系统的性能。当在视图上创建了聚簇索引后,视图的结果集与有聚簇索引的表的数据集一样是存储在数据中的。
此外,在视图上创建索引还会带来这样的好处;优化器可以在那些在FROM 从句中不直接命名视图的查询中使用视图索引,而且对已存在的视图而言,由于不必重新编写查询代码,从而提高了查询从索引视图中检索数据的效率。
如果在视图上创建索引,那么视图中的数据会被立即存储在数据库中,对索引视图进行修改,那么这些修改会立即反映到基础表中。同理,对基础表所进行的数据修改也会反映到索引视图那里。索引的惟一性大大提高了sql server(WINDOWS平台上强大的数据库平台)
查找那些被修改的数据行。
维护索引视图比维护基础表的索引更为复杂。所以,如果认为值得以因数据修改而增加系统负担为代价来提高数据检索的速度,那么应该在视图上创建索引。在为视图创建索引前,视图本身必须满足以下条件:
- 在执行CREATE VIEW 命令时,必须将ANSI_NULLS 和QUOTED_IDENTIFIER选项设置为ON 状态;
- 在使用CREATE TABLE 命令创建索引所引用的基础表时,ANSI_NULLS 选项应设置为ON;
- 该视图所引用的对象仅包括基础表而不包括其它的视图;
- 视图所引用的基础表必须与视图同属于同一数据库且有相同的所有者;
- 在创建视图时必须使用SCHEMABINDING 选项;
- 如果视图引用了用户自定义函数,那么在创建这些用户自定义函数时也必须使用SCHEMABINDING 选项 ;
- 视图必须以owner.objectname 的形式来使所引用的表或用户自定义函数;
- 视图所引用的函数必须是确定性的;
- 另外值得注意的是,在创建视图的SELECT 语句中不应该包含下面的Transact-SQL语法;
- SELECT 语句中不能使用*或tablename.*来定义列,必须直接给出列名,否则不可以;
- 表示行集合的函数;
- UNION、 DISTINCT、 TOP、 ORDER BY、 COMPUTE、 COMPUTE BY、COUNT(*) 等;
- AVG、 MAX、 MIN、 STDEV、 STDEVP、 VAR 和VARP 等合计运算函数。
通常而言,可以在视图上创建多个索引,但是应该记住,在视图上所创建的第一个索引必须是聚簇索引,然后才可以创建其它的非聚簇索引。
在第八章我们已经详细介绍了CREATE INDEX 命令但是如果准备为视图创建索引那么在执行该命令以前您必须确保以下条件否则创建将会失败。 - CREATE INDEX 命令的执行者必须是视图的所有者;
- 在执行创建索引命令期间,ANSI_NULLS、 ANSI_PADDING、 ANSI_WARNINGS、ARITHABORT、 CONCAT_NULL_YIELDS_NULL、 QUOTED_IDENTIFIERS 诸选项应被设置成ON 状态;
- NUMERIC_ROUNDABORT 选项被设置为OFF 状态;
- 视图不能包括text、 ntext、 image 类型的数据列;
- 如果视图的SELECT 语句中包含ORDER BY 选项,则聚簇索引的关键值只能是ORDER BY 从句中所定义的数据列。
在视图上创建了索引之后,如果打算修改视图数据,则应该保证修改时的选项设置与创建索引时的选项设置一样,否则sql server(WINDOWS平台上强大的数据库平台) 将产生错误信息,并回滚所做的INSERT、UPDATE 和DELETE 操作。
####################################################################
摘 要:
本文讨论了Visual Basic应用程序访问sql server(WINDOWS平台上强大的数据库平台)
数据库的几种常用的方法,分别说明了每种方法的内部机理并给出了每种方法的一个简单的实例,最后比较了每种方法性能和优缺点。
一、引言
sql server(WINDOWS平台上强大的数据库平台)
是微软推出的中小型网络数据库系统,是目前最常用的数据库系统之一。随着sql server(WINDOWS平台上强大的数据库平台)
网络数据库应用程序日益增多,这种Web数据库应用系统的正常运行一般依赖于已存在的用户数据库。创建维护数据库的工作可用sql server(WINDOWS平台上强大的数据库平台)
提供的SQL Enterprise Manager工具来进行,如能提供一种定制的数据库管理工具,通过管理应用程序来管理数据库及其设备,对用户来说无疑是最理想的。
Visual Basic作为一种面向对象的可视化编程工具,具有简单易学,灵活方便和易于扩充的特点。而且Microsoft为其提供了与sql server(WINDOWS平台上强大的数据库平台)
通信的API函数集及工具集,因此它越来越多地用作大型公司数据和客户机—服务器应用程序的前端,与后端的Microsoft sql server(WINDOWS平台上强大的数据库平台)
相结合,VB能够提供一个高性能的客户机—服务器方案。
二、VB访问sql server(WINDOWS平台上强大的数据库平台)
数据的常用方法
使用Visual Basic作为前端开发语言,与sql server(WINDOWS平台上强大的数据库平台)
接口有几种常用的方法,即:
①数据访问对象/Jet
②为ODBC API编程
③使用sql server(WINDOWS平台上强大的数据库平台)
的Visual Basic库(VBSQL)为DB库的API编程
④RDO 远程数据对象(RemoteData Objects)
⑤ADO 数据对象(Active Data Objects)
1、数据访问对象/Jet
VB支持Data access(小型网站之最爱)
Objects(DAOs)的子集。DAO的方法虽然不是性能最好的管理客户机—服务器之间的对话方式,但它的确有许多优点。DAO/Jet是为了实现从VB访问access(小型网站之最爱)
数据库而开发的程序接口对象。使用DAOs访问sql server(WINDOWS平台上强大的数据库平台)
的过程如下:应用程序准备好语句并送至Jet,Jet引擎(MASJT200.DLL)优化查询,载入驱动程序管理器并与之通讯,驱动程序管理器(ODBC.DLL)通过调用驱动器(SQLSRVR.DLL)的函数,实现连接到数据源,翻译并向sql server(WINDOWS平台上强大的数据库平台)
提交SQL语句且返回结果。下面是一个用DAOs访问sql server(WINDOWS平台上强大的数据库平台)
的VB实例。
注释:Form Declarations
Dim mydb As Database
Dim mydynaset As Dynaset
Private Sub Form_Load()
Set 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(WINDOWS平台上强大的数据库平台)
所需要知道的一些内容。其中“DSN”为数据源名,“WSID”为工作站名,“DATABASE”为所要访问的数据库名。
2、利用ODBC API编程
ODBC(Open
Database
Connectivity)的思想是访问异种数据库的一种可移植的方式。与数据资源对话的公用函数组装在一个称为驱动程序管理器(ODBC.DLL)的动
态连接中。应用程序调用驱动程序管理器中的函数,而驱动程序管理器反过来通过驱动器(SQLSRVR.DLL)把它们送到服务器中。用ODBC
API编程,一般要用到以下一些函数。下面列出了常用的函数以及它们的功能。
(表格1)
下面的代码使用上面一些函数先登录到一个服务器数据库,并为随后的工作设置了语句句柄。
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 SQLAllocEnv(giHEnv)<>SQL_SUCCESS Then
MsgBox"Allocation couldn注释:t happen!"
End If
If SQLAllocConnect(giHEnv,giHDB)<>SQL_SUCCESS Then
MsgBox "sql server(WINDOWS平台上强大的数据库平台)
couldn注释:t connect!"
End If
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 * from Customers Where City = "Hunan""
myResult = SQLExecDirect(giHStmt,rsSQL,Len(rsSQL))
3、使用VBSQL对DB库API编程
DB库是sql server(WINDOWS平台上强大的数据库平台)
的本地API,sql server(WINDOWS平台上强大的数据库平台)
的Visual Basic库(VBSQL)为Visual Basic程序员提供API。从一定意义上说,VBSQL是连接Visual Basic程序到sql server(WINDOWS平台上强大的数据库平台)
的性能最好最直接的方式。VBSQL包含以下三个文件:
VBSQL.VBX: 包含库函数,具有访问重要的消息和处理错误的能力
VBSQL.BI:包括所有的常量和变量说明
VBSQL.HLP:Windows帮助文件,使用VBSQL的指南
使用VBSQL时,必须将VBSQL.BI加入到Visual Basic工程文件中,并确保VB程序运行时有VBSQL.VBX文件。
一个典型的VBSQL对话中,一般要用到以下这些函数。
(表格2)
一般的DB库API编程的过程是这样的:先通过调用SqlInit对DB库进行初始化,再调用SqlConnection打开一个连接,然后就可做一些工作。下面的代码是一个初始化DB库并登录到服务器的通用例程。
Private Sub InitializeApplication()
DBLIB_VERSION=SqlInit()
If DBLIB_VERSION=""Then
MsgBox"Could not initialize DBLIB!Exit application.", MB_ICONEXCLAMATION
End If
End Sub
Private Function LoginToServer() As integer
loginToServer=SUCCEED
Status%=SqlSetloginTime%(loginTimeOut)
If giSqlConn<>0 Then
SqlClose(giSqlConn) 注释:关闭已打开的连接
giSqlConn=SqlOpenConnection(gsServerName, gsLoginID, gsPassword, ProgramName, ProgramName)
If giSqlConn<>0 Then
liresuit=SqlUse(giSqlConn,"Sales")
Else
LogintoServer=FAIL
End If
End Function
4、RDO 远程数据对象(RemoteData Objects)
要讨论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是包裹着ODBC
API的一层薄薄的外壳, 被设计成在后台(服务器端)有数据库存在的前提下运行,同时也是针对sql server(WINDOWS平台上强大的数据库平台)
和Oracle(大型网站数据库平台)
而特别设计的。
RDO的优势在于它完全被集成在VB之中。此外,直接访问sql server(WINDOWS平台上强大的数据库平台)
存储过程、完全支持T-SQL、T-SQL调试集成在开发环境中、Visual Database Tools的集成化等,也是RDO的长处。
在RDO的对象和集合中,有很多对数据库的状态和设定进行操作的属性(Property),以及对数据库进行操作的方法(Method)。利用这些,从RDO2.0起就可以开发事件驱动的数据库应用程序。
RDO
对象与VB中其他对象的概念相同。与VB用的ActiveX控件(以往称为Custom
Control或OCX、VBX)相似的是,RDO也带有属性和方法;但同Spread、InputMan等普遍应用的ActiveX控件不同的是,
RDO没有自己的用户界面,因而可以和VB标准的Timer控件归为同一类。当然也可以将RDO看作调用ODBC
API函数,进而对后台数据库操作加以控制的对象。在RDO的属性和方法中,包含了对单个的ODBC API函数以及一连串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对象用于同sql server(WINDOWS平台上强大的数据库平台)
的连接管理。
下面是与sql server(WINDOWS平台上强大的数据库平台)
连接的例子。
用OpenConnection方法的一个实例。
设定的DSN为MyDSN:
Dim Cn As rdoConnection
Dim En As rdoEnvironment
Dim Conn As String
Conn = "DSN = MyDSN; UID = Jacob;" & "PWD = 123456; DATA BASE = MyDb;"
Set Cn= En.OpenConnection("", rdDriverPrompt, False, Co nn)
Set Cn= En.OpenConnection(Prompt:= rdDriverPrompt, Rea dOnly:= False,Connect:= Cnn)
用EstablishConnection方法的一个实例。
这里以独立的rdoConnection对象为例说明与sql server(WINDOWS平台上强大的数据库平台)
的连接。
Public WithEvents Eng As rdoEngine
Public WithEvents Cn As rdoConnection
Private Sub Form_Load()
Set Eng = New rdoEngine
Set Cn = New rdoConnection
With Cn
.Connect = "UID = ; PWD = ;" & "DATABASE = pubs; DSN = biblio"
.LoginTimeout = 5
.EstablishConnection rdoDriverNoPromt, True, rdAsyncEna ble
End With
End Sub
在这个例子中,Form_Load函数对rdoEngine和rdoConnection对象进行初始化。这里有一点需要注意,
rdoConnection对象是处于独立的状态之下,即使是处于未连接状态也可以设置属性的值。接下来是rdoConnect对象的事件处理程序。从
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
连接完成之后的事件处理:
Private Sub Cn_Connect(ByVal ErrorOccurred As Boolean)
Dim M As String
If ErrorOccurred Then
For Each er In rdoErrors
M = M & er & vbCrLf & M
Next
MsgBox "连接失败" & vbCrLf & M
Else
MsgBox "连接成功"
注释:这是确认连接状态的测试代码
Cn.Excute "use pubs"
End Sub
RDO连接处理结束后,在该事件中确认连接成功与否。连接成功的情况下ErrorOccurred返回False,失败时为True,由此可以对rdoErrors集合进行检测:
Private Sub Eng_InfoMessage()
For Each er In rdoErrors
Debug.Print er
Next
RdoErrors.Clear
End Sub
不能与sql server(WINDOWS平台上强大的数据库平台)
连接的原因多种多样,有可能是由于对数据库的访问权限、网络连接问题、数据库表的信息错误、sql server(WINDOWS平台上强大的数据库平台)
同时连接的许可数、资源不足等等,具体情况需要与网络管理员商量。 断开连接的操作非常简单,但又很重要,因为RDO不提供自动断开的功能。
Cn.Close
Set Cn = Nothing 注释:释放对象所占的内存资源
En.Close
Set En = Nothing 注释:释放对象所占的内存资源
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访问sql
server(WINDOWS平台上强大的数据库平台)
6.5数据库的技术和方法。基于浏览器的ADO接口常用函数如下:
(1)取当前的工作数据库
由于管理任务一般都必须在Master库中完成,因此在执行管理任务之前,最好保存当前工作库,以便完成任务之后再切换回原来的任务。
Public Function SQLGetCurrentDatabaseName(Cn As ADODB.Connection) As String
Dim sSQL As String
Dim RS As New ADODB.Recordset
On Error GoTo errSQLGetCurrentDatabaseName
sSQL="select CurrentDB=DB_NAME ( )"
RS.Open sSQL, Cn
SQLGetCurrentDatabaseName=Trim $ (RS! CurrentDB)
RS.Close
Exit Function
errSQLGetCurrentDatabaseName:
SQLGetCurrentDatabaseName=" "
End Function
(2)取sql server(WINDOWS平台上强大的数据库平台)
安装目录下的DATA子目录路径
取sql server(WINDOWS平台上强大的数据库平台)
的设备文件缺省目录,返回如D:mssql(WINDOWS平台上强大的数据库平台)
DATA。
Public Function SQLGetDataPath(Cn As ADODB.Connection) As String
Dim sSQL As String
Dim RS As New ADODB.Recordset
Dim sFullPath As String
On Error GoTo errSQLGetDataPath
sSQL="select phyname from master..sysdevices where name=注释:master注释: "
RS.Open sSQL, Cn
sFullPath = RS! phyname
RS.Close
SQLGetDataPath=Left $ (sFullPath, Len(sFullPath) -10) 注释:MASTER.DAT的大小
Exit Function
errSQLGetDataPath:
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 Boolean
Dim sSQL As String
On Error GoTo errSQLCreateDatabase65
Dim sDB As String
sDB =SQLGetCurrentDatabaseName(Cn)
sSQL = "USE master"
Cn.Execute sSQL
sSQL ="CREATE DATABASE" & sDBName
sSQL = sSQL &" ON " & sDataDeviceName & "=" & nDataSize
If Not IsMissing(sLogDeviceName) And Not IsMissing(nLogSize) Then
sSQL = sSQL & "LOG ON" & sLogDeviceName & "="& nLogSize
End If
Cn.Execute sSQL
sSQL = "USE" & sDB
Cn.Execute sSQL
SQLCreateDatabase65 = True
Exit Function
errSQLCreateDatabase65:
On Error Resume Next
sSQL = "USE " & sDB
Cn.Execute sSQL
SQLCreateDatabase65 = False
End Function
(4)判断一个数据库是否存在
Public Function SQLExistDatabase(Cn As ADODB.Connection, sDBName As String) As Boolean
Dim sSQL As String
Dim RS As New ADODB.Recordset
Dim bTmp As Boolean
on Error GoTo errSQLExistDatabase
sSQL = "select CntDB = count ( * ) "
sSQL = sSQL & "From master.dbo.sysdatabases"
sSQL = sSQL & "Where name = 注释: "& sDBName & " 注释: "
RS.Open sSQL, Cn
If RS! CntDB = 0 Then bTmp = False Else bTmp = True
RS.Close
SQLExistDatabase = bTmp
Exit Function
errSQLExistDatabase:
SQLExistDatabase = False
Exit Function
End Function
(5)删除一个数据库
Public Function SQLDropDatabase (Cn As ADODB.Connection, sDBName As String) As Boolean
Dim sSQL As String
On Error GoTo errSQLDropDatabase
If Not SQLExistDatabase(Cn, sDBName) Then
SQLDropDatabase = True
Exit Function
End If
Dim sDB As String
sDB = SQLGetCurrentDatabaseName(Cn)
sSQL = "Use master"
Cn.Execute sSQL
sSQL = "DROP DATABASE " & sDBName
Cn.Execute sSQL
sSQL = "USE " & sDB
Cn.Execute sSQL
SQLDropDatabase = True
Exit Function
errSQLDropDatabase:
On Error Resume Next
sSQL = "USE " & sDB
Cn.Execute sSQL
SQLDropDatabase = False
End Function
三、性能比较及应用说明
用VB开发基于sql server(WINDOWS平台上强大的数据库平台)
的数据库系统,以上几种访问sql server(WINDOWS平台上强大的数据库平台)
的方法各有各的特点。DAOs方法是基于对象的,因而便于使用,但是它是从Visual Basic到sql server(WINDOWS平台上强大的数据库平台)
最慢的连接方式。ODBC API和VBSQL方法从本质上讲是基于程序的。ODBC API方法通用性好,允许最强的互操作性,编程简单,但速度慢于VBSQL方法。VBSQL方法通过VBSQL控件,提供了重要的sql server(WINDOWS平台上强大的数据库平台)
前
端应用程序所需的灵活性、强大功能和良好性能。它具有真正的事件驱动及错误处理能力,完全支持异步处理、游标和计算列等。这些都是VBSQL方法超出其它
方法的优势,但其编程稍复杂。RDO是位于ODBC API之上的一个对象模型层,它依赖ODBC
API、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(WINDOWS平台上强大的数据库平台)
和Oracle(大型网站数据库平台)
而特别设计的。RDO的优势在于它完全被集成在VB之中,可直接访问sql server(WINDOWS平台上强大的数据库平台)
存
储过程、完全支持T-SQL、T-SQL调试集成在开发环境中、Visual Database
Tools的集成化等。但微软已宣布今后不再对VBSQL/DBLib进行升级,而ODBC
API函数一般的编程方式也不为人们所喜爱,RDO的应用将逐渐减少。至于实际使用哪一种接口方式,在很大程度上依赖于用户的应用程序的具体情况而定。
四、VisualBasic访问数据库的前景
近来随着Web应用软件的迅速发展和现有数据存储形式的多种多样,Visual
Basic访问数据库的解决方案面临诸如快速提取分布于企业内部和外部有用商业信息等的多种挑战。为此Microsoft提出一种新的数据库访问策略,即
“统一数据访问”(UniversalDataaccess(小型网站之最爱)
)的策略。“统一数据访问”提供了高性能的存取包括关系型和非关系型在内的多种数据源,提供独立于开发工具和开发语言的简单的编程接口,这些技术使得企业集成多种数据源、选择更好的开发工具、应用软件、操作平台、建立容易维护的解决方案成为可能。
“统一数据访问”的基础是Microsoft的数据访问组件。这些组件包括ActiveXDataObjects(ADO)、RemoteDataService(RDS,也称“高级数据连接器或”ADC)、OLEDB和ODBC。
参考文献
[1] 宋琦凡,付敬平.使用Visual Basic开发数据库应用软件.北京:电子工业出版社,1996
[2] Evangelos Petroutsos. Visual Basic5从入门到精通.北京:电子工业出版社,1997
[3] 孟小峰.开放数据库互连—ODBC 2.0使用大全.北京:清华大学出版社,1995
[4] 廖卫东,赵军.Visual Basic编程手册.北京:机械工业出版社,1996
[5] 电脑编程技巧与维护. 1999年第5期
###########################################################################################
在access(小型网站之最爱)
2000 数据库中,为了安全起见,可以为所建的数据库设置密码。但是,密码忘了怎么办?别急,这里介绍一种密码破解方法。
用磁盘编辑工具打开access(小型网站之最爱)
2000 所建的数据库,在库文件的地址00000042处开始的40个字节是access(小型网站之最爱)
2000库的密码位。如果一个未加密的库,这40个字节原始数据依次为:29 77 EC 37 F2 C8 9C FA 69 D2 28 E6
BC 3A 8A 60 FB 18 7B 36 5A FE DF B1 D8 78 13 43 60 23 B1 33 9B ED 79 5B
3D 39 7C 2A 。当你给数据库设置了密码后,这40个字节就变成了密钥。因此,要破解密码而不需保持原库的密码,只要将00000042
处开始的40个字节还原成原始数据就行了。要做到这一点,你可用磁盘编辑工具或将以下所附的程序稍加修改,把以上所列40个数据填到00000042开始
处。
但是,有没有办法既能破解密码又能保持原密码呢?有。要做到这一点,必须搞清楚access(小型网站之最爱)
2000库的加密原理。事实上,access(小型网站之最爱)
2000库的加密原理很简单。当你设置了密码后,access(小型网站之最爱)
2000
就将你的密码(请注意你所输入的密码是ASCII字符)的ASCII码与以上的40个字节数据进行异或操作,因此,从库文件的地址00000042开始的
40个字节就变成了密钥了。例如,如果你设置的密码为12345678901234567890(注意:最多只能设20个ASCII字符),经过异或操作
后,则从00000042处开始的40个字节的数据就变成了 18 77 DE 37 C1 C8 A8 FA 5C D2 1E E6 8B 3A
B2 60 C2 18 4B 36 6B FE ED B1 EB 78 27 43 55 23 87 33 AC ED 41 5B 04 39
4C 2A 。大家都知道,一个数据经过一次异或操作后,再一次经过同样的异或操作就可还原了。因此,对已经设置了密码的access(小型网站之最爱)
2000库,只要将40个密钥数据与原始的40个数据进行一次异或操作就可得到密码了。
顺便提一下,由于access(小型网站之最爱)
2000对每个密码字符采用双字节表示,故40个字节原始数据可依次分为20组,每组代表一个密码字符,进行异或操作的是每组的第一个字节,第二个字节不变。
###########################################################################################
(小型网站之最爱)数据库技术(48)(图一)" />
###########################################################################################
纵观数据库发展,三大数据库巨头公司纷纷推出其最新产品,数据库市场竞争日益加剧。从最新的IDC报告显示,在关系数据库管理系统(RDBMS)软件市场上,Oracle(大型网站数据库平台 ) 继续领先对手IBM和微软,但是微软在2006年取得了更快的销售增长率……
根据对数据库发展的技术趋势不难看出,整个数据库发展呈现出了三个主要特征:
支持xml(标准化越来越近了) 数据格式
IBM公司在它新推出的DB2 9版本中,直接把对xml(标准化越来越近了) 的支持作为其新产品的最大卖点,号称是业内第一个同时支持关系型数据和xml(标准化越来越近了) 数据的混合数据库,无需重新定义xml(标准化越来越近了) 数据的格式,或将其置于数据库大型对象的前提下,IBM DB2 9允许用户无缝管理普通关系数据和纯xml(标准化越来越近了) 数据。
对于传统关系型数据与层次型数据的混合应用已经成为了新一代数据库产品所不可或缺的特点。除了IBM,Oracle(大型网站数据库平台) 和微软也同时宣传了它们的产品也可以实现高性能xml(标准化越来越近了) 存储与查询,使现有应用更好的与xml(标准化越来越近了) 共存。
商业智能成重点
为应对日益加剧的商业竞争,企业不断增加内部IT及信息 系统,使企业的商业数据成几何数量级不断递增,如何能够从这些海量数据中获取更多的信息,以便分析 决策将数据转化为商业价值,就成为目前数据库厂商关注的焦点。各数据库厂商在新推出的产品中,纷纷表示自己的产品在商业智能方面有很大提高。如:微软最新版sql server(WINDOWS平台上强大的数据库平台) 2005就集成了完整的商业智能套件,包括数据仓库、数据分析、ETL工具、报表及数据挖掘等,并有针对性的做了一些优化。如何更好的支持商业智能将是未来数据库产品发展的主要趋势之一。
SOA架构支持
SOA已经成为目前IT业内的一个大的发展趋势,最初IBM和BEA是该理念的主要推动者,后来有越来越多的企业加入,开始宣称支持SOA,其中包括Oracle(大型网站数据库平台) ,而微软开始并不是非常赞同SOA的,但是,随着时间的发展,目前国内主流的数据库厂商都开始宣称他们的产品是完全支持SOA架构的,包括微软的sql server(WINDOWS平台上强大的数据库平台) 2005,从微软态度的转变可以看出,未来IT业的发展与融合,SOA正在成长为一个主流的趋势。
并且为了扩大宣传和抢占更多的中小企业市场,各主流数据库厂商还纷纷推出一些提供简单功能的免费数据库产品。
###########################################################################################
(小型网站之最爱)数据库技术(43)(图一)" />
(小型网站之最爱)数据库技术(43)(图二)" />
(小型网站之最爱)数据库技术(43)(图三)" />
(小型网站之最爱)数据库技术(43)(图四)" />
(小型网站之最爱)数据库技术(43)(图五)" />
(小型网站之最爱)数据库技术(43)(图六)" />
(小型网站之最爱)数据库技术(43)(图七)" />
(小型网站之最爱)数据库技术(43)(图八)" />
(小型网站之最爱)数据库技术(43)(图九)" />
(小型网站之最爱)数据库技术(43)(图十)" />
(小型网站之最爱)数据库技术(43)(图十)" />
(小型网站之最爱)数据库技术(43)(图十二)" />
(小型网站之最爱)数据库技术(43)(图十三)" />
###########################################################################################
6.2 客户机程序1—连接到服务器
我们的第一个MySQL(和PHP搭配之最佳组合)
客户机程序很简单:连接到服务器、断开,并退出。它本身并不是非常有用,但是必须知道如何做它,因为实际上用MySQL(和PHP搭配之最佳组合)
数据库做任何事情都必须与服务器连接。这是一个公用的操作,开发创建连接的代码是编写每个客户机程序都将使用的代码。除此之外,这项任务带给我们一些简单
开始的事情。以后,我们可以增加这个客户机来做一些更有用的事情。我们第一个客户机程序的源代码,客户机程序1,包括一个单独的文件,
client.c:
(和PHP搭配之最佳组合)数据库技术(30)(图一)" /> 数据库中的表与我们日常生活中使用的表格类似,它也是由行(Row) 和列(Column)组成的。图3-1 中黑底白字的部分称为行,图3-2 中黑底白字的部分称为列。列由同类的信息
组
成,每列又称为一个字段,每列的标题称为字段名。行包括了若干列信息项。一行数据称为一个或一条记录,它表达有一定意义的信息组合。一个数据库表由一条或
多条记录组成,没有记录的表称为空表。每个表中通常都有一个主关键字,用于惟一地确定一条记录,如图3-1 中的emp_id 列。图3-1
中的第一条记录,即第一行数据所表达的信息为:编号为10010001 的员工叫张三,性别男,出生于1968 年2 月14 日,工作级别为1 ,工
作部门编号为1001, 受雇日期是1996 年8 月2 日,月工资是8000 元。
点击查看大图
3.3.2 索引(Index)
索引是根据指定的数据库表列建立起来的顺序。它提供了快速访问数据的途径,并且可监督表的数据,使其索引所指向的列中的数据不重复。如图3-3 所示。
3.3.3 视图(View)
视图看上去同表似乎一模一样,具有一组命名的字段和数据项,但它其实是一个虚拟的表,在数据库中并不实际存。在视图是由查询数据库表产生的,它限制了用户
能看到和修改的数据。由此可见,视图可以用来控制用户对数据的访问,并能简化数据的显示,即通过视图只显示那些需要的数据信息。例如:
从图3-2 中抽取字段员工编号emp_id、员工姓名e_name、员工部门编号dept_id、员
工工资e_wage 组成一个员工工资信息表。如图3-4 所示。
点击查看大图
从图3-2 中抽取数据组成工作级别(job_level)为2 的员工信息表。如图3-5 所示。
点击查看大图
3.3.4 图表(Diagram)
在sql server(WINDOWS平台
上强大的数据库平台)
中图表其实就是数据库表之间的关系示意图。利用它可以编辑表与表之间的关系。如图3-6 所示。
3.3.5 缺省值(Default)
缺省值是当在表中创建列或插入数据时,对没有指定其具体值的列或列数据项赋予事先设定好的值。如图3-7 所示。
3.3.6 规则(Rule)
规则是对数据库表中数据信息的限制。它限定的是表的列。如图3-8 所示。
3.3.7 触发器(Trigger)
触发器是一个用户定义的SQL 事务命令的集合。当对一个表进行插入、更改、删除时,这组命令就会自动执行。如图3-9 所示。
3.3.8 存储过程(Stored Procedure)
存储过程是为完成特定的功能而汇集在一起的一组SQL 程序语句,经编译后存储在数据库中的SQL 程序。如图3-10 所示。
3.3.9 用户(User)
所谓用户就是有权限访问数据库的人。
数据库对象还有很多
###########################################################################################







评论排行榜