SQL Server 实例的连接字符串

Posted

技术标签:

【中文标题】SQL Server 实例的连接字符串【英文标题】:Connection String for SQL Server Instance 【发布时间】:2011-02-11 10:42:55 【问题描述】:

我有 SQL Server 2000,它还有 2 个其他 sql 实例。主服务器没有问题,下面我说的是这两个实例,

他们分享,

    同一台机器 相同的IP 相同的实例名称 同一个端口

我也想知道它是怎么做到的。

使用查询分析器一旦连接,

MyServer\Invent (it connects to first instance)
MyServer\Invent,1433 (it connects to second instance)

(是的,它发生了。我 100% 确定这一点,因为我在其中有单独的数据库)

现在问题来了,

使用 C# SqlConnection,我无法连接到第一个,但可以连接到第二个。

1. Data Source=MyServer\Invent;Persist Security Info=True;Initial Catalog=TEST;uid=admin;pwd=123
2. Data Source=MyServer\Invent,1433;Persist Security Info=True;Initial Catalog=TEST;uid=admin;pwd=123

一旦我使用了第一个连接字符串,它会挂起一段时间并收到以下错误消息...

"在建立与 SQL Server 的连接时发生与网络相关或特定于实例的错误。未找到服务器或无法访问该服务器。验证实例名称是否正确以及 SQL Server 是否配置为允许远程连接。(提供者:SQL 网络接口,错误:26 - 错误定位服务器/指定的实例)

在网上搜索过这个,很多人说安装这个是可能的。并且一个连接应该使用命名管道 (tcp/445)

知道如何解决这个问题吗? 任何可能的连接字符串格式? 无论如何为命名管道制作连接字符串?

【问题讨论】:

仅供参考,我刚刚使用“企业管理器”从端口检查过两者都共享 1433。毫无疑问。 可能是防火墙问题? 【参考方案1】:

我认为您的问题是一台服务器正在使用不同的端口。所以它使用的是 TCP,但使用了一个不同的端口,您需要弄清楚它使用的是哪个端口,然后将该端口添加到您的连接字符串中,就像您对另一个实例 (1433) 所做的那样。

您的 SQL Server 配置管理器。 导航到 SQL Server 网络配置节点并展开它。 在子节点中找到实例 现在在右侧,您将看到协议(共享内存、命名管道、TCP 等) 双击 TCP。 在弹出的对话框中,切换到 IP 地址选项卡。 一直向下滚动到“IP All”部分

TCP 端口是什么意思?

【讨论】:

我也检查过...我对此有 100% 的信心。我使用以下 SP 来检查端口 DECLARE @tcp_port nvarchar(5) EXEC xp_regread @rootkey = 'HKEY_LOCAL_MACHINE', @key = 'SOFTWARE\MICROSOFT\MSSQLSERVER\MSSQLSERVER\SUPERSOCKETNETLIB\TCP', @value_name = 'TcpPort', @值 = @tcp_port 输出选择 @tcp_port 另一个实例呢?两个实例都启用了 TCP 吗? 防火墙问题怎么样。您可以在盒子本身上运行测试应用程序吗?这样您就可以消除任何防火墙问题。 两个实例都使用 1433 我可以通过 Enterprise Manager 和 Query Analyzer 进行连接。所以我希望这意味着不能有任何防火墙限制。 您可以从您的计算机连接到这两个实例吗?是的,那么就不存在防火墙问题。尝试在连接字符串中使用网络库参数。 msdn.microsoft.com/en-us/library/… 并使用命名管道【参考方案2】:

我想也许你的第一个实例实际上并没有在 1433 上监听,尽管这通常是默认值。

我相信可以使用 SQL Server 配置实用程序更改默认端口。检查默认端口是什么,假设它不是 1433,尝试在第一个连接字符串中指定它。

这里是some info,关于如何检查您的实例正在侦听的端口。

编辑:好的,第一个实例正在侦听命名管道。根据this page,也许server=np:MyServer\Invent; 会起作用。

【讨论】:

我也检查过...我对此有 100% 的信心。我使用以下 SP 来检查端口 DECLARE @tcp_port nvarchar(5) EXEC xp_regread @rootkey = 'HKEY_LOCAL_MACHINE', @key = 'SOFTWARE\MICROSOFT\MSSQLSERVER\MSSQLSERVER\SUPERSOCKETNETLIB\TCP', @value_name = 'TcpPort', @值 = @tcp_port 输出选择 @tcp_port 您是否尝试过Use master Go Xp_readerrorlog 并寻找“正在收听 x.x.x.x:yyyy”? @Blorgbeard,试过了,我认为有一个线索,我得到了这两个实例的关注。 1.SQL 服务器监听共享内存,命名管道。 2.SQL server监听172.16.80.25:1433.

以上是关于SQL Server 实例的连接字符串的主要内容,如果未能解决你的问题,请参考以下文章

如何从 SQL Server Express 获取连接字符串?

如何从 SSIS 包中检索 SQL Server 实例名称

疑难解答'建立与SQL Server的连接时发生的与网络相关或特定于实例的错误'连接到Azure SQL Server

两个具有相同名称的SQL Server实例?

管道错误40建立与SQL Server的连接时发生与网络相关或特定于实例的错误

使用自定义端口连接SQL Server 2008的方法