【问题标题】:ASP SQL connection refused, necessary ports are openASP SQL 连接被拒绝,必要的端口已打开
【发布时间】:2010-11-05 16:53:04
【问题描述】:

我正在尝试开发与 MSSQL 2005 服务器的 ASP SQL 连接。 SQL 服务器是我们主域服务器后面的子服务器,因此已在端口 1433 上从 WAN > LAN 设置了端口转发,以允许流量访问第二个服务器。

我已经完成了 telnet 测试,看看端口转发是否正常工作,它告诉我连接被拒绝。当我运行脚本时,我得到以下结果:

Microsoft OLE DB Provider for SQL Server 错误“80004005”

[DBNETLIB][ConnectionOpen (Connect()).]SQL Server 不存在或 访问被拒绝。

代码如下:

<%
Dim cn
Dim rs
Dim SQL

SQL = "SELECT count(*) FROM master"

'create an instance of the ADO cn and rs objects
Set cn = Server.CreateObject("adodb.connection")
Set rs = Server.CreateObject("adodb.recordset")

'open the cn to the database
cn.Open "Provider=SQLOLEDB;Data Source=###.###.###.###,1433;Network Library=DBMSSOCN;Initial Catalog=blah;User ID=blah;Password=blah"
'Open the rs object executing the SQL statement and return records
rs.Open SQL,cn,adOpenKeyset,adLockOptimistic

'first of all determine whether there are any records
If rs.EOF Then
Response.Write("No records returned.")
Else
'if there are records then loop through the fields
Do While NOT rs.Eof   
Response.write rs("count")
Response.write "<br>"   
rs.MoveNext    
Loop
End If

'close the cn and rs objects to free up resources
rs.Close
Set rs=nothing
cn.Close
Set cn=nothing
%>

谢谢

【问题讨论】:

  • 抱歉,我贴出来的代码有点乱。
  • 101010 按钮可以很好地为您设置格式...
  • 谢谢,我会记住的。

标签: asp.net sql ado.net ado


【解决方案1】:

另外,检查开始菜单中“Microsoft SQL Server 2005”/“配置工具”下的Surface Area Configuration,以确保TCP 已启用。我认为默认情况下只启用命名管道。

防火墙

可以阻止与 SQL Server 连接的第一件事是防火墙。如果您有任何防火墙,请确保将它们配置为允许连接到 SQL Server。 SQL Server 使用的默认 TCP 端口是 1433。防火墙包括 McAfee、Norton、Windows XP SP2 附带的 Windows 防火墙和 Windows 2000 附带的 Internet 连接防火墙 (ICF)。

服务验证

在您可以连接到 SQL Server 2005 之前,您需要验证 SQL Server 是否正在运行。默认情况下,SQL Server Express 版本作为命名实例 (SQLEXPRESS) 安装。这意味着您需要使用本地计算机上的 (local)\SQLEXPRESS 来访问它。没有前缀的 SQLEXPRESS 将不起作用。您还可以在本地机器上使用 127.0.0.1 IP 地址来避免与 DNS 相关的问题。

要验证服务是否正在运行,请在命令提示符处键入 sqlcmd –S(local)\SQLEXPRESS。如果您看到“1>”,则表示您已成功连接。输入 exit 退出 sqlcmd 程序。

连接协议

SQL Server 2005 支持许多用于将客户端应用程序与数据库服务器连接起来的协议。这些协议是 TCP、命名管道 (NP)、共享内存 (SM)、VIA 和 HTTP。 SQL Server Express 仅支持 TCP、NP 和 SM。

默认情况下,本地计算机上的 SQL Server Express 只能访问 SM。这意味着除非启用 TCP 和/或 NP,否则从远程计算机到 SQL Server Express 的连接将失败。如果要使用 TCP 和 NP,则必须显式打开它们。使用 SQL Server 配置管理器为服务器和客户端显式启用 TCP 和 NP。启用 TCP 和 NP 后,需要启动 SQL Browser 服务(参见下面的 SQL Browser)。

如果您是远程连接,您需要将“(本地)”替换为服务器的 IP 地址。如果 DNS 可以解析名称,您也可以使用服务器名称而不是 IP 地址。

如果您通过特定 IP 地址进行连接,请确保为其启用连接。在 SQL 配置管理器中,展开 SQL Server 2005 网络配置节点,然后从右侧窗格中选择 TCP/IP 属性。选择 IP 地址选项卡并将特定 IP 地址的启用更改为是。

SQL Server 配置管理器

SQL Server 2005 和 SQL Server Express 中的 SQL Server 配置管理器取代了客户端网络实用程序和服务器网络实用程序。它允许您配置 SQL Server 侦听的协议以及 ADO.NET 2.0 应用程序可以使用的协议。但是,要为使用 ADO 而不是 ADO.NET 2.0 的应用程序配置客户端协议,您仍然需要使用客户端网络实用程序。客户端网络实用程序随 ADO 一起提供,是 Windows 2000、Windows XP 和 Windows 2003 的一部分。

要远程连接到 SQL Server Express,请确保服务器可以侦听 TCP 连接。在 SQL Server 配置管理器中,展开“SQL Server 2005 网络配置”并导航到“SQL Server Express 协议”,然后启用 TCP。您需要重新启动服务器才能使更改生效。

如果您使用的是 Teratrax 数据库管理器,您可以通过单击连接对话框中的“客户端网络实用程序”按钮来配置客户端协议。确保您满足 Teratrax 数据库管理器的操作系统要求(Windows 2000、Windows XP 或 Windows 2003)。

SQL Server 浏览器

SQL Browser 是 SQL Server 2005 中的一项新服务,用于识别命名实例侦听的端口。 SM 协议不使用此服务。默认情况下,此服务在 SQL Server Express 中处于关闭状态。这意味着用户必须启动此服务才能进行远程访问。您可以从服务管理器或从命令行键入“NET START SQLBROWSER”来启动 SQL Browser 服务。

SQL Browser 侦听 UDP 端口 1434。但是,持有 UDP 1434 端口的 SQL Server 2000 之前的 SP3 版本可能会导致 SQL Browser 名称解析失败,因为它们可能会拒绝放弃该端口。解决方法是将机器上的所有 SQL Server 2000/MSDE 实例升级到 SP3 或更高版本。

【讨论】:

  • TCP 已启用,SQL 服务器会监听除 1433 之外的哪些端口?
【解决方案2】:

当远程计算机上没有运行 SQL Server 服务时会发生这种情况

【讨论】:

  • SQL server 服务正在运行。
【解决方案3】:

您可能还想确保 sql server 实例允许远程连接

【讨论】:

    【解决方案4】:

    我已经完成了 telnet 测试 查看端口转发是否正常工作 正确,它告诉我 连接被拒绝。

    那么下列情况之一为真:

    • 端口转发不起作用
    • SQL 主机防火墙正在阻止端口 (1433)
    • 没有进程在目标上侦听 1433:
      • SQL 服务器已停止
      • SQL 未配置为使用 TCP
      • SQL 主机具有多个 IP,并且 SQL TCP 未侦听来自转发器的入站 IP
      • SQL 服务器侦听非默认端口

    【讨论】:

      猜你喜欢
      • 2016-05-27
      • 1970-01-01
      • 2021-04-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多