六、访问SQL Server数据库
数据库访问插件请参照MSSQL OLEDB plug-in,具体的使用里面的示例说的非常清楚,就不再累述。想说的是我使用中发现和需要注意的问题。
数据库连接
Windows身份验证:MSSQL_OLEDB::SQL_Logon "$SQLSERVER" "" ""
SQL Server身份验证:MSSQL_OLEDB::SQL_Logon "$SQLSERVER" "$SQLUSER" "$SQLPASSWORD"
数据库创建和初始化脚本
一开始创建数据库和初始化的脚本是写在一个文件中的,本想着直接执行脚本文件完成,如下所示:
SetOutPath "$INSTDIR\ADWebManager\DB" FILE ADManager.sql MSSQL_OLEDB::SQL_ExecuteScript /NOUNLOAD "ADManager.sql"
执行怎么都不成功,经过反复试验,发现有以下问题:
- 脚本文件中不能存在注释如:(/************************创建数据库表***********************/ /*1.系统用户*/)
- 脚本文件中不能存在GO语句
- 脚本文件中不能直接创建数据库、使用数据库
- 脚本文件中的中文出现乱码
根据以上情况,进行了一下处理:
- 删除脚本文件中的注释信息
- 删除脚本文件中的创建数据库、使用数据库、GO等语句
- 把脚本文件保存为编码”简体中文(GB2312)”
- 在NSIS脚本中分部来创建数据库、使用数据库(一定要有,否则执行脚本文件不成功)、执行处理过的脚本文件
修改后的脚本代码如下所示:
DetailPrint "--执行数据库创建和初始化脚本“ADManager.sql”" MSSQL_OLEDB::SQL_Execute "Select count(*) From master.dbo.sysdatabases Where name='ADManager'" Pop $0 ${If} $0 == 1 ; 执行失败 Pop $0 DetailPrint $0 Abort ${EndIf} MSSQL_OLEDB::SQL_GetRow Pop $0 ${If} $0 == 1 ; 执行失败 Pop $0 DetailPrint $0 Abort ${EndIf} Pop $0 ${If} $0 == 0 ; 数据库未创建 MSSQL_OLEDB::SQL_Execute "CREATE DATABASE [ADManager]" Pop $0 ${If} $0 == 1 ; 执行失败 Pop $0 DetailPrint $0 Abort ${EndIf} MSSQL_OLEDB::SQL_Execute "USE [ADManager]" SetOutPath "$INSTDIR\ADWebManager\DB" FILE ADManager.sql MSSQL_OLEDB::SQL_ExecuteScript /NOUNLOAD "ADManager.sql" Pop $0 ${If} $0 == 1 ; 执行失败 Pop $0 DetailPrint $0 Abort ${EndIf} ${EndIf}
执行多个语句
执行多个语句要用“;”分割,如下所示:
MSSQL_OLEDB::SQL_Execute "USE [ADManager]" MSSQL_OLEDB::SQL_Execute "Update [AppSetting] Set [SettingValue]='$ADServiceIP' Where [SettingKey]='ADServerIP'; \ Update [AppSetting] Set [SettingValue]='$DomainName' Where [SettingKey]='DomainName';"
接下来一章节介绍Web应用程序的部署。