请把轻狂志网址 www.flighty.cn 加入收藏夹,其他俱为假冒,谨防被骗!赞助请点 这里!找东东请用右边的搜索 ===>
24 2014-09

NSIS:附加MS SQL 2000数据库

作者:少轻狂 | 发布:2014-09-24 | 更新:2014-09-24 | 分类:部署 | Disposition | 热度:

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

 

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

;附加数据库用到的常量
!define DB_NAME "Test"
!define DB_FILE_MDF "$INSTDIR\Data\Test.mdf"
!define DB_FILE_LDF "$INSTDIR\Data\Test_log.ldf"

 

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

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

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