执行update-database报SQL Server错误26无法定位实例如何解决
update-database 报SQL连接错误26排查方案 错误26本质是客户端找不到指定的SQL Server实例,你已经确认TCP/IP协议开启、防火墙放行了常用端口、VS本身可正常连接目标实例,按以下优先级逐一排查:
- 先核对包管理器控制台的执行上下文
update-database默认读取解决方案当前启动项目下的配置文件,不是存放DbContext的类库项目配置。只要启动项目选错(比如选了无关类库、其他测试项目),就读不到你写的连接字符串,直接报实例找不到的错误。
操作:- 把存了正确
appsettings.json的主项目(Web/控制台项目)设为解决方案启动项目 - 看包管理器控制台顶部的「默认项目」下拉框,选中存放
ProductionManagmentContext的EF数据项目 - 重新执行
update-database测试
- 把存了正确
- 强制指定连接字符串测试,排除配置加载问题
直接给命令追加连接字符串参数,跳过配置文件读取环节,直接验证连通性,执行命令:
如果该命令执行成功,说明问题出在配置加载环节:检查启动项目下的PM> update-database -ConnectionString "Server=DESKTOP-MAQO344\SQLEXPRESS;Database=ProductionManagment.Data;Trusted_Connection=True;MultipleActiveResultSets=true"appsettings.json是否设置了「较新则复制」的输出属性,同时核对你贴的连接字符串少了闭合大括号,补全JSON语法后再试。 - 修正SQLEXPRESS实例的端口配置
SQLEXPRESS是命名实例,默认用动态端口而非固定1433端口,单独放行1433端口没用。
操作:- 打开SQL Server配置管理器,进入「SQL Server网络配置 > SQLEXPRESS的协议 > TCP/IP」,右键打开属性
- 切到「IP地址」标签,拉到最底部的
IPAll分组:- 要么记下当前「TCP动态端口」的端口号,在防火墙中放行该端口
- 要么清空「TCP动态端口」输入框,在「TCP端口」栏填1433,将实例改为固定1433端口
- 回到服务列表,重启SQLEXPRESS对应的数据库服务,配置才会生效
- 开启SQL Server Browser服务
命名实例的网络解析依赖SQL Server Browser服务,该服务默认是禁用状态:- 按Win+R输入
services.msc打开服务管理器 - 找到
SQL Server Browser服务,把启动类型改成「自动」,手动启动服务后重试命令
- 按Win+R输入
内容的提问来源于stack exchange,提问作者Tomasz Myszak
相关产品推荐
相关产品推荐

