杉宫竹苑工作室

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 2094|回复: 0

NSIS:附加MS SQL 2000数据库

[复制链接]
发表于 2015-2-3 21:49:45 | 显示全部楼层 |阅读模式

正式会员享受无限制浏览网站功能和高速网盘下载,赶快加入本站吧!

您需要 登录 才可以下载或查看,没有账号?立即注册

x

在封装一些行业软件时,可能会用到附加数据库操作。N年前研究过,今天翻了出来,就发一下吧。以下代码在SQL 2000环境中测试通过。

为了修改方便,我们先来定义附加数据库的三个常量。

  1. ;附加数据库用到的常量
  2. !define DB_NAME "Test"
  3. !define DB_FILE_MDF "$INSTDIR\Data\Test.mdf"
  4. !define DB_FILE_LDF "$INSTDIR\Data\Test_log.ldf"
复制代码

下面是主要代码,加在合适的位置即可。

主要思路:取得当前SQL2000服务器名称,查询数据库是否存在,如果不存在则执行附加操作,完成后再查询一下数据库是否存在,不存在则认为附加失败。

  1. ;从注册表中读取SQL程序安装路径
  2. ReadRegStr $R1 HKLM "SOFTWARE\Microsoft\Microsoft SQL Server\80\Tools\ClientSetup" "SQLPath"
  3. ;从注册表中读取当前计算机名
  4. ReadRegStr $R2 HKLM "SYSTEM\CurrentControlSet\Control\ComputerName\ComputerName" "ComputerName"
  5. ${If} $R1 == ""
  6. MessageBox MB_OK "未检测到MS SQL2000!附加失败!"
  7. ${Else}
  8. ;启动SQL服务
  9. nsSCM::Start /NOUNLOAD "MSSQLSERVER"
  10. ;将查询数据库的命令写入到文本中
  11. FileOpen $R3 "$INSTDIR\sp_helpdb.sql" w
  12. FileWrite $R3 "EXEC sp_helpdb ${DB_NAME}"
  13. FileClose $R3
  14. ;无窗口执行CMD命令查询数据库是否存在,0为存在,1为不存在
  15. nsExec::ExecToLog '"$R1\Binn\isql.exe" -U "sa" -P "" -S  "$R2" -d master -i "$INSTDIR\sp_helpdb.sql" -o -b'
  16. Pop $R4
  17.      ${If} $R4 == "1"
  18.                 ;将附加数据库的命令写入到文本中
  19.                 FileOpen $R5 "$INSTDIR\attach_db.sql" w
  20.                 FileWrite $R5 "EXEC sp_attach_db @dbname = N$\'${DB_NAME}$\', @filename1 = N$\'${DB_FILE_MDF}$\',@filename2=N$\'${DB_FILE_LDF}$\'"
  21.                 FileClose $R5
  22.           SetDetailsPrint textonly
  23.           DetailPrint "正在附加 ${PRODUCT_NAME}数据库文件..."
  24.           SetDetailsPrint listonly
  25.                 ;无窗口执行CMD命令附加数据库
  26.                 nsExec::ExecToLog '"$R1\Binn\isql.exe" -U "sa" -P "" -S  "$R2" -d master -i "$INSTDIR\attach_db.sql" -o -b'
  27.                 ;再执行一遍查询,验证是否附加成功,0为存在,1为不存在
  28.                 nsExec::ExecToLog '"$R1\Binn\isql.exe" -U "sa" -P "" -S  "$R2" -d master -i "$INSTDIR\sp_helpdb.sql" -o -b'
  29.                 Pop $R6
  30.              ${If} $R6 == "1"
  31.                                 MessageBox MB_OK "附加数据库文件失败,请进入“企业管理器”手动进行附加!"
  32.                   ${EndIf}
  33.           ${EndIf}
  34. ${EndIf}
复制代码









回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|手机版|Archiver|SgzyStudio

GMT+8, 2024-5-21 15:04 , Processed in 0.112826 second(s), 23 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表