【发布时间】:2018-03-11 09:20:25
【问题描述】:
我在使用 C# 连接到 SQL Server 时遇到问题。我必须连接到防火墙后面的 SQL Server 实例。我正在使用以下代码(我现在没有确切的代码 sn-p,但这应该非常接近):
using (SqlConnection myConnection = new SqlConnection("Server=myServerName\myInstanceName;" +
"Database=myDataBase;" +
"User Id=myUsername;" +
"Password=myPassword;")
{
myConnection.Open();
using (SqlCommand myCommand = new SqlCommand("select * from table",
myConnection))
{
myReader = myCommand.ExecuteReader();
while(myReader.Read())
{
// do sth.
}
}
}
当我运行此代码时,似乎需要在一系列非常高的端口上使用 TCP 连接(这是我的防火墙管理员告诉我的)。 我第一次运行它时,它试图在端口 65175-65177 上建立 TCP 连接。当我们稍后再次尝试时,它尝试通过 TCP 在 45000 左右的三个端口上进行连接。
这是一个问题,因为我们不知道要打开哪些端口,因为它们似乎是随机的(这对我来说似乎很奇怪)。
我只能通过 google 找到,通常您只需要端口 1433 TCP 和 1434 UDP。我们打开了那些,但后来遇到了上面的问题。
谁能向我解释一下,为什么这段代码会尝试连接这些高位随机端口?或者如何告诉我的代码不要这样做?
一点补充信息:
- 如果我使用 SQL Server Management Studio 连接到 SQL Server,我也会遇到同样的问题。它似乎需要这些高端口。
- 如果我将代码更改为使用 ODBC(来自 System.Data.Odbc-Namespace),我也会遇到同样的问题。
- 如果我在可以免费访问 SQL Server(中间没有防火墙)的机器上使用我的代码,它可以正常工作。
【问题讨论】:
-
这是你需要在 SQL Server 端配置的东西technet.microsoft.com/en-us/library/ms177440(v=sql.105).aspx
-
@Martin Smith:谢谢,这解决了我的问题。如果您有时间将其发布为答案,我会接受。否则我会自己贴出来,这样这个问题就不会悬而未决。
标签: c# sql sql-server port