我在Azure中创建了HTTP触发器功能,希望从Azure SQL数据库中读取数据。我在Function App的Connection Strings部分中配置了连接字符串,如下图所示
我使用下面的代码尝试读取连接字符串。
var cnnString = ConfigurationManager.ConnectionStrings["TempleDataContext"].ConnectionString;
执行时,我在日志中看到以下错误。
2018-10-24T18:13:56.385 [Information]函数'donors1'的脚本 改变了。正在重新加载。 2018-10-24T18:13:56.601 [信息]编译 成功了。 2018-10-24T18:13:58.511 [信息]正在执行 'Functions.donors1'(Reason ='此函数以编程方式被调用 通过主机API。',Id = 8b140087-4b50-450e-829c-f7abd9e3a1eb) 2018-10-24T18:13:59.067 [信息] C#HTTP触发函数 处理了一个请求。 2018-10-24T18:13:59.245 [错误]已执行 'Functions.donors1'(失败,ID = 8b140087-4b50-450e-829c-f7abd9e3a1eb) 对象引用未设置为对象的实例。
我想测试在ConnectionStrings对象上返回的所有内容,并将代码更改为
var cnnStrings = ConfigurationManager.ConnectionStrings;
foreach(var c in cnnStrings)
{
log.LogInformation(c.ToString());
}
当我检查日志时,这是我看到的信息。
2018-10-24T18:16:53.755 [Information]函数'donors1'的脚本 改变了。正在重新加载。 2018-10-24T18:16:54.540 [信息]编译 成功了。 2018-10-24T18:16:55.917 [信息]正在执行 'Functions.donors1'(Reason ='此函数以编程方式被调用 通过主机API。',Id = 508c49bf-d5e6-4a99-b1db-e1a79545fa91) 2018-10-24T18:16:56.063 [信息] C#HTTP触发函数 处理了一个请求。 2018-10-24T18:16:56.070 [信息]数据 source =。\ SQLEXPRESS;集成 安全性= SSPI;附加DBFilename = | DataDirectory | aspnetdb.mdf;用户 Instance = true 2018-10-24T18:16:56.079 [信息]已执行 'Functions.donors1'(成功, id = 508c49bf-d5e6-4a99-b1db-e1a79545fa91)
我对从哪里获取ConnectionString信息感到困惑。
为了测试一种方法,我还添加了几行内容来读取应用程序设置
var appSettings = ConfigurationManager.AppSettings;
foreach(var a in appSettings)
{
log.LogInformation(a.ToString());
}
它没有显示这些行的任何信息。
我正在使用C#脚本直接在门户中编写Azure函数。我想念什么吗?任何帮助将不胜感激。
答案 0 :(得分:4)
在功能v2中,您应该使用Environment.GetEnvironmentVariable("string_name",EnvironmentVariableTarget.Process)
从应用程序设置和连接字符串中获取值。
有关连接字符串的说明:
使用上述方法时,第一个参数取决于类型。这意味着当连接字符串的类型为SQLAZURE
时,第一个参数应为SQLAZURE +“ CONNSTR” +“ _stringName”。屏幕截图如下:
代码示例如下:
//for connection string
string connStr = Environment.GetEnvironmentVariable("SQLAZURECONNSTR_sqldb_connection",EnvironmentVariableTarget.Process);
log.LogInformation("the connection string is: " + connStr);
//for app settings
string appStr = Environment.GetEnvironmentVariable("AzureWebJobsStorage",EnvironmentVariableTarget.Process);
log.LogInformation("the string in app settings is: " + appStr);
答案 1 :(得分:2)
我遇到了同样的事情。除非您使用Entity Framework(如图像所示),否则不会附加连接字符串。我只是将连接字符串放在appsettings中,然后继续。