控制台应用连接MSSQL报错4060:登录失败无法打开数据库
我正在开发一个控制台应用,用于将某张表的行值重置为0。使用MSSMS可通过正确的用户账号连接MSSQL并执行查询,无任何问题。但运行以下代码时出现错误:
using Microsoft.Data.SqlClient; //string connectionString = "Server = (localdb)\\MSSQLLocalDBNAMEB; Database = D; Trusted_Connection = True;"; string connectionString = "server=SERVER;database=DB;UID=USER;password=PASSWORD"; using (var cnn = new SqlConnection(connectionString)) { cnn.Open(); var query = @"UPDATE CurrentMenus SET Ate_today = 0"; var cmd = new SqlCommand(query, cnn); cmd.ExecuteNonQuery(); cnn.Close(); }
错误信息如下:
Unhandled exception. Microsoft.Data.SqlClient.SqlException
(0x80131904): Cannot open database "DB" requested by the
login. The login failed. Login failed for user 'USER'. at
Microsoft.Data.SqlClient.SqlInternalConnection.OnError(SqlException
exception, Boolean breakConnection, Action1 wrapCloseInAction) at Microsoft.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose) at Microsoft.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady) at Microsoft.Data.SqlClient.SqlConnection.TryOpen(TaskCompletionSource1
retry, SqlConnectionOverrides overrides) at
Microsoft.Data.SqlClient.SqlConnection.Open(SqlConnectionOverrides
overrides) at Microsoft.Data.SqlClient.SqlConnection.Open() at
Program.$(String[] args) in
C:\Users\mshapkaroski\Desktop\C#\Reset
Meals\ResetMeals\ResetMeals\Program.cs:line 9
ClientConnectionId:4923a01c-7fe4-4b23-b2eb-68d8b341d975 Error
Number:4060,State:1,Class:11
我尝试使用本地连接字符串也无法解决问题:
//string connectionString = "Server = (localdb)\\MSSQLLocalDBNAMEB; Database = D; Trusted_Connection = True;"
请问问题可能出在哪里?
连接字符串参数错误
- 核对
SERVER、DB、USER、PASSWORD是否和MSSMS中使用的完全一致,注意特殊场景下的大小写(比如数据库开启大小写敏感配置) - 如果是远程服务器,确认实例名是否正确:若为命名实例,连接字符串需写成
SERVER\INSTANCE_NAME,默认实例可只写SERVER - 若密码包含特殊字符(如
;、"),需用双引号包裹连接字符串或对特殊字符转义
- 核对
SQL Server账号权限配置问题
- 确认
USER账号拥有目标DB数据库的访问权限,且具备CurrentMenus表的UPDATE权限。注意MSSMS可能使用Windows认证登录,而代码使用SQL Server认证,两者权限可能不同 - 检查该登录账号是否已映射到
DB数据库的用户,并分配了合适的角色(如db_datawriter)
- 确认
LocalDB相关配置问题(针对本地连接尝试)
- 确认LocalDB实例名正确:打开命令行执行
sqllocaldb info查看已存在的实例,默认实例为MSSQLLocalDB,你写的MSSQLLocalDBNAMEB可能不存在 - 验证
D数据库在LocalDB实例中存在,且当前Windows账号(因使用Trusted_Connection=True)有权限访问该数据库 - 确保LocalDB实例处于运行状态:执行
sqllocaldb start 实例名启动目标实例
- 确认LocalDB实例名正确:打开命令行执行
其他排查点
- 远程服务器防火墙:确认服务器防火墙允许客户端IP访问SQL Server默认端口(1433)
- SQL Server服务状态:远程服务器需确保SQL Server服务已启动;LocalDB实例可通过上述
sqllocaldb start命令启动
内容的提问来源于stack exchange,提问作者Maria

