连接到 SQL Azure 上的数据库

本主题讨论使用 Microsoft JDBC Driver for SQL Server 连接到 SQL Azure 数据库时遇到的问题。有关 SQL Azure 数据库的详细信息，请参阅：

- SQL Azure 数据库

- 如何：使用 JDBC 连接到 SQL Azure

- 在 Java 中使用 SQL Azure

# 详细信息

在 SQL Azure 上，您应连接到 master 数据库以调用 SQLServerDatabaseMetaData.getCatalogs。

  SQL Azure 不支持从用户数据库中返回整个目录集。SQLServerDatabaseMetaData.getCatalogs 使用 sys.databases 视图获取目录。请参考 sys.databases（SQL Azure 数据库）中讨论的权限来了解 SQL Azure 上的 SQLServerDatabaseMetaData.getCatalogs 行为。

删除的连接

  连接到 SQL Azure 时，空闲连接在处于不活动状态一定时间后可能被某个网络组件（如防火墙）终止。为了避免网络组件删除空闲连接，应在加载驱动程序的操作系统上设置以下注册表设置（或非 Windows 的等效设置）：

  注册表设置 | 建议的值
  --- | ---
  HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\KeepAliveTime | 30000
  HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\KeepAliveInterval | 1000
  HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\TcpMaxDataRetransmission | 10

  然后必须重新启动计算机，注册表设置才能生效。

  为此，在 Windows Azure 中运行时，创建一个启动任务来添加注册表项。例如，将以下启动任务添加到服务定义文件：

      <Startup>
          <Task commandLine="AddKeepAlive.cmd" executionContext="elevated" taskType="simple">
          </Task>
      </Startup>

  然后将 AddKeepAlive.cmd 文件添加到您的项目。将“复制到输出目录”设置为“始终复制”。以下是一个 AddKeepAlive.cmd 文件示例：

      if exist keepalive.txt goto done
      time /t > keepalive.txt
      REM Workaround for JDBC keep alive on SQL Azure
      REG ADD HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters /v KeepAliveTime /t REG_DWORD /d 30000 >> keepalive.txt
      REG ADD HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters /v KeepAliveInterval /t REG_DWORD /d 1000 >> keepalive.txt
      REG ADD HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters /v TcpMaxDataRetransmission /t REG_DWORD /d 10 >> keepalive.txt
      shutdown /r /t 1
      :done

将服务器名称追加到连接字符串中的 UserId

  在 Microsoft JDBC Driver for SQL Server 4.0 之前的版本中，连接到 SQL Azure 数据库时，要求您将服务器名称追加到连接字符串中的 UserId，例如 user@servername。从 Microsoft JDBC Driver for SQL Server 4.0 版本开始，不再要求将 @servername 追加到连接字符串中的 UserId。

使用加密要求设置 hostNameInCertificate

  连接到 SQL Azure 时，如果指定 encrypt=true，应指定 hostNameInCertificate。（如果连接字符串中的服务器名称为 shortName.domainName，则将 hostNameInCertificate 属性设置为 *.domainName。）

  例如：

      jdbc:sqlserver://abcd.int.mscds.com;databaseName= myDatabase;user=myName;password=myPassword;encrypt=true;hostNameInCertificate= *.int.mscds.com;

# 请参阅

通过 JDBC 驱动程序连接到 SQL Server
发送有关本主题的反馈至 Microsoft。

© 2012 Microsoft。保留所有权利。