六、访问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. 脚本文件中不能存在注释如:(/************************创建数据库表***********************/ /*1.系统用户*/)
  2. 脚本文件中不能存在GO语句
  3. 脚本文件中不能直接创建数据库、使用数据库
  4. 脚本文件中的中文出现乱码

根据以上情况,进行了一下处理:

  1. 删除脚本文件中的注释信息
  2. 删除脚本文件中的创建数据库、使用数据库、GO等语句
  3. 把脚本文件保存为编码”简体中文(GB2312)”
  4. 在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应用程序的部署

posted @ 2016-05-17 16:42  所以呢  阅读(1655)  评论(0编辑  收藏  举报