分享
 
 
 

SQLServer数据对象结构的动态建立

王朝mssql·作者佚名  2008-05-19
窄屏简体版  字體: |||超大  

Microsoft SQL Server与ORACAL、Sybase都是当前比较流行的数据库管理系统(RDMS),随着SQL Server的不断完善与发展,以及与网络操作系统Windows NT的完美结合,它为分布式客户服务器结构程序设计提供了良好的开发环境,也因此越来越受到人们的重视。

Microsoft SQL Server是一个可缩放、高性能的数据库管理系统,它提供了与Windows NT线程和调度服务、性能监视器和事件浏览器的集成,基于Windows管理界面并提供对多个服务器上的远程数据复制管理、服务器管理、诊断和调整的可视化拖放控制。

分布式管理对象(DMO)为SQL Server引擎和服务提供了一个对象接口。SQL-DMO是为Windows 95与 Windows NT操作系统提供的32位OLE自动化对象,OLE是维护应用程序共享对象的标准和方法,是一种允许应用程序为进行管理或数据访问共享对象的编程方法。DMO是利用OLE结构开发的,它为与OLE兼容的应用程序提供了通向所有SQL Server管理功能的接口,DMO使软件开发者直接访问SQL Server数据对象变成可能。我们利用Visual Basic与Visual FoxPro等编程工具就可以使用分布式管理对象实现对SQL Server的直接访问。

Microsoft SQL Server所提供的工具使客户端能通过多种方法访问服务器上的数据,这些工具的核心部分即是Transact-SQL(事务SQL)代码。Transact-SQL是结构化查询语言( SQL)的增强版本,它提供了许多附加的功能和函数。利用Transact-SQL,你可以创建数据库设备、数据库和其它数据对象、从数据库中提取数据、修改数据,也可以动态地改变SQL Server中的设置。因此,使用Transact-SQL大大地提高了应用程序的实用性。

当我们进行Client/Server结构项目开发时需要建立若干个数据对象的结构,如果所开发的项目是面向某个具体的客户时,在Server上手工建立数据库设备、数据库与表是可行的,但是如果所开发的项目是作为软件发行而非面向某个具体的客户时,无疑,手工建立数据对象的结构是不现实的,我们需要将创建数据库与表的过程固化在程序中,当程序运行时动态地在Server上建库与表。因此,利用分布式管理对象与Transact-SQL是进行Client/Server结构程序设计的重要手段。

下面将讨论如何在Visual Basic 5.0中利用DMO与Transact-SQL在SQL Server上建立数据库设备、数据库及其他数据对象。我们从具体问题着手:在SQL Server上建立200M与400M的数据库设备Device_1、Device_2,在Device_1与Device_2上分别建立容量为100M的两个数据库Db1与Db2,在Db1库中建立表T_1,有四个域:Name,Age,Sex,ID_Code,以ID_Code为关键字,以Name为索引,在Db2库中建立表T_2,有五个域:Name、Age、Sex、Department、No,以Department与No为关键字。

访问SQL Server,首先要打开SQL Service Manager,SQL Service Manager 用于启动、暂停、继续、停止SQL Server的服务,包括MSSQLServer与SQLExecutive两项。可以通过手工方式打开这两项服务,也可以在程序中通过行命令式打开它们。

若采用手工方式,则打开SQL Service Manager,对于其中的服务MSSQLServer与SQLExecutive,直接启动它们的Start/Continue绿灯即可。

采用行命令启动方式,可利用VB的Shell命令:

X=shell("Sqlmgr.exe",1) 显示SQL Service Manager窗口;

X=shell("net start mssqlserver") 启动MSSQLServer服务

X=shell("net start sqlexecutive") 启动SQLExecutive服务

因为在这里我们希望通过编程在SQL Server上实现数据对象结构的动态建立,因此建议使用行命令方式。

启动了SQL Server Manager后,我们就可以利用DMO与Transact-SQL按以下步骤来建数据对象了。

1.为能使用DMO,首先需要打开VB工具栏中Reference(引用),选择Microsoft Windows Common Control 5.0,如果在引用栏中没有发现此项,则选择Browse(浏览),将WINNTSystem32目录下的Comctl32.oca加入到Reference中来。

2.在模块文件(.BAS)中建立SQLOLE对象:

Global OServer as New SQLOLE.SQLServer

3.建立与SQL Server的连接:

OServer.Connect ServerName:=注册的SQL Server名,Login:=登录名(一般为sa),Password:=密码

4.建数据库设备Device_1与Device_2:

dim transql as string

transql="use master" & _

"DISK INIT" & _

"Name='Device_1'," & _

"Physname='D:SQLdatadevice1.dat'," & _

"vdevno=10," & _

"size=102400" & _

"DISK INIT" & _

"Name='Device2'," & _

"Physname='D:SQLdatadevice2.dat'," & _

"vdevno=11," & _

"size=204800"

OServer.ExecuteImmediate Command:=transql,exectype:=SQLOLEExec_Default

5.建数据库Db_1与Db_2:

transql = "CREATE DATABASE Db_1 ON Device_1=100 "

OServer.ExecuteImmediate Command:=transql, exectype:=SQLOLEExec_Default

transql = "CREATE DATABASE Db_2 ON Device_2=100 "

OServer.ExecuteImmediate Command:=transql, exectype:=SQLOLEExec_Default

6.在数据库中建表:

在数据库Db_1上建表T_1:

transql = "use Db_1 " & _

"create table T_1 " & _

"(Name char(8) null, " & _

" Age numeric(2) null, " & _

" Sex smallint null, " & _

" ID_Code char(16) not null, " & _

" constraint c_1 primary key clustered (ID_Code))"

OServer.ExecuteImmediate Command:=transql,exectype:=SQLOLEExec_Default

建表T_1的Name列的索引:

transql="CREATE INDEX index_1 ON T_1 (Name)"

OServer.ExecuteImmediate Command:=transql,exectype:=SQLOLEExec_Default

在数据库Db_2上建表T_2:

transql = "use Db_2 " & _

"create table T_2 " & _

"(Name char(8) null, " & _

" Age numeric(2) null, " & _

" Sex smallint null, " & _

" Department char(16) not nill, " & _

" No char(4) not null," & _

"constraint c_2 primary key clustered (Department,No))"

OServer.ExecuteImmediate Command:=transql, exectype:=SQLOLEExec_Default

此时,我们完成了建立数据对象的编码工作,程序被编译执行后,就会在SQL Server上自动建立数据库设备、数据库及库中的表。

对于数据库设备,可以用DISK REINIT,DISK REFIT,DISK RESIZE对它进行操作,如要扩展数据库设备Device_1的容量为200M,可利用如下方法:

DISK RESIZE

Name='Devive_1',

Size = 102400

对于SQL Server上已经建立的数据库及表的结构,也可以通过DMO与事务SQL进行修改与删除。类似于上面的编码,可以利用Alter Database Db_1,Alter DatabaseDb_2,Alter Table T_1,Alter Table T_2等事务SQL语句进行对所建立的数据库与表的的结构进行修改,而利用Drop Database, Drop Table事务语句删除所建立的数据库与表。

以上讨论了如何在SQL Server上动态地建立与访问数据对象的结构,至于对SQL Server上数据库与表的内容的访问,可以利用ODBC(开放数据库互连)、DAO(数据访问对象)、RDO(远程数据对象)或DB-Library进行编程。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有