You are on page 1of 7

Installshield11.

5 创建 SQLserver 数据库

目的:仅介绍如何通过 IS 来创建数据库,是自己摸索 IS 的一点心得,并不推荐在实

际应用中使用这种方法。

限制:仅描述了在 IS 环境下,通过 SQL 脚本来建立数据库,没有包括其他建库手段,

比如说恢复。

重点:

介绍了通过 IS 如何联接数据库服务

介绍了如何在 IS 中加入脚本并执行

介绍了如何在安装包运行过程中替换脚本中的特定字符,来实现动态决定数据库的创

建路径

包含了部分脚本的使用说明

要求:基本掌握 IS,基本掌握 SQLserver。

说明:本人水平有限,在本文中为了说清楚问题,不保证所描述的内容是科学的,只

保证结果是正确的。
1 数据库简介

通常一个简单的 C/S 程序在发布时,要求在服务端将数据库一并创建到目标机器的

SQL 服务中。这时候,我们应该得到如下几个的建库脚本文件,或者是包含如下全部内

容的的脚本文件:
1.1 创建一个空数据库的脚本。
--创建数据库 IS_CreateDatabase
IF EXISTS (SELECT name FROM master.dbo.sysdatabases WHERE name =
N'IS_CreateDatabase')
DROP DATABASE [IS_CreateDatabase]
GO
CREATE DATABASE [IS_CreateDatabase] ON (NAME = N'Cactus_Data',
FILENAME = N'C:\IS_CreateDatabase.mdf' , SIZE = 102, FILEGROWTH = 10%)
LOG ON (NAME = N'Cactus_Log', FILENAME =
N'C:\IS_CreateDatabase_log.ldf' , SIZE = 6, FILEGROWTH = 5%)
GO
--结束

脚本说明:一个数据库实际上在本地硬盘对应两个物理文件,数据文件“.mdf”和日

志文件“.log”。在这个建库脚本中,这两个文件默认被创建在 C 盘根目录,我们在后面
的制作安装包中,会讲解如何在运行时更改这个路径
1.2 在这个数据库中建表,建视图,建存储过程的脚本。
--创建两个表
USE [IS_CreateDatabase]
GO
CREATE TABLE [dbo].[IS_TESTTABLE] (
[id] [int] IDENTITY (1, 1) NOT NULL ,
[name] [varchar] (100) ,
[old] [int] ,
[memo] [varchar] (100)
) ON [PRIMARY]
GO
--在这里可添加建视图脚本,建存储过程脚本
--建表结束
1.3 在这个数据库中插入程序运行的基本数据,也就是初始化数据。
--初始化数据
USE [IS_CreateDatabase]
GO
INSERT INTO IS_TESTTABLE([name],old,memo) VALUES('IS 使用者',30,'SQL
建库测试')
GO
--初始化结束
2 开始 IS 历程

这里不对每一步骤进行详细说明了,只在和 SQL 有关的地方进行解释,不明白的地

方请参考论坛中的《IS 入门指南》
2.1 建立新工程

这里依然使用 InstallScript
llScript MSI Project 工程类型,是出于本人的习惯,具体也解释不

清楚,感觉这个工程类型功能比较全。
2.2 进入向导

继续,直到出现下面的画面,稍作修改:

修改默认的安装路径。继续………..

选择 CD-RO M,然后选择 Build Installstions,编程生成安装程序的主体结构。


进入到 IS 主界面,选择 SQL Scripts,右键点击界面中的 SQL Scripts,建立一个新联接。
这个联接是用来联接要创建数据库的数据库服务器,在建立一个新联接后,开始设置

联接时默认的参数:服务器名,我们默认设置为“(local)
”,身份认证我们选择 SQL 服务

验证,用户名默认为“SA”即可。
在新创建的联接上右键,选择 Insert Script files,来导入我们先前做好的建库脚本。

导入完成后,得到如图结果。

数据库设置基本完成。这时候,一个通过 IS 来创建数据库的安装包基本上就就绪了,
你完全可以进行编译后执行。大家可以去试一下。
2.3 这个安装包存在的最大问题:

数据库文件被创建在了 C 盘根目录,也就是我们在安装时无法指定数据库文件的安

装目录。这个问题的解决,也是这个教程中唯一的亮点,就是如何更改数据库建库脚本中

的固定目录,允许用户在安装过程中,选择或输入安装路径。
2.4 更改安装路径

首先要明白一点:IS 本身不会创建数据库,IS 只是提供了安装时可以执行 SQL 脚本

的一种环境,在这个环境中,你可以用 SQL 脚本来实现数据库的一些操作。所以,基于

这么一个认识,我们要想在建库时改变建库文件的创建路径,唯一可以做的就是在 IS 执

行 SQL 脚本前,替换掉 SQL 脚本中的原路径字符“C:\”,换成我们自己输入的路径字符,

比如说“D:\SQLDATA”等。而 IS 正好提供了我们这样的功能。

我们选择一个 SQL 脚本项,看到右侧窗口上有一项叫“Text Replacement”。

在这里,我们可以完成对这个 sql 脚本中的指定的字符串替换成另外一个字符串。这种替

换是在安装时进行的。

比如,我们点击界面中的 ADD,弹出查找/替换对话框,在查找中我们输入 C:\,替

换中我们输入 D:\SQLDATA,那么在安装时,在 CreateDatabase.sql 脚本中所有的字符串


C:\都会别替换成 D:\SQLDATA。

但是,这还并不是我们需要的,因为,数据库要安装在哪个目录,是在安装时才知道

的,比如 INSTALLDIR 这个变量是在安装时才知道,所以,我们可以在替换的位置上输

入[INSTALLDIR]。这样,在安装时,我们选择了安装的目录,执行建库语句时,“C:\”

便被替换成了程序的安装路径,达到指定路径的目的。

再进一步:用 INSTALLDIR 来替换数据库的安装路径有时候不合适,比如,假设我

们这个安装包中包括了程序文件的安装和数据库的创建,而安装要求程序的安装路径和数

据库库文件的生成路径要完全不同,这时候,我们就无法用 INSTALLDIR 来替换建库脚

本中“C:\”,必须要使用自定义的变量来获取用户指定的路径,然后替换建库脚本中的

“C:\”。

用变量获取用户指定的路径,这个我们应该都没有问题,这里重点解释一下如何将这

个获取的路径传递到建库脚本中并进行替换。

假设,我们获取用户指定的路径变量为 userDir(使用 AskPath 函数来让用户安装时

给这个变量赋值――选择路径)。

我们在 Property Manager 中,新建一个项,记住要全部大写(我不知道怎么翻译好,

就叫 IS 的特征变量吧),随便给他个默认值。

这样,我们在 SQL 的替换界面中就能看到这个 IS 的特征变量了。


接下来,我们自然想到就是将 userDir 的值赋给 DBPATH 就万事大吉了。哈哈,用这

个函数吧:MsiSetProperty(ISMSI_HANDLE, "DBPATH",userDir);具体用法看 IS 的帮助

OK,收工!

You might also like