.NET Core 6控制台程序在数据库所在服务器无法找到数据库的问题排查
连接字符串配置错误
开发环境常用localhost、.或本地实例名(如.\SQLEXPRESS)作为数据源,但部署到服务器后,需根据SQL Server实例类型调整:默认实例用服务器名称或localhost,命名实例要指定完整的SERVERNAME\INSTANCENAME。同时检查数据库名称拼写、大小写是否与服务器上的一致(SQL Server在区分大小写的排序规则下会识别不同名称)。比如开发连接字符串Data Source=.;Initial Catalog=MyDB;Integrated Security=True,部署到命名实例服务器时需改为Data Source=WIN-SERVER\SQLEXPRESS;Initial Catalog=MyDB;Integrated Security=True。身份验证与权限问题
如果用Windows集成身份验证(Integrated Security=True),运行程序的服务器账户(本地账户、服务账户或登录账户)需在SQL Server中存在对应的登录名,并被授予目标数据库的访问权限。若用SQL Server身份验证,需确认连接字符串里的用户名/密码正确,且SQL Server已启用混合身份验证模式,该账户拥有目标数据库的访问权限。SQL Server网络配置异常
打开SQL Server配置管理器,检查目标实例是否启用了TCP/IP协议;若是命名实例,需确保SQL Server Browser服务处于运行状态,否则程序无法定位到实例。另外,服务器本地防火墙需允许SQL Server端口(默认1433,命名实例可能为动态端口或自定义端口)的入站连接,即使程序部署在数据库服务器上,部分防火墙规则仍可能拦截本地连接。目标数据库未正确部署
确认服务器上的SQL Server实例中存在目标数据库,避免出现开发环境数据库未同步到服务器的情况,比如开发时用的是MyDB_Dev,但服务器上只创建了MyDB,或者数据库未完成还原/创建操作。环境配置未切换
.NET Core 6会根据环境加载不同配置文件,若部署时未将环境变量ASPNETCORE_ENVIRONMENT(控制台程序也可通过此变量指定)设置为Production,程序可能仍加载appsettings.Development.json中的开发环境连接字符串,导致在服务器上无法生效。
内容的提问来源于stack exchange,提问作者MTplus

