.NET Core 2.0+EF7连接SQL Server Express报错26:无法定位服务器/实例
解决.NET Core 2.0连接Windows Server 2003上SQL Server 2008R2 Express的问题
我之前碰到过类似的场景,结合你的描述——服务器资源管理器(依赖.NET Framework组件)和.NET Framework程序能正常连,但.NET Core项目直接连接报错,这大概率是因为.NET Core的System.Data.SqlClient在处理老版本SQL Server/Windows Server的兼容性逻辑上,和.NET Framework版本有差异。下面是几个亲测有效的解决方案:
1. 调整连接字符串或强制指定TLS版本
Windows Server 2003默认只支持TLS 1.0,而.NET Core的SqlClient默认可能尝试更高版本的TLS协议,导致握手失败:
- 先在连接字符串里加这两个参数试试:
Encrypt=False;TrustServerCertificate=True;,绕开证书验证和加密协议的问题。 - 如果还是不行,在代码里强制指定使用TLS 1.0:
System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Tls; - 另外,试试用IP地址代替服务器名称,有时候.NET Core在老环境里的名称解析会出问题,比如把
MyServer\SQLEXPRESS换成192.168.1.100\SQLEXPRESS。
2. 确认SQL Server的TCP/IP协议已启用
虽然.NET Framework程序能连,但.NET Core可能更依赖TCP/IP而非命名管道:
- 打开SQL Server配置管理器,找到「SQL Server网络配置」->「SQLEXPRESS的协议」,确保TCP/IP是启用状态。
- 右键TCP/IP选属性,在「IP地址」标签里找到IPAll部分,把TCP端口设为固定的1433(Express默认可能用动态端口,容易导致连接失败)。
- 重启SQL Server服务让配置生效。
3. 升级SqlClient到Microsoft.Data.SqlClient
.NET Core 2.0自带的System.Data.SqlClient版本对老SQL Server的兼容性不够好,换成微软推荐的新版本试试:
- 在NuGet包管理器里卸载
System.Data.SqlClient,安装Microsoft.Data.SqlClient(找兼容.NET Core 2.0的最高版本,比如2.1.x系列就行)。 - 代码里把
using System.Data.SqlClient;改成using Microsoft.Data.SqlClient;,连接字符串不用改。
4. 检查防火墙和权限设置
- 确认Windows Server 2003的防火墙允许1433端口(或你设置的SQL端口)的入站连接,别把.NET Core程序的连接请求挡住了。
- 确保.NET Core程序运行用的账号,和能正常连接的.NET Framework程序用的账号权限一致,比如都是同一个域账号或者有SQL登录权限的账号。
最后提一句:Windows Server 2003和SQL Server 2008R2都已经停止官方支持了,从安全和长期维护的角度,建议尽早升级服务器和数据库版本哦。
内容的提问来源于stack exchange,提问作者Kirsten
相关产品推荐
相关产品推荐

