使用C#连接到SQL Server时遇到问题。我必须连接到防火墙后面的SQL Server实例。我正在使用以下代码(我现在没有确切的代码段,但这应该非常接近它):
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-Connections(这是我的防火墙管理员告诉我的)。 我第一次运行它时,它试图在端口65175-65177上建立TCP-Connections。当我们稍后再试一次时,它尝试通过TCP连接到45000左右的三个端口。
这是一个问题,因为我们不知道要打开哪个端口,因为它们似乎是随机的(这对我来说似乎很奇怪)。
我只能通过谷歌找到,通常你只需要端口1433 TCP和1434 UDP。我们打开了那些,但后来遇到了上面的问题。
有人可以向我解释一下,为什么这段代码会尝试连接这些高端的随机端口?或者如何告诉我的代码不要这样做?
一些额外的信息:
答案 0 :(得分:1)
正如Martin Smith在评论中指出的那样,解决方案是更改SQL Server的配置,因为它是为动态端口配置的。
从https://technet.microsoft.com/en-us/library/ms177440(v=sql.105).aspx复制:
为SQL Server数据库引擎分配TCP / IP端口号
1.在SQL Server配置管理器的控制台面板中,展开“SQL Server网络配置”,展开“实例名称的协议”,然后双击“TCP / IP”。
2.在“TCP / IP属性”对话框的“IP地址”选项卡上,多个IP地址以IP1,IP2格式显示,最多为IPAll。其中一个是环回适配器的IP地址127.0.0.1。为计算机上的每个IP地址显示其他IP地址。右键单击每个地址,然后单击“属性”以标识要配置的IP地址。
3.如果TCP动态端口对话框包含0,表示数据库引擎正在侦听动态端口,请删除0。
4.在“IPn属性”区域框的“TCP端口”框中,键入希望此IP地址侦听的端口号,然后单击“确定”。
5.在控制台窗格中,单击“SQL Server服务”。
6.在详细信息窗格中,右键单击“SQL Server(实例名称)”,然后单击“重新启动”以停止并重新启动SQL Server。