为了修改方便,我们先来定义附加数据库的三个常量。
!define DB_NAME "Test"
!define DB_FILE_MDF "$INSTDIRDataTest.mdf"
!define DB_FILE_LDF "$INSTDIRDataTest_log.ldf"
下面是主要代码,加在合适的位置即可。
主要思路:取得当前SQL2000服务器名称,查询数据库是否存在,如果不存在则执行附加操作,完成后再查询一下数据库是否存在,不存在则认为附加失败。
;从注册表中读取SQL程序安装路径
ReadRegStr $R1 HKLM "SOFTWAREMicrosoftMicrosoft SQL Server80ToolsClientSetup" "SQLPath"
;从注册表中读取当前计算机名
ReadRegStr $R2 HKLM "SYSTEMCurrentControlSetControlComputerNameComputerName" "ComputerName"
${If} $R1 == ""
MessageBox MB_OK "未检测到MS SQL2000!附加失败!"
${Else}
;启动SQL服务
nsSCM::Start /NOUNLOAD "MSSQLSERVER"
;将查询数据库的命令写入到文本中
FileOpen $R3 "$INSTDIRsp_helpdb.sql" w
FileWrite $R3 "EXEC sp_helpdb ${DB_NAME}"
FileClose $R3
;无窗口执行CMD命令查询数据库是否存在,0为存在,1为不存在
nsExec::ExecToLog '"$R1Binnisql.exe" -U "sa" -P "" -S "$R2" -d master -i "$INSTDIRsp_helpdb.sql" -o -b'
Pop $R4
${If} $R4 == "1"
;将附加数据库的命令写入到文本中
FileOpen $R5 "$INSTDIRattach_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 '"$R1Binnisql.exe" -U "sa" -P "" -S "$R2" -d master -i "$INSTDIRattach_db.sql" -o -b'
;再执行一遍查询,验证是否附加成功,0为存在,1为不存在
nsExec::ExecToLog '"$R1Binnisql.exe" -U "sa" -P "" -S "$R2" -d master -i "$INSTDIRsp_helpdb.sql" -o -b'
Pop $R6
${If} $R6 == "1"
MessageBox MB_OK "附加数据库文件失败,请进入“企业管理器”手动进行附加!"
${EndIf}
${EndIf}
${EndIf}
THE END
暂无评论内容