当使用MS JDBC驱动程序连接到端口TCP/58300
运行的SQL Server实例,我意识到,所有这些连接字符串的工作:SQL Server客户端如何知道如何连接到实例?
jdbc:sqlserver://MY_SERVER\MY_INSTANCE
jdbc:sqlserver://MY_SERVER\MY_INSTANCE:58300
jdbc:sqlserver://MY_SERVER:58300
我想,第一个直接连接到SQL Server的默认端口,即TCP/1433
。然后,从那里获得有关如何连接到实例的指导,建立到正确端口的新连接。第二个直接连接到正确的端口和实例名称是不是真的需要,这就是为什么最后一个也工作。
然而,此连接字符串不起作用:
jdbc:sqlserver://MY_SERVER\MY_INSTANCE:1433
我有一个登录失败的错误(显然是因为我无法连接到该实例运行在端口TCP/1433
)。
当使用jTDS JDBC Driver时,当你有一个实例名时,端口似乎并不重要。即使是随机的,无效的港口工程,以及:
jdbc:jtds:sqlserver://MY_SERVER:1433;instance=MY_INSTANCE
jdbc:jtds:sqlserver://MY_SERVER:58300;instance=MY_INSTANCE
jdbc:jtds:sqlserver://MY_SERVER:12345;instance=MY_INSTANCE
jdbc:jtds:sqlserver://MY_SERVER:9999999;instance=MY_INSTANCE
所以问题是:
- SQL服务器如何知道如何连接到特定的实例? (假设你只提供一个名称,而不是一个端口号)
- 如果我正确地猜测它连接到默认端口,为什么当我们在连接字符串中设置默认端口号时,MS JDBC驱动程序不起作用?也许MS JDBC驱动程序在提供端口号时忽略instanceName?
很好的答案!如果你在开始时引用SQL Server Browser是一个服务,它是SQL Server的一部分,它在端口'UDP/1434'上运行,那么它会得到改进(我读了你的整个答案,问自己“他在谈论什么浏览器? “)。但是你提供了找到这些信息的方向。谢谢! –