0

在 Azure 帐户上,我创建了一个 AAD 用户。
我创建了 Azure SQL 数据库并将新创建的 AAD 用户分配为服务器管理员。
服务器同时具有 AAD 帐户登录和 SQL Server 登录。
我测试了使用 AAD 用户通过 SSMS 连接到服务器,它可以工作。我测试了将其他 AAD 用户添加到数据库,它可以工作(在 SSMS 中)。

现在我正在测试从控制台应用程序到数据库的连接。
我想使用 AAD 用户凭据连接到数据库。
控制台应用程序应该在没有用户登录的情况下工作,所以我想将用户硬编码到连接字符串中。

我的连接字符串是:

string connectionString = @"Server=tcp:test-server.database.windows.net,1433; Authentication=Active Directory Password; Database=mydb; User Id=aad_user_name@myaccount.onmicrosoft.com; Password=mypassword";

从我在解析连接字符串中可以看到,控制台在尝试创建 SqlConnection 时立即中断。

System.ArgumentException: Keyword not supported: 'authentication'.
   at System.Data.Common.DbConnectionOptions.ParseInternal(Dictionary`2 parsetable, String connectionString, Boolean buildChain, Dictionary`2 synonyms, Boolean firstKey)
   at System.Data.Common.DbConnectionOptions..ctor(String connectionString, Dictionary`2 synonyms)
   at System.Data.SqlClient.SqlConnectionString..ctor(String connectionString)
   at System.Data.SqlClient.SqlConnectionFactory.CreateConnectionOptions(String connectionString, DbConnectionOptions previous)
   at System.Data.ProviderBase.DbConnectionFactory.GetConnectionPoolGroup(DbConnectionPoolKey key, DbConnectionPoolGroupOptions poolOptions, DbConnectionOptions& userConnectionOptions)
   at System.Data.SqlClient.SqlConnection.ConnectionString_Set(DbConnectionPoolKey key)
   at System.Data.SqlClient.SqlConnection.set_ConnectionString(String value)
   at System.Data.SqlClient.SqlConnection..ctor(String connectionString)
   at MyApp.Program.TestDb() in C:\path\Program.cs:line 28

项目文件:

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>net6.0</TargetFramework>
    <ImplicitUsings>enable</ImplicitUsings>
    <Nullable>enable</Nullable>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="Microsoft.Data.SqlClient" Version="4.1.0" />
    <PackageReference Include="System.Data.SqlClient" Version="4.8.3" />
  </ItemGroup>

</Project>

所以,我使用的是最新的 .NET 6、Microsoft.Data.SqlClient 和 System.Data.SqlClient。

4

1 回答 1

0

我得到了它。我根本不应该使用 System.Data.SqlClient lib。Microsoft.Data.SqlClient 库中有 SqlConnection 的新实现,它有效。

问题是 VS 2022 建议使用 System.Data.SqlClient。

于 2022-02-09T21:20:14.360 回答