在本文中,将探讨一个有趣的话题,即如何在每次收到请求时将记录插入到SQL Azure数据库中。为此,假设已经有一个运行中的Azure SQL数据库,并且已经创建了一个函数应用。
首先,需要在Azure门户中创建一个Azure SQL数据库。然后,创建一个名为LogRequest
的表,该表包含两列:Id [PK, int, identity]
和 Log [nvarchar(max)]
。使用了Visual Studio 2015社区版来连接到SQL数据库并创建了这个新表。
点击“新建函数”,然后选择“HttpTrigger – C#”,将函数命名为“HttpTriggerSqlDatabase”,这样便于定位。一旦获得了默认的代码视图,找到代码文本框底部的小链接“查看文件”。点击“+”号添加新文件,将文件命名为“project.json”。将使用这个文件来添加所有必需的nuget包。
复制并粘贴以下json内容并保存:
{
"frameworks": {
"net46": {
"dependencies": {
"Dapper": "1.42.0",
"System.Data.SqlClient": "4.1.0",
"Microsoft.WindowsAzure.ConfigurationManager": "3.2.1"
}
}
}
}
应该开始看到日志正在恢复所有缺失的nuget包,然后编译代码。将数据库连接字符串关联到函数应用。为此,点击顶部链接“函数应用设置”,然后点击按钮“转到应用服务设置”。这将打开函数应用设置页面,然后点击数据内容,添加。
一旦成功添加了一个名为“SqlConnection”的连接,关闭视图并使用面包屑导航回到函数。点击函数“HttpTriggerSqlDatabase”,复制下面的代码片段。
using System.Net;
using Dapper;
using System.Data.SqlClient;
using System.Configuration;
public static async Task<HttpResponseMessage> Run(HttpRequestMessage req, TraceWriter log)
{
log.Info($"C# HTTP trigger function processed a request. RequestUri={req.RequestUri}");
var successful = true;
try
{
var cnnString = ConfigurationManager.ConnectionStrings["SqlConnection"].ConnectionString;
using (var connection = new SqlConnection(cnnString))
{
connection.Open();
var rLog = await req.Content.ReadAsAsync<LogRequest>();
// insert a log to the database
// NOTE: Execute is an extension method from Dapper library
connection.Execute("INSERT INTO [dbo].[LogRequest] ([Log]) VALUES (@Log)", rLog);
log.Info("Log added to database successfully!");
}
}
catch
{
successful = false;
}
return !successful ? req.CreateResponse(HttpStatusCode.BadRequest, "Unable to process your request!") : req.CreateResponse(HttpStatusCode.OK, "Data saved successfully!");
}
public class LogRequest
{
public int Id { get; set; }
public string Log { get; set; }
}
现在保存代码,并确保日志显示函数编译成功。
滚动到页面的“运行”部分,可以调用API。使用了LinqPad从数据库中检索记录,以验证数据是否确实成功保存。