主要使用Binn/isql.exe执行SQL脚本文件命令进行操作,SQL脚本文件在安装程序中自动生成,完成操作后删除。
详细代码如下:
Section !主程序 sec01
;用户必选的安装程序
SectionIn RO
;判断数据库是否已经附加,如果没有附加,则附加数据库
ClearErrors
;从注册表中读取SQL安装程序路径
ReadRegStr $R1 HKLM "SOFTWARE/Microsoft/Microsoft SQL Server/80/Tools/ClientSetup" "SQLPath"
;从注册表中读取当前电脑的名称
ReadRegStr $R2 HKLM "SYSTEM/CurrentControlSet/Control/ComputerName/ComputerName" "ComputerName"
;将附加数据库的命令写入到文本中
FileOpen $R3 "$INSTDIR/attach_db.sql" w
FileWrite $R3 "exec sp_attach_db @dbname = N$/'数据库名称$/', @filename1 = N$/'$INSTDIR/DataBase/MDF主数据库文件名.MDF$/',@filename2=N$/'$INSTDIR/DataBase/LDF日志数据库文件名.LDF$/'"
FileWriteByte $R3 "13"
FileWriteByte $R3 "10"
FileClose $R3
;利用临时文件存储执行SQL语句的运行结果
GetTempFileName $R0
DetailPrint "正在附加数据库..."
;无窗口执行CMD命令
nsExec::ExecToLog '"$R1/Binn/isql.exe" -U "sa" -P "123456" -S "$R2/MSDE实例名" -d master -i "$INSTDIR/attach_db.sql" -o "$R0" -b'
DetailPrint "附加数据库完成..."
SectionEnd
Function .onInstSuccess
;删除附加数据库脚本文件
Delete "$INSTDIR/attach_db.sql"
FunctionEnd
;安装程序的卸载部分
Section Uninstall
MessageBox MB_YESNO|MB_ICONQUESTION "是否同时删除数据库?(若您想保留,请点击“否”按钮)"
GOTO NoDelete
; 删除数据库文件
Delete "$INSTDIR/DataBase/MDF主数据库文件名.MDF"
Delete "$INSTDIR/DataBase/LDF日志数据库文件名.LDF"
NoDelete:
ClearErrors
; 删除数据库分离脚本文件
Delete "$INSTDIR/detach_db.sql"
SectionEnd
Function un.onInit
ClearErrors
;从注册表中读取SQL安装程序路径
ReadRegStr $R1 HKLM "SOFTWARE/Microsoft/Microsoft SQL Server/80/Tools/ClientSetup" "SQLPath"
;从注册表中读取当前电脑的名称
ReadRegStr $R2 HKLM "SYSTEM/CurrentControlSet/Control/ComputerName/ComputerName" "ComputerName"
;将附加数据库的命令写入到文本中
FileOpen $R3 "$INSTDIR/detach_db.sql" w
FileWrite $R3 "USE master"
FileWriteByte $R3 "13"
FileWriteByte $R3 "10"
FileWrite $R3 "GO"
FileWriteByte $R3 "13"
FileWriteByte $R3 "10"
FileWrite $R3 "exec sp_detach_db @dbname = N$/'数据库名称$/'"
FileWriteByte $R3 "13"
FileWriteByte $R3 "10"
FileClose $R3
;利用临时文件存储执行SQL语句的运行结果
GetTempFileName $R0
DetailPrint "正在分离3W-iSystem数据库..."
;无窗口执行CMD命令
nsExec::ExecToLog '"$R1/Binn/isql.exe" -U "sa" -P "123456" -S "$R2/MSDE实例名" -d master -i "$INSTDIR/detach_db.sql" -o "$R0" -b'
Sleep 500
DetailPrint "数据库分离成功..."
FunctionEnd
THE END
暂无评论内容