【问题标题】:Trouble connecting to Sql Azure Db from C# using Active Directory password使用 Active Directory 密码从 C# 连接到 Sql Azure Db 时出现问题
【发布时间】:2019-11-15 16:27:04
【问题描述】:

我正在设置 CRM 360 数据导出服务 (DES) 需要连接到的 Azure 数据库。我可以使用 SSMS 手动执行此操作并使用我的 azure 帐户登录。

然后将 DES 服务帐户设置为外部提供者。

从外部提供商创建用户 DynamicsDataExportService

一切都好,但是我希望自动化该过程,因此我需要使用 C# 登录到服务并以这种方式连接和运行代码。

我正在使用以下代码运行带有 System.Data.SqlClient 4.7 的核心 2.2:

        var cs = "data source=tcp:dvzxfsdg-sql.database.windows.net,1433;initial catalog=dfsdfs-sqldb; Authentication=Active Directory Integrated";
        using (var connection = new SqlConnection(cs))
        {
            connection.Open();

令人讨厌的是它给出了错误

“System.ArgumentException:'不支持关键字:'身份验证'。'”。

我很确定我犯的错误是相当基本的,但我似乎无法深入了解它。因此,任何指针都非常感激。

【问题讨论】:

  • 尝试从连接字符串中删除 tcp:,我认为您也不需要指定端口 (1433)。
  • 我对 SQL 所做的是先获取 SQL DB 的 Azure AD 访问令牌,然后在打开之前将其分配给 SqlConnection。连接字符串只定义了服务器和数据库名称,没有别的。
  • 我终于意识到 dotnet core 2.0 不支持这种类型的登录,所以最终不得不掏出一个框架版本的应用程序。相同的代码当时运行良好。感谢大家尝试提供帮助。非常感谢。

标签: c# sql azure crm des


【解决方案1】:

您可能想尝试使用SQLConnectionStringBuilder 来正确格式化您的连接字符串。这有助于避免使用纯文本连接字符串时可能遇到的拼写错误和问题。之后,就可以直接在builder上直接设置AuthenticationMethod了。

SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder ()
    {
        DataSource = "ServerName",
        InitialCatalog = "DatabaseName",
        etc...
    }

builder.Authentication = SqlAuthenticationMethod.ActiveDirectoryInteractive;
SqlConnection sqlConnection = new SqlConnection(builder.ConnectionString);

如果 SQL db 是 Azure SQL db,那么您可以查看资源的概览页面并找到“连接字符串”边栏选项卡。这可能有助于解决您所提供的连接字符串所遇到的问题。

查看this answer 了解有关构建连接字符串的更多信息

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-01
    • 2017-10-24
    • 2014-01-06
    • 1970-01-01
    相关资源
    最近更新 更多