用ADO管理SQL Server数据库

ado|server|sql|数据|数据库

  微软公司的SQLServer是目前小型网络中常用的数据库管理系统之一。面向这种网络数据库的应用程序也在日益增多,这种网络数据库应用系统的正常运行,一般都依赖于已经存在的用户数据库。创建数据库的工作当然可以用SQL Server提供的SQL EnterpriseManager工具来完成,但是,如果能够提供一种定制的数据库管理工具,专门管理应用系统需要的数据库及其设备,对用户来说无疑更加理想。
    现存问题

    我们知道,在使用CREATEDATABASE语句创建一个数据库之前,必须存在一个有剩余空间的数据库设备,或者事先使用DISKINIT语句创建一个新设备。但是这些语句含有很多必需的参数,而且如果不使用SQLServer的管理工具,很多参数值往往难以确定。

    以创建数据库设备的DISKINIT语句为例,这个语句的完整语法如下:

    DISKINITNAME=‘logical_name',PHYSNAME=‘physical_name',VDEVNO=virtual_device_number,SIZE=number_of_2K_blocks[,VSTART=virtual_address]

    其中NAME和SIZE这两个参数都很容易得到,麻烦的是物理名PHYSNAME和虚拟设备号VDEVNO这两个参数。前者要求是一个服务器上的物理文件全路径名;后者要求在1~255之间找一个没有被别的设备占用的号码。而在编写数据库管理程序时,用户的服务器上有哪些设备号已经被占用, SQLServer装在哪个驱动器上,都是无法预料的。

    虽然,使用SQLServer的管理工具SQLEnterpriseManager,可以非常方便地创建、删除数据库设备,或者扩大一个已经存在的数据库,也可以非常方便地创建、删除或者修改一个数据库,但是,这个工具仍然要求我们输入很多不太常用的参数,界面稍显复杂。

    所以,理想的情况是:用户只需要按下一个命令按钮,应用程序需要的数据库及其设备都能立即自动地创建好。

    解决方案

    为了实现这样的目标,我们必须想办法解决SQL语句中的参数设置问题。

    1.创建设备的语句参数

    创建设备的语句即前面提到的DISKINIT语句。

    为了简化问题,我们可以指定与数据库名相同的设备文件名,并将设备文件保存在master设备所在的子目录中。数据库名是在设计应用程序时已经确定;而master设备所在的子目录,可以从系统表sysdevices中查询得到。这样,设备文件的物理名参数就确定下来了。

    虚拟设备号的问题则比较复杂,因为sysdevices系统表中没有“虚拟设备号”这样一个字段,因此,必须另想办法。

    对SQLServer的系统存储过程sp_helpdevice进行分析之后,我们发现,虚拟设备号是“隐藏”在sysdevices系统表的low 字段中的,借助另一个系统表spt_values,可以找到每个设备的虚拟设备号。这样,我们只需要在一个循环中找一下某个设备号是否存在于 sysdevices中,就可以
确定我们现在可用的虚拟设备号。

    至于数据库设备的大小,我们不妨设得大一些,或者让用户指定一下也可以。

    2.创建数据库的语句参数

    创建数据库的语句如下:

    CREATEDATABASEdatabase_name[ON{DEFAULT|database_device}[=size][,database_device[=size]]...]
    [LOGONdatabase_device[=size][,database_device[=size]]...][FORLOAD]

    其中,大部分参数都是可选的,我们只需要指定一个设备名及数据库的大小即可,而数据库名、设备名、大小在创建设备的时候已经确定好了,所以,这个语句的参数不存在问题。

    具体实现

    使用普通的应用开发工具VisualBasic,我们就可以实现一个定制的数据库管理程序。

    为了实现与数据库服务器的连接,我们必须选择一种数据库访问接口。虽然从VB访问SQLServer
有很多接口可供选择,但微软最新的数据库访问接口 ADO(ActiveDataObjects)无疑是最有前途的,因为它为基于浏览器的数据库应用系统的实现提供了可能性。

    以下是一些用于数据库及其设备管理的常用函数。

    1.取当前的工作数据库 ----由于管理任务一般都必须在master库中完成,因此,在执行管理任务之前,最好保存当前工作库,以便完成任务之后再切换回去。

    PublicFunctionSQLGetCurrentDatabaseName(CnAsADODB.Connection)AsStringDimsSQLAsStringDimRSAsNewADODB.Recordset
    OnErrorGoToerrSQLGetCurrentDatabaseNamesSQL=“selectCurrentDB=DB_NAME()"RS.OpensSQL,
    CnSQLGetCurrentDatabaseName=Trim$(RS!CurrentDB) RS.CloseExitFunctionerrSQLGetCurrentDatabaseName:SQLGetCurrentDatabaseName
=“"EndFunction

    2.判断一个数据库设备是否存在

    PublicFunctionSQLExistDeviceName(CnAsADODB.Connection,sDevNameAsString)AsBoolean

    '--按照名称判断一个设备是否存在,如果存在,返回1,否则返回0
    DimsSQLAsStringDimRSAsNewADODB.RecordsetDimbTmpAsBooleanOnError
GoToerrSQLExistDeviceNamesSQL=“
    selectCntDev=count(*)frommaster.dbo.sysdeviceswherename=‘“&sDevName&”'"RS.OpensSQL,CnIfRS!CntDev=0ThenbTmp=FalseElsebTmp=
    TrueRS.CloseSQLExistDeviceName=bTmpExitFunctionerrSQLExistDeviceName:

    SQLExistDeviceName=FalseEndFunction

    3.判断一个虚拟设备号是否被占用:SQLExistDeviceNumber。

    4.找一个最小的尚未被占用的虚拟设备号:SQLGetUnusedDeviceNumber。

    5.取得SQLServer安装目录下的DATA子目录路径:SQLGetDataPath。

    6.创建一个新设备:SQLCreateDevice。

    7.创建一个新的数据库:SQLCreateDatabase65。

    8.取数据库设备的详细信息:SQLGetDeviceInfo。

    9.扩大数据库设备的尺寸:SQLExpandDevice。

    数据库应用系统在运行一段之后,数据量的增大往往要求数据库增大,进而要求扩大设备尺寸。可惜DISKRESIZE语句要求的尺寸参数为扩大后的新尺寸,而非需要增加的尺寸。所以,必须事先查到设备的原有尺寸,才能使用DISKRESIZE语句。

    10.判断一个数据库是否存在:SQLExistDatabase。

    11.删除一个数据库:SQLDropDatabase。

    12.删除一个数据库设备:SQLDropDevice。

    13.取SQLServer的版本信息:SQLGetVersionString。

    在即将发行的SQLServer7.0中,不再有数据库设备的概念,创建数据库也将变得更加简单。在创建特定的用户数据库时,为了区分不同的版本进行不同的操作,取得SQLServer的版本是非常重要的。

时间: 2024-10-09 02:12:25

用ADO管理SQL Server数据库的相关文章

用ADO管理SQL Server数据库及其设备

    微软公司的SQL Server是目前小型网络中常用的数据库管理系统之一.面向这种网络数据库的应用程序也在日益增多,这种网络数据库应用系统的正常运行,一般都依赖于已经存在的用户数据库.创建数据库的工作当然可以用SQL Server提供的SQL Enterprise Manager工具来完成,但是,如果能够提供一种定制的数据库管理工具,专门管理应用系统需要的数据库及其设备,对用户来说无疑更加理想. 现存问题 我们知道,在使用CREATE DATABASE语句创建一个数据库之前,必须存在一个有

用asp管理sql server数据库

安装有sql server的主机有一个ole对象:sqlole, 可以实现对sql server数据库的管理. 下面的简单的例子,列出所有数据库的名字. 具体使用参看sql server手册.<%Set OServer = Server.CreateObject("sqlole.sqlserver")OServer.Connect sServer,sLogin,sPasswordFor Each SQLDB In OServer.Databases    If Not SQLDB

管理SQL Server数据库和应用元数据

问题 我常被问到如何把驻留在物理服务器/SQL 实例上的数据库转变为它们相应的应用程序名称.在准备计划好的服务器停机通知时,这种需要就产生了,但在我的组织内与IT经理或非技术人员沟通时,这也是有价值的.如果你不是数据库管理员或特定数据库的应用分析师,你通常会无视数据库的命名规则,而这些数据库支持着你每日依赖的应用程序.这就是为什么当需要产生时在适当的位置上由元数据库来提供转化很重要. 专家解答 大部分数据库管理员拥有某种形式的数据库元数据库,他们依赖其来跟踪范围很广的Microsoft SQL

sql server-JS 连接 SQL SERVER 数据库 点了没有任何反应,也不报错。

问题描述 JS 连接 SQL SERVER 数据库 点了没有任何反应,也不报错. //连接数据库 function getConnection(){ var user = document.getElementById("fillqueryuser"); var port = document.getElementById("port"); var host = document.getElementById("host"); var pwd =

《SQL Server企业级平台管理实践》读书笔记——关于SQL Server数据库的备份方式

原文:<SQL Server企业级平台管理实践>读书笔记--关于SQL Server数据库的备份方式 数据备份一直被认为数据库的生命,也就是一个DBA所要掌握的主要技能之一,本篇就是介绍SQL Server备份原则,SQL Server数据库分为数据文件和日志文件.为了使得数据库能够恢复一致点,备份不仅需要拷贝数据数据文件里的内容,还要拷贝日志文件里的内容.那么根据每次备份的目标不同,我们可以将备份分为数据备份和日志备份. 数据备份的范围可以是完整的数据库.部分数据库.一组文件或文件组.所以根

《SQL Server企业级平台管理实践》读书笔记——SQL Server数据库文件分配方式

原文:<SQL Server企业级平台管理实践>读书笔记--SQL Server数据库文件分配方式 1.文件分配方式以及文件空间检查方法 最常用的检查数据文件和表大小的命令就是:sp_spaceused 此命令有三个缺陷:1.无法直观的看出每个数据文件和日志文件的使用情况.2.这个存储过程依赖SQL Server存储在一些系统视图里的空间使用统计信息计算出的结果,如果没有更新空间统计信息,比如刚刚发生大数据插入,sp_spaceused的结果就不准确.3.这个命令主要是针对普通用户的数据库,对

ado 链接sql server-c++利用ADO如何通过Internet网访问SQL Server数据库?

问题描述 c++利用ADO如何通过Internet网访问SQL Server数据库? c++利用ADO如何通过Internet网访问SQL Server数据库?需要对电脑设置哪些关键的项. 我的代码:bstr_t strConnect = "Driver={SQL Server};Server=10.0.0.44;Database=test;UID=sa;PWD=111111" //_bstr_t strConnect = "Provider=SQLOLEDB.1;Passw

改善SQL Server数据库的内存管理方法

最近,为了能在数据库服务器中运行其他应用程序,在保持数据库操作系统版本不变的前提下对数据库服务器进行了软.硬件上的升级.在软件上,将操作系统从Windows 2000升级到Windows Server 2003:在硬件上,将服务器中的内存由原来的512MB增加到1GB(1024MB). 在升级后的开始几个星期之内,服务器在使用中表现良好.但是不久后就发现,在服务器上同时运行的其他应用程序却出现了异常,不时地报出内存分配不足的警告.经过几次跟踪后发现,原来是SQL Server吞去了大部分内存所致

ado连接sql数据库-求大神帮忙,ado连接数据库sql server 2005,总是失败

问题描述 求大神帮忙,ado连接数据库sql server 2005,总是失败 #include #include #include #include #import "C:Program FilesCommon FilesSystemadomsado15.dll" no_namespace rename("EOF","ADOEOF") int main() { if(!AfxOleInit()) { AfxMessageBox("ca