在 .NET 6 上通过 C# 代码访问 DataVerse 数据并对其运行 SQL 语句(Azure Function)

mar*_*c_s 5 c# azure-functions dynamics-365 dataverse .net-6.0

我正在云中使用 Dynamics365 CE。我正在尝试运行一些相当复杂的查询,这些查询是我作为 SQL 脚本构建的(使用 XrmToolBox 的精彩“SQL-4-CDS”插件)。

现在我知道我可以通过 TDS 端点连接到 Dataverse 数据存储(如果启用 - 在我的情况下),并且从 SSMS 中,它工作得很好:

Server Name    = myorg.crm4.dynamics.com,5558
Authentication = Azure Active Directory - Password
User Name      = my company e-mail
Run Code Online (Sandbox Code Playgroud)

我可以连接到 Dataverse,并运行我的查询 - 一切都很棒。

现在我想对我正在编写的 C# 代码(在 .NET 6 上运行)执行相同的操作,最终应该成为一个 Azure 函数 - 所以它是一个“服务器到服务器”,后面 -场景,没有交互式登录上下文的场景。

我可以使用此连接字符串通过 TDS 端点连接到 Dataverse - 只要我以交互方式运行应用程序 - 就像我一样,在我的用户上下文中:

Server=myorg.crm4.dynamics.com,5558;Authentication=Active Directory Password;Database=my_dbname;User Id=my_email;Password=my_pwd;
Run Code Online (Sandbox Code Playgroud)

但是,这不适用于服务器到服务器“守护程序”样式的设置。

由于我使用 .NET 6(用于 Azure 函数),并且由于我想运行一些自定义 SQL 语句,因此我无法使用“CRM XRM 客户端”工具(带有类IOrganizationService) - 我需要直接使用 ADO.NET - 我是否可以定义一个 ADO.NET 兼容的连接字符串,它将使用客户端 ID 和客户端密钥(我都可以使用)?

我已经尝试了很多设置值Authentication=......- 但到目前为止没有一个有效。我可以在哪里找到此连接字符串参数支持的值的完整列表?

感谢您的帮助或指点!

小智 2

我知道这是一个老问题,但如果它仍然对任何人有帮助:您应该能够使用该SqlConnection.AccessToken属性来授权您与 TDS 端点的连接。要获取访问令牌,您需要使用应用程序用户客户端 ID 和密钥来获取令牌。

您还可以使用SQL 4 CDS ADO.NET 提供程序ServiceClient-从 Dataverse SDK创建后,将其传递给Sql4CdsConnection构造函数:

using var con = new Sql4CdsConnection(service);
using var cmd = con.CreateCommand();
cmd.CommandText = "SELECT ...";
Run Code Online (Sandbox Code Playgroud)