Windows10+VS2017连接SQL Server2014时遇Error26故障求助
Hey,我之前也踩过Error26的坑,这个错误本质是客户端无法定位到指定的SQL Server实例——虽然VS能识别数据库,但浏览器运行时的上下文和VS完全不一样,给你几个针对性的排查点:
先验证实例连接的基础可用性
你代码里的连接字符串const string connString = "Data Source=CLEAVEN\\SQLEXPRESS;Initial Catalog=EduAssistR;Integrated Security=True";语法是对的,但可以先替换数据源为localhost\\SQLEXPRESS或者127.0.0.1\\SQLEXPRESS试试,排除机器名解析的问题。另外,打开SQL Server Management Studio,用同样的CLEAVEN\SQLEXPRESS+Windows身份验证连接,如果连不上,那问题出在SQL Server的基础配置,不是代码的问题。确认SQL Server实例本身在运行
别只盯着SQL Server Browser服务,打开services.msc(按Win+R输入这个命令),找到**SQL Server (SQLEXPRESS)**服务,确保它的状态是「正在运行」。有时候Browser服务开了,但实例本身没启动,照样会报Error26。防火墙与端口配置排查
默认SQLEXPRESS用的是动态端口,防火墙很可能拦截了这个端口:- 打开SQL Server配置管理器,找到「SQL Server网络配置」→「SQLEXPRESS的协议」→「TCP/IP」,右键启用它;
- 双击TCP/IP,切换到「IP地址」标签,拉到最下面的「IPAll」,把「TCP端口」设为固定值比如1433,然后重启SQL Server (SQLEXPRESS)服务;
- 打开Windows Defender防火墙,添加入站规则,允许TCP端口1433的连接。
应用运行上下文的权限问题
如果你的项目是用IIS Express运行,默认用的是你的本地用户账户;如果是部署到本地IIS,应用程序池的身份可能没有访问SQL Server的权限:- 对于IIS Express:可以右键项目→属性→Web,确认服务器是IIS Express,且「使用IIS Express的SSL」如果开启的话,也要确保SSL配置没问题;
- 对于本地IIS:找到对应的应用程序池,把身份改成「Network Service」或者你的本地账户,然后在SQL Server里给这个账户添加EduAssistR数据库的访问权限(在SSMS里,数据库→安全性→用户→新建用户,映射对应的登录名)。
再次验证Integrated Security的作用
你的连接字符串用了Integrated Security=True,这意味着应用会用当前运行的账户去连接SQL Server。如果是IIS运行的话,这个账户不是你的本地用户,而是应用程序池的账户,所以必须确保这个账户能被SQL Server识别并授予数据库权限。
内容的提问来源于stack exchange,提问作者Cleaven

