安装程序检测 SQLServer 的连接正确性
优质
小牛编辑
140浏览
2023-12-01
当我们要安装一个后台数据库为 SQLServer 的数据库前台程序时,很多时候无可避免地要涉及到对 SQLServer 后台数据库的初始化设置操作,如何使用 NSIS 对用户输入的连接信息进行验证,然后利用这些连接信息进行数据库操作呢,如下脚本简单的实现了一个数据库连接测试的功能。
引用脚本的内容:
/*----------------------------------------- SQLServer 连接测试脚本,这是最简化的脚本,基本上只做了连接测试,其他的操作,例如 数据库还原操作等等这里都没有实现。 -------------------------------------------*/ !include "MUI.nsh" Name "SQLServer 连接操作" OutFile "Setup.exe" Page custom PageInitFunc PageLeaveFunc "" # 自定义页面 !insertmacro MUI_PAGE_INSTFILES !insertmacro MUI_LANGUAGE "SimpChinese" # 设置安装界面语言 ShowInstDetails show # 显示安装进度信息 ReserveFile "io.ini" # 预先打包文件,方便安装加速释放 io.ini !insertmacro MUI_RESERVEFILE_INSTALLOPTIONS # 预先打包文件,方便安装加速释放 Var SERVERNAME # 服务器名 例如: server ; user5 ...... 通常是计算机名 Var LOGINNAME # 登陆名 例如: sa ..... SQLServer 安全性属性那里的用户名 Var LOGINPASSWORD # 登陆密码, 如果你用的是 sa 登陆,这里就要 sa 的密码 Var isql_DIR # isql.exe 的所在位置 Function .onInit !insertmacro MUI_INSTALLOPTIONS_EXTRACT "io.ini" # 初始化页面 FunctionEnd Function PageInitFunc !insertmacro MUI_INSTALLOPTIONS_DISPLAY "io.ini" # 显示页面 FunctionEnd Function PageLeaveFunc !insertmacro MUI_INSTALLOPTIONS_READ $SERVERNAME "io.ini" "Field 2" "State" !insertmacro MUI_INSTALLOPTIONS_READ $LOGINNAME "io.ini" "Field 3" "State" !insertmacro MUI_INSTALLOPTIONS_READ $LOGINPASSWORD "io.ini" "Field 4" "State" ReadRegStr $isql_DIR HKLM "SOFTWARE\Microsoft\Microsoft SQL Server\80\Tools\ClientSetup" "SQLPath" nsExec::ExecToStack `"$isql_DIR\Binn\isql" -S$SERVERNAME -U$LOGINNAME -P$LOGINPASSWORD -Q"select 'ok'" -o$PLUGINSDIR\result.txt` # 这里只是简单的测试返回值 $0 为 0 则连接通过, 为其他值则连接出错,证明账号密码等参数输入错误, 这里只是很简单的检测,较为安全的操作是读取 result.txt 文件,如果里面第 3 行 显示为 ok 则连接正常且顺利运行了一个 SQL 语句。 Pop $0 StrCmp $0 0 pass MessageBox MB_OK "连接错误,请重新输入连接信息,否则无法进行后面的操作" Abort pass: MessageBox MB_OK "输入连接信息正确,接下来执行其他操作" FunctionEnd Section "-SetupFunc" SEC1 DetailPrint "这里执行你要做的数据库操作" DetailPrint "isql 可以完成所有数据库操作,请看SQLServer的相关帮助" SectionEnd
引用io.ini的内容:
[Settings] NumFields=7 [Field 1] Type=label Text=SQLServer 连接? Left=0 Right=-1 Top=0 Bottom=9 [Field 2] Type=Text Left=40 Right=163 Top=22 Bottom=35 [Field 3] Type=Text Left=39 Right=163 Top=43 Bottom=54 [Field 4] Type=Password Left=39 Right=163 Top=62 Bottom=75 [Field 5] Type=Label Text=密码: Left=8 Right=36 Top=65 Bottom=75 [Field 6] Type=Label Text=账号: Left=8 Right=38 Top=46 Bottom=56 [Field 7] Type=Label Text=服务器: Left=6 Right=34 Top=27 Bottom=36