提问人:Vojtěch Dohnal 提问时间:11/15/2023 最后编辑:Vojtěch Dohnal 更新时间:11/20/2023 访问量:85
如何在 Azure 上为 SQL 存储过程创建 API 包装器
How to create API wrapper for SQL stored procedure on Azure
问:
我在 Azure SQL 数据库上有一个存储过程,我可以用它来执行
EXEC [dbo].[PGET_JSON] @code = N'XYZ'
它返回 FOR JSON 结果
{
"XX": [
{
"DocOstatni": [
{
"Type": "Something",
"Published": "2023-08-28T20:14:18.617",
"Order": 1,
"Name": "Something",
"File": "PV_XXX_6.PDF",
},{ ...
我需要在 Azure 中创建一个 (.net?) 应用程序,该应用程序将在公共 URL 上公开此存储过程的结果,参数@code如下
这将返回带有参数的存储过程的输出。[PGET_JSON]
@code='XYZ'
我在 Azure 上需要什么,应该使用什么类型的 Azure 服务,我应该使用 Azure Web 应用程序还是其他东西,最简单、最便宜的解决方案是什么?
我已经有一个 Azure Web 应用程序,也许将一个 sipmle API 添加到现有应用程序会更好?
答:
1赞
Vivek Vaibhav Shandilya
11/16/2023
#1
如果我已经有一个 Azure Web 应用,那么将 rest api 添加到现有应用的成本会不会低得多?
使用基于消耗的函数应用比使用 Azure Web 应用成本更低。
正如@Dan Guzmann 建议使用 Azure Function。
我已使用 Azure 函数来获取存储过程。它对我有用。
#My 存储过程
我在 azure 函数中使用了 HTTP 触发器。
#My 代码:
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;
using Microsoft.Data.SqlClient;
namespace FunctionApp6
{
public static class Function1
{
[FunctionName("Function1")]
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.");
string code = req.Query["code"];
if (string.IsNullOrEmpty(code))
{
return new BadRequestObjectResult("Please provide a valid code parameter.");
}
string connectionString = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
using (SqlConnection connection = new SqlConnection(connectionString))
{
connection.Open();
using (SqlCommand command = new SqlCommand("PGET_JSON", connection))
{
command.CommandType = CommandType.StoredProcedure;
command.Parameters.AddWithValue("@code", code);
using (SqlDataAdapter adapter = new SqlDataAdapter (command))
{
DataTable dataTable = new DataTable();
adapter.Fill(dataTable);
if (dataTable.Rows.Count>0)
{
string result = JsonConvert.SerializeObject(dataTable);
return new OkObjectResult(result);
}
else
{
return new NotFoundObjectResult("No data found");
}
}
}
}
}
}
}
输出
:
[{"Id":123,"Name":"Vivek"}]
#Local:
#AZURE:
评论
0赞
Vojtěch Dohnal
11/16/2023
谢谢,我现在正在使用现有的网络应用程序......但是,在发布到 Azure 后,路由停止工作...
0赞
Vivek Vaibhav Shandilya
11/17/2023
@VojtěchDohnal 您能否让我知道您使用的框架 Web 应用程序还是控制台应用程序.net
评论