Microsoft SQL Server与ORACALSybase都是当前比较流行的数据库管理系统(RDMS)随着SQL Server的不断完善与发展以及与网络操作系统Windows NT的完美结合它为分布式客户服务器结构程序设计提供了良好的开发环境也因此越来越受到人们的重视
Microsoft SQL Server是一个可缩放高性能的数据库管理系统它提供了与Windows NT线程和调度服务性能监视器和事件浏览器的集成基于Windows管理界面并提供对多个服务器上的远程数据复制管理服务器管理诊断和调整的可视化拖放控制
分布式管理对象(DMO)为SQL Server引擎和服务提供了一个对象接口SQLDMO是为Windows 与 Windows NT操作系统提供的位OLE自动化对象OLE是维护应用程序共享对象的标准和方法是一种允许应用程序为进行管理或数据访问共享对象的编程方法DMO是利用OLE结构开发的它为与OLE兼容的应用程序提供了通向所有SQL Server管理功能的接口DMO使软件开发者直接访问SQL Server数据对象变成可能我们利用Visual Basic与Visual FoxPro等编程工具就可以使用分布式管理对象实现对SQL Server的直接访问
Microsoft SQL Server所提供的工具使客户端能通过多种方法访问服务器上的数据这些工具的核心部分即是TransactSQL(事务SQL)代码TransactSQL是结构化查询语言( SQL)的增强版本它提供了许多附加的功能和函数利用TransactSQL你可以创建数据库设备数据库和其它数据对象从数据库中提取数据修改数据也可以动态地改变SQL Server中的设置因此使用TransactSQL大大地提高了应用程序的实用性
当我们进行Client/Server结构项目开发时需要建立若干个数据对象的结构如果所开发的项目是面向某个具体的客户时在Server上手工建立数据库设备数据库与表是可行的但是如果所开发的项目是作为软件发行而非面向某个具体的客户时无疑手工建立数据对象的结构是不现实的我们需要将创建数据库与表的过程固化在程序中当程序运行时动态地在Server上建库与表因此利用分布式管理对象与TransactSQL是进行Client/Server结构程序设计的重要手段
下面将讨论如何在Visual Basic 中利用DMO与TransactSQL在SQL Server上建立数据库设备数据库及其他数据对象我们从具体问题着手在SQL Server上建立M与M的数据库设备Device_Device_在Device_与Device_上分别建立容量为M的两个数据库Db与Db在Db库中建立表T_有四个域NameAgeSexID_Code以ID_Code为关键字以Name为索引在Db库中建立表T_有五个域NameAgeSexDepartmentNo以Department与No为关键字
访问SQL Server首先要打开SQL Service ManagerSQL Service Manager 用于启动暂停继续停止SQL Server的服务包括MSSQLServer与SQLExecutive两项可以通过手工方式打开这两项服务也可以在程序中通过行命令式打开它们
若采用手工方式则打开SQL Service Manager对于其中的服务MSSQLServer与SQLExecutive直接启动它们的Start/Continue绿灯即可
采用行命令启动方式可利用VB的Shell命令
X=shell(Sqlmgrexe) 显示SQL Service Manager窗口
X=shell(net start mssqlserver) 启动MSSQLServer服务
X=shell(net start sqlexecutive) 启动SQLExecutive服务
因为在这里我们希望通过编程在SQL Server上实现数据对象结构的动态建立因此建议使用行命令方式
启动了SQL Server Manager后我们就可以利用DMO与TransactSQL按以下步骤来建数据对象了
为能使用DMO首先需要打开VB工具栏中Reference(引用)选择Microsoft Windows Common Control 如果在引用栏中没有发现此项则选择Browse(浏览)将\WINNT\System目录下的Comctloca加入到Reference中来
在模块文件(BAS)中建立SQLOLE对象
Global OServer as New SQLOLESQLServer
建立与SQL Server的连接
OServerConnect ServerName:=注册的SQL Server名Login:=登录名(一般为sa)Password=密码
建数据库设备Device_与Device_
dim transql as string
transql=use master & _
DISK INIT & _
Name=Device_ & _
Physname=D:\SQL\data\devicedat & _
vdevno= & _
size= & _
DISK INIT & _
Name=Device & _
Physname=D:\SQL\data\devicedat & _
vdevno= & _
size=
OServerExecuteImmediate Command:=transqlexectype:=SQLOLEExec_Default
建数据库Db_与Db_
transql = CREATE DATABASE Db_ ON Device_=
OServerExecuteImmediate Command:=transql exectype:=SQLOLEExec_Default
transql = CREATE DATABASE Db_ ON Device_=
OServerExecuteImmediate Command:=transql exectype:=SQLOLEExec_Default
在数据库中建表:
在数据库Db_上建表T_:
transql = use Db_ & _
create table T_ & _
(Name char() null & _
Age numeric() null & _
Sex smallint null & _
ID_Code char() not null & _
constraint c_ primary key clustered (ID_Code))
OServerExecuteImmediate Command:=transqlexectype:=SQLOLEExec_Default
建表T_的Name列的索引
transql=CREATE INDEX index_ ON T_ (Name)
OServerExecuteImmediate Command:=transqlexectype:=SQLOLEExec_Default
在数据库Db_上建表T_:
transql = use Db_ & _
create table T_ & _
(Name char() null & _
Age numeric() null & _
Sex smallint null & _
Department char() not nill & _
No char() not null & _
constraint c_ primary key clustered (DepartmentNo))
OServerExecuteImmediate Command:=transql exectype:=SQLOLEExec_Default
此时我们完成了建立数据对象的编码工作程序被编译执行后就会在SQL Server上自动建立数据库设备数据库及库中的表
对于数据库设备可以用DISK REINITDISK REFITDISK RESIZE对它进行操作如要扩展数据库设备Device_的容量为M可利用如下方法
DISK RESIZE
Name=Devive_
Size =
对于SQL Server上已经建立的数据库及表的结构也可以通过DMO与事务SQL进行修改与删除类似于上面的编码可以利用Alter Database Db_Alter DatabaseDb_Alter Table T_Alter Table T_等事务SQL语句进行对所建立的数据库与表的的结构进行修改而利用Drop Database Drop Table事务语句删除所建立的数据库与表
以上讨论了如何在SQL Server上动态地建立与访问数据对象的结构至于对SQL Server上数据库与表的内容的访问可以利用ODBC(开放数据库互连)DAO(数据访问对象)RDO(远程数据对象)或DBLibrary进行编程