You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

从ASP.NET连接SQL Server失败求助:内部连接致命错误

问题:ASP.NET无法连接本地SQL Server数据库(SQL Server身份验证)

本地创建SQL Server数据库,使用SSMS管理,已添加SQL Server身份验证的登录名,可在SSMS中正常连接,但ASP.NET项目中无法实现连接。连接字符串信息均取自SSMS的连接属性,且在同一台电脑上操作,已确认代码逻辑无问题,怀疑问题出在连接字符串错误或数据库配置不当,数据库已启用SQL Server和Windows身份验证模式。

连接字符串

Server=serverName;Database=databaseName;User Id=userName;Password=password;

相关代码

DatabaseService类

public class DatabaseService
{
    private readonly string _connectionString = ...;

    public IEnumerable<Country> GetCountries()
    {
        using var connection = new SqlConnection(_connectionString);
        connection.Open();
        
        using var cmd = new SqlCommand();
        cmd.Connection = connection;
        cmd.CommandText = "SELECT ID, CountryName FROM Countries";
        
        var dr = cmd.ExecuteReader();
        var countries = new List<Country>();

        while (dr.Read())
        {
            var country = new Country()
            {
                Id = Convert.ToInt32(dr["ID"]),
                Name = dr["CountryName"].ToString()
            };
            countries.Add(country);
        }
        
        connection.Close();
        return countries;
    }
}

CountriesController控制器

[Route("api/countries")]
[ApiController]
public class CountriesController : ControllerBase
{
    private DatabaseService _dbService;

    public CountriesController()
    {
        _dbService = new DatabaseService();
    }

    [HttpGet]
    public IActionResult GetCountry()
    {
        IEnumerable<Country> countries = _dbService.GetCountries();

        return Ok(countries);
    }
}

报错信息

Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware[1]
      An unhandled exception has occurred while executing the request.
      System.InvalidOperationException: Internal connection fatal error.
排查思路
  • 连接字符串细节校验
    • 确认Server值准确性:本地默认实例用localhost或.,命名实例需用localhost\InstanceName,完全匹配SSMS连接属性中的服务器名称
    • 核对User Id和Password的拼写,注意密码区分大小写
    • 尝试添加TrustServerCertificate=True参数,解决本地SSL证书验证问题,修改后的连接字符串:
      Server=serverName;Database=databaseName;User Id=userName;Password=password;TrustServerCertificate=True;
      
  • 数据库配置检查
    • 确认SQL Server允许远程连接:右键SSMS中的服务器→属性→连接,勾选"允许远程连接到此服务器"
    • 检查SQL Server Browser服务状态:命名实例需确保该服务已启动,否则ASP.NET无法定位实例
    • 验证登录名权限:在目标数据库的"安全性→用户"中,确认对应登录名已创建用户,并拥有db_datareader等必要操作权限
  • 代码与环境检查
    • 确认项目已正确引用Microsoft.Data.SqlClient或System.Data.SqlClient NuGet包,版本与SQL Server兼容
    • 在connection.Open()处添加try-catch块,捕获完整异常信息(Exception.ToString()),获取更具体的错误原因
  • SQL Server日志排查
    • 打开SSMS→管理→SQL Server日志,查看是否有登录失败记录,日志会明确标注失败原因(如权限不足、协议不匹配等)

内容的提问来源于stack exchange,提问作者wydra__

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 01:52:08