安装程序检测 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