【问题标题】:Create local SQL Server database from installation package for UWP从 UWP 的安装包创建本地 SQL Server 数据库
【发布时间】:2018-11-05 23:17:28
【问题描述】:

我正在尝试创建一个安装包,它将为我的 UWP 创建一个本地数据库。目前我正在使用NSIS 创建包。

我开发 UWP 的想法是,有些用户可能会不时使用平板电脑或手机,但该应用主要用于台式机,而我的安装程序适用于台式机安装。

我第一次尝试使用 SQLLocalDB Utility ,但我发现 UWP 不支持它。我最终开始使用 SQL Server 媒体文件来安装 SQL Server Express,我认为这就是我想要的方式(我想要一个比 SQLite 更强大的本地数据库,这似乎是我的最佳选择)。

我不知道我当前的问题是与 NSIS 还是 SQLCMD(我在安装程序中用于构建数据库)有关。这是我用来构建数据库的 .nsi 的一部分:

OutFile "db_installer.exe"
!include psexec.nsh
!include LogicLib.nsh

Section

InitPluginsDir
SetOutPath $PLUGINSDIR
File /r SQLCMD 
ExecWait '"$PLUGINSDIR\SQLCMD\sqlcmd.exe" -S Cmp-000000\SQLEXPRESS -i createdbonfile.sql -o output.txt'
FileOpen $4 "$PLUGINSDIR\SQLCMD\output.txt" r
FileSeek $4 0
ClearErrors
${DoUntil} ${Errors}
    FileRead $4 $1
    DetailPrint $1
${LoopUntil} 1 = 0
FileClose $4

# default section end
SectionEnd

有一次我让安装程序至少打印 SQL 错误。从那以后,我以为我只删除了一些对“DetailPrint”的调用。但是,现在 SQLCMD 仍然会创建输出文件,但不会在其中放入任何内容。当然最大的问题是我的 SQL 命令没有被执行。

【问题讨论】:

    标签: sql-server uwp nsis sqlcmd


    【解决方案1】:

    通过使用 SQL Server 媒体文件和 SQLCMD 实用程序(如问题中所述),我能够成功构建我想要的本地数据库。我遇到的问题是我的 .nsi 代码。我以为我正在阅读我在安装程序中使用 SQLCMD 创建的 output.txt 文件,但事实证明我实际上是在阅读我在练习运行中创建的文件,并在编译时意外加载到安装程序中。有了这个认识,我很快就发现我错过了我引用的文件的路径。这是带有适当文件路径的代码:

    OutFile "db_installer.exe"
    !include psexec.nsh
    !include LogicLib.nsh
    
    Section
    
    InitPluginsDir
    SetOutPath $PLUGINSDIR
    File /r SQLCMD 
    ExecWait '"$PLUGINSDIR\SQLCMD\sqlcmd.exe" -S Cmp-000000\SQLEXPRESS -i $PLUGINSDIR\SQLCMD\createdbonfile.sql -o $PLUGINSDIR\SQLCMD\output.txt'
    FileOpen $4 "$PLUGINSDIR\SQLCMD\output.txt" r
    FileSeek $4 0
    ClearErrors
    ${DoUntil} ${Errors}
        FileRead $4 $1
        DetailPrint $1
    ${LoopUntil} 1 = 0
    FileClose $4
    
    # default section end
    SectionEnd
    

    【讨论】:

      【解决方案2】:

      您可以连接到远程 SQL Server,例如在 Azure 上。不支持从 UWP 创建 LocalDB,因为它需要在目标计算机上安装 LocalDB。

      如果您需要本地数据库,那么 SQLite 将是最佳选择。

      【讨论】:

      • LocalDB 不在目标机器上是使用该实用程序的唯一问题吗?我打算让它成为应用程序的要求并使用安装程序加载它。 LocalDB 的问题是当我尝试连接时出现“此平台不支持 LocalDB”错误。我遗漏的一个重要细节是我计划在这个应用程序上主要在桌面上运行。如果我什至可以在加载到桌面时连接到 SQL Server 并连接到 SQLite 进行其他任何操作,那就太好了。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多