使用 SQL 客户端将时间触发的 Azure 函数与数据库连接
Posted
技术标签:
【中文标题】使用 SQL 客户端将时间触发的 Azure 函数与数据库连接【英文标题】:Connect time-triggered Azure Function with Database using SQL Client 【发布时间】:2021-08-13 12:44:18 【问题描述】:我正在使用 SQL 客户端将时间触发的 Azure 函数与 SQL Server 连接,但我没有得到任何数据。
这是我的代码:
local.settings.json
:
"IsEncrypted": false,
"Values":
"AzureWebJobsStorage": "UseDevelopmentStorage=true",
"FUNCTIONS_WORKER_RUNTIME": "dotnet",
"DefaultConnection": "Data Source=; Initial Catalog=;User ID=;Password=;MultipleActiveResultSets=True;Persist Security Info=True;"
Function1.cs
:
public class Function1
[FunctionName("Function1")]
public static async Task Run([TimerTrigger("0 45 14 * * *")]TimerInfo myTimer, ILogger log)
var sqlConnection = Environment.GetEnvironmentVariable("DefaultConnection");
using (SqlConnection conn = new SqlConnection(sqlConnection))
conn.Open();
var text = "SELECT * from UserMaster where UserId=1234";
//This query has around 50 data in the database but still getting no data in it.
using (SqlCommand cmd = new SqlCommand(text, conn))
using (SqlDataReader reader = await cmd.ExecuteReaderAsync())
while (reader.Read())
log.LogInformation($"reader.GetString(0)reader.GetString(1) rows selected");
Console.WriteLine("0 1", reader.GetString(0), reader.GetString(1));
conn.Close();
log.LogInformation($"C# Timer trigger function executed at: DateTime.Now");
我不明白它有什么问题。请推荐
【问题讨论】:
你有什么异常吗?调试期间会发生什么,尤其是 SqlConnection 和执行 SqlCommand。他们执行正确吗?我假设您在 local.settings.json 中删除了“DataSource”、“UserID”等的值,因为您不想在 *** 上发布它们,但通常那里有值? 嗨@rekcul,我没有得到任何异常,它只表明该表没有记录。如果我使用ExecuteScalarAsync
而不是ExecuteReaderAsync
它可以完美运行,但问题是我想要所有记录而不是第一行的单列。我还特意在***中删除了“DataSource”、“UserID”等的值。
怎么回事?你有休息吗?感谢您提前回复:)
【参考方案1】:
我认为您可以改用public override object this[string name] get;
。这是我的代码,效果很好,你可以和你的比较一下。
using System;
using System.IO;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Extensions.Http;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.Logging;
using Newtonsoft.Json;
using System.Data.SqlClient;
using System.Collections.Generic;
namespace Function0602
public static class Function1
[FunctionName("Function1")]
public static async Task<List<tinyTest>> Run(
[HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)] HttpRequest req,
ILogger log)
List<tinyTest> list = new List<tinyTest>();
var str = "connect_string";
using (SqlConnection conn = new SqlConnection(str))
conn.Open();
var text = "select * from tinyTest;";
using (SqlCommand cmd = new SqlCommand(text, conn))
using (SqlDataReader reader = await cmd.ExecuteReaderAsync())
while (reader.Read())
tinyTest res = new tinyTest();
//SqlDataReader skd provide the method of reader["column_name"]
res.user_id = (string)reader["user_id"];
res.user_name = (string)reader["user_name"];
res.age = (int)reader["age"];
list.Add(res);
conn.Close();
log.LogInformation($"C# Timer trigger function executed at: DateTime.Now");
return list;
public class tinyTest
public string user_id get; set;
public string user_name get; set;
public int age get; set;
【讨论】:
所以据我了解,while循环中的步骤没有执行? 我认为您可以检查阅读器是否有行以确保查询得到正确的结果。 i.stack.imgur.com/6hoAe.png 如果为 false,则表示没有行响应。以上是关于使用 SQL 客户端将时间触发的 Azure 函数与数据库连接的主要内容,如果未能解决你的问题,请参考以下文章
Azure 函数:如何将 http 触发器函数的查询字符串参数绑定到 Cosmos DB 的 SQL 查询
如何为 Http 触发的 Azure 函数(隔离/进程外)生成 Api 客户端?
天蓝色函数时间触发器和天蓝色sql数据库与c#之间的连接:错误。如何修复它