c# - 如何编写可以调用任何存储过程的通用 Web API 函数
问题描述
我想在 .NET CORE 2.1 (C#) 中编写一个控制器,它公开一个SINGLE函数,该函数可用于调用 sql server 中的任何存储过程。
所以这个函数必须能够接受未定义参数的列表,并且它必须能够返回存储过程正在创建的数据集。
这可能吗?我是 Web API 的新手。我在 SQL Server 和 Windows 客户端中练习过,但我对 Web API 和 C# 后端一般来说是新手。
解决方案
与每个大问题一样,考虑将其拆分。您需要一个可以执行任何存储过程的方法。
执行存储过程需要什么?
- 其名称
- 参数名称、类型和值的列表
- 最后,您需要返回未指定的数据。
所以,找到一种方法来传递这些数据,然后找到一种方法将所有这些数据转换成你的存储过程接受的东西,这取决于你用什么来调用它,是直接 ADo.Net,是 Dapper,是EF之类的吗?
可能吗?是的,当然,只要您找到做这些事情的方法。
开始简单,首先是一个没有输入参数的存储过程。让它工作,然后继续使用一个参数进行存储过程,看看它是如何进行的。
您的第一个模型可能如下所示:
public class InputModel
{
public string StoredProcedureName {get;set;}
public List<StoredProcedureParameter> StoredProcedureParameters
}
然后添加参数部分:
public class StoredProcedureParameter
{
public string Name { get;set; }
public TypeEnum ParamType { get; set }
public string Value { get;set; }
}
这是我将如何处理它的一个例子。
现在我有了我的输入,我只需要将这些转换为用于执行 sp 的任何内容。
一旦您设法执行 sp,您就可以决定如何返回数据。您可以为此使用dynamic
数据类型,API 会将其序列化为 JSON,因此您应该没有问题。
基本上一次一小步。这是可以做到的,我过去也做过类似的事情。
推荐阅读
- django - Django 只能将 str (不是“列表”)连接到 str
- python - 为什么python没有内置函数mean()?
- opencv - 在 OpenCV 中浏览视频非常消耗 CPU,为什么观看视频不那么密集?
- javascript - Javascript 需要两次点击来初始化我想要它做的事情
- multithreading - 我应该在 Clojure 中使用哪一个?去块还是线程?
- jena - 执行 6 次后,构造查询在 Fuseki Jena 中挂起
- python - 如何制作跟踪表以查找(打印)三个给定整数的最小值?
- ajax - 通过 RxJS ajax 注册存在用户时 React Native 崩溃
- javascript - 如何更改反应导航标题的高度
- dart - 标签栏视图错误,因为多次使用相同的 GlobalKey