zoukankan      html  css  js  c++  java
  • NSIS附加数据库,分离数据库脚本代码

    主要使用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

  • 相关阅读:
    qs.js库 使用方法
    Python的装饰器
    Html常用标记总结
    SoapUI、Jmeter、Postman三种接口测试工具的比较
    WebService发布协议--SOAP和REST的区别
    Redis简介
    linux搭建svn服务并手动同步代码到web目录和自动更新
    标签有关用法以及锚点定位;
    DevOps简单介绍
    BAT 批处理脚本教程
  • 原文地址:https://www.cnblogs.com/xqf222/p/3306820.html
Copyright © 2011-2022 走看看