如何使用Wix运行sql脚本来创建数据库

时间:2011-08-02 02:39:04

标签: database wix

我遇到了使用Wix创建数据库的问题。我可以找到的示例(请参阅下面的链接)首先使用wix创建数据库并运行create table sql脚本。问题是我需要设置wix以使用CREATE DATABASE运行sql脚本来创建数据库和表,而不是首先使用.wxs文件中的SqlDatabase标记创建数据库。这可能在Wix中这样做吗?我正在使用SQL Server Express。有关如何执行此操作的任何示例都会有所帮助。

http://www.rrreese.com/Article/Show/WiX%20SQL

sql脚本示例:

CREATE DATABASE My_DB
CREATE TABLE Test (Value1 CHAR(50), Value2 INTEGER)
CREATE INDEX TestIndex ON Test (Value1)

提前致谢。非常感谢任何帮助。

2 个答案:

答案 0 :(得分:7)

为什么没有包含SQL代码的脚本文件来创建数据库。

<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi" 
xmlns:util="http://schemas.microsoft.com/wix/UtilExtension" 
xmlns:sql="http://schemas.microsoft.com/wix/SqlExtension">
  <Product Name='SQL app 1.0' Id='DB501C18-86C7-4D14-AEC0-86416A69ABDE' Language='1033' Codepage='1252'
     Version='1.0.0' Manufacturer='ABC Ltd.'>
            <Package Id='????????-????-????-????-????????????' Keywords='Installer' Description="SQL App 1.0 Installer"
              Comments='Comment.' Manufacturer='ABC Ltd.' InstallerVersion='100'
              Languages='1033' Compressed='yes' SummaryCodepage='1252' />
        <Media Id='1' Cabinet='Sample.cab' EmbedCab='yes' />
        <User Id="MySQLUser" Name="[SQLUSER]" Password="[SQLUSERPASSWORD]"></User>
        <Directory Id='TARGETDIR' Name='SourceDir'>
            <Directory Id='ProgramFilesFolder' Name='PFiles'>
                <Directory Id='INSTALLDIR' Name='TestSQL'>
                      <Component Id="MySqlComponent" Guid="C50999A0-02FD-42d5-9F65-7375318DD328">
                        <SqlDatabase Id="MySqlDatabase" Database="MyDatabase" Server="[SQLSERVER]" Instance="[SQLINSTANCE]"
                            CreateOnInstall="yes" DropOnUninstall="yes" User="MySQLUser" ContinueOnError="yes">
                              <SqlScript Id="CreateDatabase" ExecuteOnInstall="yes" BinaryKey="CreateTablesBin"></SqlScript>
                        </SqlDatabase>
                      </Component>
                </Directory>
             </Directory>
         </Directory>
        <Binary Id="CreateTablesBin" src="CreateDatabase.sql"></Binary>
        <Feature Id='Complete' Level='1' Description="Full" Title="Full Installation">
            <ComponentRef Id='MySqlComponent' />
        </Feature>
    </Product>
</Wix>

答案 1 :(得分:1)

您需要拥有SqlDatabase标记。没有它,安装程序将永远不知道脚本必须运行在哪个服务器和数据库上。但是,您可以设置CreateOnInstallDropOnUninstall(有三个CreateOnX和三个DropOnX,您可能需要to check them all)到no防止自动创建或删除数据库。

请注意,如果执行此操作,则应提供在回滚时运行的SqlScript,以便在安装程序失败时删除数据库。这通常使用SqlDatabase标记自动完成。