无法将.Net SqlClient与运行时一起使用2.获取有关缺少引用的以下错误:
2018-04-09T13:48:51.172 [信息]编译失败。
2018-04-09T13:48:58.071 [信息]功能脚本 ' SqlExecutorActivity'改变。装载。
2018-04-09T13:48:58.363 [错误] run.csx(29,5):错误CS0246:类型 或命名空间名称' SqlConnectionStringBuilder'无法找到(是 你错过了使用指令或程序集引用?)
2018-04-09T13:48:58.376 [错误] run.csx(29,68):错误CS1069:类型 name' SqlConnectionStringBuilder'在命名空间中找不到 ' System.Data.SqlClient的&#39 ;.此类型已转发到程序集 ' System.Data.SqlClient,Version = 4.2.0.2,Culture = neutral, 公钥= b03f5f7f11d50a3a'考虑添加对它的引用 组装
2018-04-09T13:48:58.387 [错误] run.csx(71,28):错误CS0246:类型 或命名空间名称' AzureServiceTokenProvider'无法找到(是 你错过了使用指令或程序集引用?)
2018-04-09T13:48:58.396 [错误] run.csx(78,27):错误CS0246:类型 或命名空间名称' SqlConnection'无法找到(你错过了吗? using指令或程序集引用?)
2018-04-09T13:48:58.417 [错误] run.csx(83,30):错误CS0246:类型 或命名空间名称' SqlCommand'无法找到(你错过了吗? 使用指令或程序集引用?)
#r "System.Data"
using System.Threading;
using System.Threading.Tasks;
using Newtonsoft.Json;
using System.Data.SqlClient;
using System.Collections.Generic;
public static async Task<string> Run(string requestData, TraceWriter log)
{
dynamic data = JsonConvert.DeserializeObject<MaintQueueData>(requestData);
log.Info($"Doing work in Server {data.Server}.");
SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder();
builder["Server"] = data.Server;
builder["Initial Catalog"] = data.Database;
builder["Connect Timeout"] = 30;
builder["Trusted_Connection"] = true;
builder["Integrated Security"] = false;
log.Info($"{builder.ConnectionString} ... HAHA no passwords br0ski!");
var token = (String)null;
var result = (String)null;
try
{
token = await ADAuthentication.GetSqlTokenAsync();
}catch(Exception e)
{
string error = $"Failed to authenticate with AAD: {e.Message}";
log.Error($"{error}");
return error;
}
try
{
result = await ExecuteInSql(builder.ConnectionString, token, data.Query);
}catch(Exception e)
{
string error = $"Failed to execute SQL: {e.Message}";
log.Error($"{error}");
return error;
}
log.Info($"Query Complete: {data.Query}, Results: {result}");
return $"Query Complete: {data.Query}, Results: {result}";
}
public static class ADAuthentication
{
const String SqlResource = "https://database.windows.net/";
public static Task<String> GetSqlTokenAsync()
{
var provider = new AzureServiceTokenProvider();
return provider.GetAccessTokenAsync(SqlResource);
}
}
private static async Task<String> ExecuteInSql(String connectionString, String token, String Query)
{
using (var conn = new SqlConnection(connectionString))
{
conn.AccessToken = token;
await conn.OpenAsync();
String text = Query;
using (var cmd = new SqlCommand(text, conn))
{
var result = await cmd.ExecuteScalarAsync();
return result as String;
}
}
}
答案 0 :(得分:1)
我已在httptrigger
中测试了您的代码并遇到了同样的问题。
但是,我注意到当运行时为&#34; beta &#34;时,它会加载using Microsoft.AspNetCore.Mvc;
包。
如果您的项目平台是 .netcore , it is not supported connect to Azure SQL server via AAD Authentication.
所以,我建议你可以尝试使用azure函数的运行时1来实现你想要的效果。
Azure Functions runtime 2.0处于预览状态,目前尚未支持Azure功能的所有功能。
此外,您可以使用Active Directory密码身份验证进行连接。
要使用集成身份验证和Azure AD身份连接到数据库,必须将数据库连接字符串中的Authentication关键字设置为Active Directory Integrated。以下C#代码示例使用ADO .NET。
string ConnectionString =
@"Data Source=n9lxnyuzhv.database.windows.net; Authentication=Active Directory Integrated; Initial Catalog=testdb;";
SqlConnection conn = new SqlConnection(ConnectionString);
conn.Open();