如何在Azure函数中使用Microsoft.Data.SqlClient?

wlzqhblo  于 2022-11-17  发布在  其他
关注(0)|答案(1)|浏览(167)

我通过门户创建了一个Azure函数,并希望使用Active Directory托管标识打开与SQL Server的连接。为了使此连接字符串正常工作,我必须使用Microsoft.Data.SqlClient。但当我尝试在Azure内使用此库时,该函数停止工作。
只需添加以下内容即可:

using Microsoft.Data.SqlClient

我不能使用标准的System.Data.SqlClient命名空间,因为当我创建新的连接字符串时,它不喜欢

Server=db.database.windows.net; Authentication=Active Directory Managed Identity;Encrypt=True;Database=myDb

如何在Azure函数中使用Active Directory托管身份验证方法打开SQL连接?

7bsow1i6

7bsow1i61#

您需要在function.proj文件中添加包引用并将其上传到function app中,然后包将被添加到代码中。下面是我连接sql数据库并从表中检索数据所遵循的步骤。
1.已创建一个表的sql数据库。
1.接下来创建了一个运行时堆栈为.Net的函数应用程序,版本为3.1。
1.添加Sql数据库连接字符串到函数应用程序配置,如下所示。

1.创建了一个Http触发器函数并将默认代码替换为以下代码,

#r "Newtonsoft.Json"

#r "System.Configuration"

using System;

using System.Data;

using System.Net;

using Newtonsoft.Json;

using System.Data.SqlClient;

using Microsoft.Extensions.Configuration;

using System.Configuration;

using Microsoft.AspNetCore.Mvc;

using Microsoft.Extensions.Primitives;

public  static  async Task<object> Run(HttpRequestMessage req, ILogger log)

{

string responseMessage;

//We retrieve the id field, which comes as a parameter to the function, by deserializing req.Content.

string jsonContent = await req.Content.ReadAsStringAsync();

dynamic data = JsonConvert.DeserializeObject(jsonContent);

//If there is no username, we return the error message.

var connectionString = Environment.GetEnvironmentVariable("SqlConnection", EnvironmentVariableTarget.Process);

//Azure SQLDB Log

var logAdded = true;

try

{

//We get the Connection String in the Function App Settings section we defined.

using(SqlConnection connection = new SqlConnection(connectionString))

{

//Opens Azure SQL DB connection.

connection.Open();

string qs = $"SELECT * FROM [dbo].[Persons] where [Personid] = 1";

SqlCommand command = new SqlCommand(qs, connection);

string queryop = "";

using (SqlDataReader reader = command.ExecuteReader())

{

queryop = sqlDatoToJson(reader);

}

responseMessage = (queryop);

connection.Close();

}

}

catch(Exception e)

{

logAdded = false;

log.LogError(e.ToString());

responseMessage = e.ToString();

// connection.Close();

}

return  new OkObjectResult(responseMessage);

}

static String sqlDatoToJson(SqlDataReader dataReader)

// transform the returned data to JSON

{

var dataTable = new DataTable();

dataTable.Load(dataReader);

string JSONString = string.Empty;

JSONString = JsonConvert.SerializeObject(dataTable);

return JSONString;

}

1.在名为function.proj的文件中添加了以下代码,并使用上载选项将其上载到函数。

<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Dapper" Version="2.0.78" />
<PackageReference Include="Microsoft.Data.SqlClient" Version="4.2.1.0" />
<PackageReference Include="Microsoft.WindowsAzure.ConfigurationManager" Version="3.2.3" />
</ItemGroup>
</Project>


6.文件上传后,您可以在下拉列表中看到文件

7.经过测试的功能,能够从数据库中获取数据,

参考link

相关问题