Я сделал это с помощью следующих шагов:
Скрипт Azure Sql:
CREATE TABLE AzureSqlTable(
[Id] [int] PRIMARY KEY IDENTITY(1,1) NOT NULL,
[FirstName] [nvarchar](max) NULL,
[LastName] [nvarchar](max) NULL,
[Email] [nvarchar](max) NULL,
)
GO
Класс функций:
public class AzureFunctionV2SqlTableClass
{
public int Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string Email { get; set; }
public string DbOperationType { get; set; }
}
Тело функции Azure:
[FunctionName("FunctionV2SqlConnectionExample")]
public static async Task<IActionResult> Run(
[HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)] HttpRequest req,
ILogger log)
{
log.LogInformation("C# HTTP trigger function processed a request.");
//Read Request Body
var content = await new StreamReader(req.Body).ReadToEndAsync();
//Extract Request Body and Parse To Class
AzureFunctionV2SqlTableClass objFuncV2Sql = JsonConvert.DeserializeObject<AzureFunctionV2SqlTableClass>(content);
// variable for global message.
dynamic validationMessage;
// Validate param because, I am checking here.
if (string.IsNullOrEmpty(objFuncV2Sql.FirstName))
{
validationMessage = new OkObjectResult("First Name is required!");
return (IActionResult)validationMessage;
}
if (string.IsNullOrEmpty(objFuncV2Sql.LastName))
{
validationMessage = new OkObjectResult("Last Name is required!");
return (IActionResult)validationMessage;
}
if (string.IsNullOrEmpty(objFuncV2Sql.Email))
{
validationMessage = new OkObjectResult("Email is required!");
return (IActionResult)validationMessage;
}
//Read database Connection
var sqlConnection = "Data Source =tcp:sqlserverInstancenNameFromAzurePortal.database.windows.net,1433;Initial Catalog=YouDbName;Persist Security Info=False;User ID=ServerUserName;Password=ServerPass;MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;";
//Sql Execution Message varible
dynamic sqlExecutionMessage;
//Define Db operation Type
if (objFuncV2Sql.DbOperationType.ToUpper() == "INSERT")
{
using (SqlConnection conn = new SqlConnection(sqlConnection))
{
conn.Open();
var text = "INSERT INTO AzureSqlTable VALUES ('" + objFuncV2Sql.FirstName + "', '" + objFuncV2Sql.LastName + "', '" + objFuncV2Sql.Email + "') ";
using (SqlCommand cmd = new SqlCommand(text, conn))
{
sqlExecutionMessage = await cmd.ExecuteNonQueryAsync();
}
conn.Close();
}
validationMessage = new OkObjectResult(sqlExecutionMessage + " ROW INSERTED");
return (IActionResult)validationMessage;
}
//As we have to return IAction Type So converting to IAction Class Using OkObjectResult We Even Can Use OkResult
var result = new OkObjectResult("Operation Falid! No Relevant Command Found!");
return result;
}
Требуется ссылка:
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.Net.Http;
using System.Data.SqlClient;
Nuget Paackage Я использовал:
System.Data.SqlClient(4.6.1)
Скачать из менеджера пакетов Nuget. Смотрите снимок экрана ниже:
Образец сообщения:
{
"FirstName": "Kiron New Sql FunctionV2",
"LastName":"Kiron New Local Sql",
"Email":"KironTest@microsoft.com",
"DbOperationType":"INSERT"
}
Точка для запоминания:
Следуйте тому, что я точно пытался продемонстрировать здесь, без инжиниринга
перед тем как запустить его
Просто обновите строку подключения с помощью Azure Sql Server
Credentials
- Избавьтесь от {} от пароля, поскольку я не указал его в моем примере
Кроме того, при копировании строки подключения с портала в
{password}
просто опустить {}
- Если ваша функция обнаружила ошибку
Azure Portal SQL Db
относительно вашего IP-адреса клиента. В этом случае просто добавьте ваш клиент
IP, как показано ниже:
Шаг: 1
Шаг: 2
Примечание: Я только что попытался показать операцию вставки. Надеюсь, это будет работать соответственно.