zoukankan      html  css  js  c++  java
  • SQL Server数据对象结构的动态建立与访问

      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(浏览),将\WINNT\System32目录下的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:\SQL\data\device1.dat'," & _
    "vdevno=10," & _
    "size=102400" & _
    "DISK INIT" & _
    "Name='Device2'," & _
    "Physname='D:\SQL\data\device2.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进行编程。

  • 相关阅读:
    HDU3336 Count the string —— KMP next数组
    CodeForces
    51Nod 1627 瞬间移动 —— 组合数学
    51Nod 1158 全是1的最大子矩阵 —— 预处理 + 暴力枚举 or 单调栈
    51Nod 1225 余数之和 —— 分区枚举
    51Nod 1084 矩阵取数问题 V2 —— 最小费用最大流 or 多线程DP
    51Nod 机器人走方格 V3 —— 卡特兰数、Lucas定理
    51Nod XOR key —— 区间最大异或值 可持久化字典树
    HDU4825 Xor Sum —— Trie树
    51Nod 1515 明辨是非 —— 并查集 + 启发式合并
  • 原文地址:https://www.cnblogs.com/net66/p/199899.html
Copyright © 2011-2022 走看看