【问题标题】:What happens when port number is not specified in SQL Server connection string?SQL Server 连接字符串中未指定端口号时会发生什么情况?
【发布时间】:2014-02-12 14:24:41
【问题描述】:

我的本​​地计算机上有两个 SQL Server 实例。他们都监听不同的端口。我安装的第一个实例在默认端口上运行:1433。我已将另一个实例设置为侦听端口 1434。

我的应用程序正在使用一些旧的共享代码来生成连接字符串。所以直到现在我才真正知道那里发生了什么。由于一项新要求,我发现自己需要检查用于连接 SQL Server 的连接字符串。

我发现,为连接到每个 SQL 实例而构建的连接字符串不包括网络库,也不包括端口号作为数据源的一部分。数据源刚刚设置为<Server Name>/<Instance Name>。我确实在 MS 文档中发现,如果不包含网络库,则将其视为 (local),但并没有真正解释如何处理 (local)

所以我的问题是为什么这种格式的连接字符串能够连接到在非默认端口上运行的 SQL Server 实例?这仅在实例位于本地计算机或本地网络上时才有效吗?如果服务器是远程的,我可以把<ip>/<sql instance>不带端口吗?

我只需要弄清楚它是如何工作的,什么时候需要端口号,什么时候是可选的,因为我试图让我的连接 UI 对我们的用户来说尽可能简单。

【问题讨论】:

    标签: sql-server


    【解决方案1】:

    有一种东西叫做“SQL Server Browser Service”:

    http://technet.microsoft.com/en-us/library/ms181087(v=sql.105).aspx

    它旨在为客户端提供有关 sql server 实例、端口的信息。它实际上侦听 UDP 端口 1434。 关闭此服务后,您仍然可以连接到实例,但您需要指定 TCP/IP 端口。

    【讨论】:

    • 当我通过 SQL Management Studio 连接时,此服务似乎没有效果。在启用和禁用连接协议时,我看到了更多的效果。但是无论浏览器是否正在运行,我要么连接要么得到相同的错误。当我有更多时间时,我会尝试我的应用程序,看看会发生什么。我已经通过其他方式解决了这个问题,所以它不是首要任务。
    【解决方案2】:

    我的本​​地计算机上有两个 SQL Server 实例。他们都监听不同的端口。我安装的第一个实例在默认端口:1433 上运行。我已将另一个实例设置为侦听端口 1434。

    出于好奇,您为什么不将它们设置为命名实例,都在默认值 1433 上运行?

    至于它为什么起作用,如果你在开始菜单中搜索 SQL 配置,你会发现类似这样的屏幕。

    Sql Server 支持多种不同的连接方式。 TCP/IP 是一种方式(即IP 地址和端口),但如果您在本地计算机上,它也支持共享内存连接。也就是说,如果您的 SQL Server 可执行文件和管理工作室/客户端也在同一台机器上。

    我猜我会说当您指定本地时它默认为共享内存,因此您不需要指定端口。

    您可以通过在上述配置中暂时禁用共享内存来测试这一点,看看您的(local)\InstanceName 是否停止工作。

    【讨论】:

    • 如果我将 tcp/ip 端口设置为 1433 并重新启动这两个服务。第二个服务不会启动。我的印象是你只能让一个实例监听任何特定的端口。
    猜你喜欢
    • 2011-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-20
    • 1970-01-01
    • 2017-02-17
    • 1970-01-01
    • 2011-12-12
    相关资源
    最近更新 更多