最新消息:

NSIS附加数据库,分离数据库脚本代码

nsis 永恒心锁 1329浏览 0评论

主要使用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
免责声明:根据《计算机软件保护条例》第十七条规定“为了学习和研究软件内含的设计思想和原理,通过安装、显示、传输或者存储软件等方式使用软件的,可以不经软件著作权人许可,不向其支付报酬。”您需知晓本站所有内容资源均来源于网络,仅供用户交流学习与研究使用,版权归属原版权方所有,版权争议与本站无关,用户本人下载后不能用作商业或非法用途,需在24个小时之内从您的电脑中彻底删除上述内容,否则后果均由用户承担责任;如果您访问和下载此文件,表示您同意只将此文件用于参考、学习而非其他用途,否则一切后果请您自行承担,如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。丨本站为个人博客非盈利性站点,所有软件信息均来自网络,所有资源仅供学习参考研究目的,并不贩卖软件,不存在任何商业目的及用途。丨本文采用知识共享 署名4.0国际许可协议 [BY-NC-SA] 进行授权BY-NC-SA协议进行授权

转载请注明:永恒心锁-分享互联网 » NSIS附加数据库,分离数据库脚本代码

您必须 登录 才能发表评论!