从以下开始,排查您无法连接到 SQL Server 的原因。
打开 PowerShell 并运行以下命令来检查 SQL Server 是否正在侦听 TCP/IP 端口:
注意:命令来自这个post
ForEach ($SQL_Proc in Get-Process | Select-Object -Property ProcessName, Id | Where-Object {$_.ProcessName -like "*SQL*"})
{
Get-NetTCPConnection | `
Where-Object {$_.OwningProcess -eq $SQL_Proc.id} | `
Select-Object -Property `
@{Label ="Process_Name";e={$SQL_Proc.ProcessName}}, `
@{Label ="Local_Address";e={$_.LocalAddress + ":" + $_.LocalPort }}, `
@{Label ="Remote_Address";e={$_.RemoteAddress + ":" + $_.RemotePort}}, State | `
Format-Table
}
如果它正在收听,您会看到类似于以下内容:
如果不是,它不会返回任何东西。在这种情况下,请继续下一步。
打开SQL Server Configuration Manager
在 SQL Server 配置管理器中,确保为 SQL Server 启用 TCP/IP。如果没有,请启用它。
双击 TCP/IP 打开属性窗口。单击“IP 地址”选项卡。滚动到底部。在这里您可以将其从使用“TCP 动态端口”更改为使用指定的 TCP 端口(即:1433)
如果您对 TCP 端口进行了任何更改,则必须重新启动 SQL Server 服务(控制面板 => 管理工具 => 服务 => SQL Server...)。或者,您可以重新启动计算机。
获取 SQL Server 实例名称
Get-CimInstance -Namespace Root\Microsoft\SqlServer -Query "Select Name from __Namespace where Name like 'ComputerManagement%'" | ForEach-Object { $sqlMgmtVer = $_.Name; Get-CimInstance -Namespace Root\Microsoft\SqlServer\$sqlMgmtVer -Class FileStreamSettings |Select-Object InstanceName }
确定您的本地 IP 地址
Get-CimInstance -Namespace Root\cimv2 -Query "SELECT Description, DHCPEnabled, DHCPServer, IPAddress, MACAddress FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled=True" | Select-Object Description, DHCPEnabled, DHCPServer, IPAddress, MACAddress
确定您的公共 IP 地址
Configure the Windows Firewall to Allow SQL Server Access.
Configure a Windows Firewall for Database Engine Access(显示如何在使用动态端口时配置 Windows 防火墙)
注意:除了配置 Windows 防火墙外,可能还需要在路由器中设置端口转发。有关详细信息,请参阅路由器的文档。
更新
提供者:命名管道提供者,错误:40 - 无法打开
连接到 SQL Server
根据SQL Server clients may change protocols when the client computers try to connect to an instance of SQL Server
...如果客户端计算机同时具有可用的 TCP 和命名管道,并且
顺序是:
当客户端计算机尝试与服务器建立 TCP 连接时
并且连接尝试返回一个非零返回码,客户端
通过使用中的下一个协议透明地尝试连接
列表,也就是命名管道...
客户端未收到指示第一个协议的错误
失败了。
如果客户端应用程序使用第二个协议,它也
返回错误,错误返回给客户端。
如果您使用以下方法之一创建别名,则客户端
应用程序使用别名信息建立连接到
服务器并且不使用任何附加协议
...如果您想控制客户端应用程序用于每次连接尝试的协议,并且不允许
客户端尝试多种协议,您可以执行以下操作之一:
使用 SQL 客户端网络实用程序或 SQL Server 配置管理器
通过指定您喜欢的协议来创建别名。
在您的连接字符串中指定协议。
根据connection string文档,要指定连接只使用TCP/IP,需要在连接字符串中指定Network Library=DBMSSOCN;。
示例:
Data Source=190.190.200.100,1433;Network Library=DBMSSOCN;Initial Catalog=myDataBase;User ID=myUsername;Password=myPassword;
另见Network Protocol for SQL Server Connection
根据Configure a Windows Firewall for Database Engine Access
SQL Server Browser 服务允许用户连接到
未在端口 1433 上侦听的数据库引擎,但不知道
端口号。要使用 SQL Server Browser,您必须打开 UDP 端口
1434. 为了提升最安全的环境,让 SQL Server Browser 服务停止,并配置客户端使用
端口号。
... 作为将 SQL Server 配置为侦听固定端口并打开端口的替代方法,您可以列出
SQL Server 可执行文件 (Sqlservr.exe) 作为
被阻止的程序。想继续使用时使用此方法
动态端口。在此只能访问一个 SQL Server 实例
方式。
查看哪些 SQL Server 服务正在运行:
打开 PowerShell 并键入以下内容:
Get-Service | Where-Object { $_.DisplayName -Match "^SQL Server.*"}
其他资源