首页 > 解决方案 > .NET Core 3.1 中奇怪的 SQL Server 连接问题

问题描述

我正在使用在 Windows 10 上的 Windows 容器中运行的 SQL Server 2019 Express,并从一个简单的 .NET Core 3.1 Web API 应用程序调用它。

我的代码如下所示:

string conn = new SqlConnectionStringBuilder()
            {
                DataSource = "tcp:172.50.22.31\\SQLEXPRESS,9232",
                UserID = "sa",
                Password = "notThePassword18384.1",
                InitialCatalog = "master",
                IntegratedSecurity = false
            }.ConnectionString;

using (var con = new SqlConnection(conn))
{
    con.Open();
}

连接字符串如下所示:

Data Source=tcp:172.50.22.31\SQLEXPRESS,9232;Initial Catalog=master;Integrated Security=False;User ID=sa;Password=notThePassword18384.1

当我运行它时,我收到以下错误:

Microsoft.Data.SqlClient.SqlException:“用户 'sa' 登录失败。”

我在 .NET Core 3.1 的单元测试中运行它,从 Visual Studio 测试资源管理器运行。

现在,奇怪的是 - 我可以使用完全相同的连接字符串并通过 PowerShell 进行连接:

$sqlConnection = New-Object System.Data.SqlClient.SqlConnection $connectionString
$sqlConnection.Open()
Write-Output $sqlConnection.Database
Write-Output $sqlConnection.State
$sqlConnection.Close();

这很好用。因此,我遇到了一种情况,即相同的连接字符串在 PowerShell 中工作得很好,但在 .NET Core 3.1 中却不起作用。我什至尝试从 SQL Server Management Studio 手动连接到 SQL Server Express 容器,它也可以正常工作。我已关闭计算机上的所有防火墙。我还尝试了 C# 中连接字符串的各种排列,但它不起作用。还在 Windows 10 和 Windows Server 2016 上进行了尝试,结果相同。

有谁知道为什么这可能不起作用?对我来说,这很奇怪,它在 C# 中不起作用,但它在 PowerShell 中使用相同的连接字符串起作用。

更新:为每个 AlwaysLearning 添加了 SQL 连接字符串构建器

更新:根据 Preben Hyubrechts,尝试执行 sp_readerrorlog:

EXEC sp_readerrorlog

其中产生:

错误:18456,严重性:14,状态:7。用户“sa”登录失败。原因:评估密码时出错。[客户:172.50.22.31]

这似乎表明客户端正在连接到服务器,它只是在评估密码时出错。

有没有人对如何解决这个问题有任何想法?

标签: c#sql-serverwindowsdocker.net-core

解决方案


推荐阅读