从 UWP 安装包创建本地 SQL 服务器数据库
Create local SQL Server database from installation package for UWP
我正在尝试创建一个安装包,它将为我的 UWP 创建一个本地数据库。目前我正在使用 NSIS 创建包。
我开发我的 UWP 的想法是,有些用户可能不时想使用平板电脑或 phone,但该应用程序将主要用于台式机,而我的安装程序专为台式机安装而设计。
我第一次尝试使用 SQLLocalDB Utility ,但我发现 UWP 不支持它。我最终开始使用 SQL 服务器媒体文件来安装 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 "$PLUGINSDIR\SQLCMD\output.txt" r
FileSeek 0
ClearErrors
${DoUntil} ${Errors}
FileRead
DetailPrint
${LoopUntil} 1 = 0
FileClose
# default section end
SectionEnd
有一次我让安装程序至少打印了 SQL 错误。从那以后,我以为我只删除了一些对 "DetailPrint" 的调用。但是,现在 SQLCMD 仍然会创建输出文件,但不会在其中放入任何内容。当然,最大的问题是我的 SQL 命令没有被执行。
您可以连接到远程 SQL 服务器,例如在 Azure 上。不支持从 UWP 创建 LocalDB,因为它需要在目标计算机上安装 LocalDB。
如果您需要本地数据库,那么SQLite 将是最佳选择。
我能够通过使用 SQL 服务器媒体文件和 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 "$PLUGINSDIR\SQLCMD\output.txt" r
FileSeek 0
ClearErrors
${DoUntil} ${Errors}
FileRead
DetailPrint
${LoopUntil} 1 = 0
FileClose
# default section end
SectionEnd
我正在尝试创建一个安装包,它将为我的 UWP 创建一个本地数据库。目前我正在使用 NSIS 创建包。
我开发我的 UWP 的想法是,有些用户可能不时想使用平板电脑或 phone,但该应用程序将主要用于台式机,而我的安装程序专为台式机安装而设计。
我第一次尝试使用 SQLLocalDB Utility ,但我发现 UWP 不支持它。我最终开始使用 SQL 服务器媒体文件来安装 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 "$PLUGINSDIR\SQLCMD\output.txt" r
FileSeek 0
ClearErrors
${DoUntil} ${Errors}
FileRead
DetailPrint
${LoopUntil} 1 = 0
FileClose
# default section end
SectionEnd
有一次我让安装程序至少打印了 SQL 错误。从那以后,我以为我只删除了一些对 "DetailPrint" 的调用。但是,现在 SQLCMD 仍然会创建输出文件,但不会在其中放入任何内容。当然,最大的问题是我的 SQL 命令没有被执行。
您可以连接到远程 SQL 服务器,例如在 Azure 上。不支持从 UWP 创建 LocalDB,因为它需要在目标计算机上安装 LocalDB。
如果您需要本地数据库,那么SQLite 将是最佳选择。
我能够通过使用 SQL 服务器媒体文件和 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 "$PLUGINSDIR\SQLCMD\output.txt" r
FileSeek 0
ClearErrors
${DoUntil} ${Errors}
FileRead
DetailPrint
${LoopUntil} 1 = 0
FileClose
# default section end
SectionEnd