扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
来源:Yesky 2007年10月23日
关键字:设备 数据库 SQL Server ADO
DISK INIT NAME =‘logical_name, PHYSNAME =‘physical_name, VDEVNO = virtual_device_number, SIZE = number_of_2K_blocks [, VSTART = virtual_address] |
解决方案
为了实现这样的目标,我们必须想办法解决SQL语句中的参数设置问题。
1.创建设备的语句参数
创建设备的语句即前面提到的DISK INIT语句。
为了简化问题,我们可以指定与数据库名相同的设备文件名,并将设备文件保存在master设备所在的子目录中。数据库名是在设计应用程序时已经确定;而master设备所在的子目录,可以从系统表sysdevices中查询得到。这样,设备文件的物理名参数就确定下来了。
虚拟设备号的问题则比较复杂,因为sysdevices系统表中没有“虚拟设备号”这样一个字段,因此,必须另想办法。
对SQL Server的系统存储过程sp_helpdevice进行分析之后,我们发现,虚拟设备号是“隐藏”在sysdevices系统表的low字段中的,借助另一个系统表spt_values,可以找到每个设备的虚拟设备号。这样,我们只需要在一个循环中找一下某个设备号是否存在于sysdevices中,就可以确定我们现在可用的虚拟设备号。
至于数据库设备的大小,我们不妨设得大一些,或者让用户指定一下也可以。
CREATE DATABASE database_name [ON {DEFAULT | database_device} [= size] [, database_device [= size]]...] [LOG ON database_device [= size] [, database_device [= size]]...] [FOR LOAD] |
其中,大部分参数都是可选的,我们只需要指定一个设备名及数据库的大小即可,而数据库名、设备名、大小在创建设备的时候已经确定好了,所以,这个语句的参数不存在问题。
具体实现
使用普通的应用开发工具Visual Basic,我们就可以实现一个定制的数据库管理程序。
为了实现与数据库服务器的连接,我们必须选择一种数据库访问接口。虽然从VB访问SQL Server有很多接口可供选择,但微软最新的数据库访问接口ADO(Active Data Objects)无疑是最有前途的,因为它为基于浏览器的数据库应用系统的实现提供了可能性。
以下是一些用于数据库及其设备管理的常用函数。
1.取当前的工作数据库
由于管理任务一般都必须在master库中完成,因此,在执行管理任务之前,最好保存当前工作库,以便完成任务之后再切换回去。
Public Function SQLGetCurre ntDatabaseName(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 |
Dim sSQL As String Dim RS As New ADODB.Recordset Dim bTmp As Boolean On Error GoTo errSQLExistDeviceName sSQL =“select CntDev=count(*) from master.dbo.sysdevices where name =‘“& sDevName&”" RS.Open sSQL, Cn If RS!CntDev = 0 Then bTmp = False Else bTmp = True RS.Close SQLExistDeviceName = bTmp Exit Function errSQLExistDeviceName: SQLExistDeviceName = False End Function |
3.判断一个虚拟设备号是否被占用:SQLExistDeviceNumber。
编者注:函数源代码发表在以下站点上,地址。欢迎访问!
4.找一个最小的尚未被占用的虚拟设备号:SQLGetUnusedDeviceNumber。
5.取得SQL Server安装目录下的DATA子目录路径:SQLGetDataPath。
6.创建一个新设备:SQLCreateDevice。
7.创建一个新的数据库:SQLCreateDatabase65。
8.取数据库设备的详细信息:SQLGetDeviceInfo。
9.扩大数据库设备的尺寸:SQLExpandDevice。
数据库应用系统在运行一段之后,数据量的增大往往要求数据库增大,进而要求扩大设备尺寸。可惜DISK RESIZE语句要求的尺寸参数为扩大后的新尺寸,而非需要增加的尺寸。所以,必须事先查到设备的原有尺寸,才能使用DISK RESIZE语句。
10.判断一个数据库是否存在:SQLExistDatabase。
11.删除一个数据库:SQLDropDatabase。
12.删除一个数据库设备:SQLDropDevice。
13.取SQL Server的版本信息:SQLGetVersionString。
在即将发行的SQL Server 7.0中,不再有数据库设备的概念,创建数据库也将变得更加简单。在创建特定的用户数据库时,为了区分不同的版本进行不同的操作,取得SQL Server的版本是非常重要的。
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。