c# - .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]
这似乎表明客户端正在连接到服务器,它只是在评估密码时出错。
有没有人对如何解决这个问题有任何想法?
解决方案
推荐阅读
- confluent-platform - 如何更改融合的休息代理正文数据模式以生成消息
- python - 如何检查项目是否有特定的类,所以我们不在 selenium 中打印它
- google-cloud-platform - 谷歌云监控 - 获取正常运行时间检查当前状态
- microsoft-graph-api - 用于反应的消息对象属性类型的 MS Team[BETA] API
- ios - 自定义 UIView 实现
- python - 从 GitHub 下载了一个 repo,我需要在 opt/data 文件夹中输入一些内容,但找不到它
- c# - 字符串替换c#为地址缩写
- bamboo - 如何使用 Terraform 和 Bamboo 构建 AWS 服务
- php - 如何向多个用户发送电子邮件,如果用户具有相同的 ID,那么在 Laravel 中只发送一封电子邮件?
- json - 将数组映射到具有特定字段作为参考的对象