在 ASP.Net Core 项目中使用 ADO.Net 将 JSON 类型作为参数传递给 SQL Server 2016 存储过程

Posted

技术标签:

【中文标题】在 ASP.Net Core 项目中使用 ADO.Net 将 JSON 类型作为参数传递给 SQL Server 2016 存储过程【英文标题】:Passing JSON type as parameter to SQL Server 2016 stored procedure using ADO.Net in ASP.Net Core project 【发布时间】:2017-05-11 07:01:26 【问题描述】:

有人可以举例说明如何在 C# ASP.Net Core Web Api 项目中使用 ADO.Net 将 JSON 类型作为参数传递给 SQL Server 2016 存储过程吗? 我想在 C# ASP.Net Core Web Api 中查看 SQL Server 2016 存储过程和 JSON 类型传递的示例。

【问题讨论】:

非常好的问题。我也想要 AFIAK,Sql server 2016 没有 JSON 数据类型,因此您只需将 json 作为 varchar 传递给存储过程。在存储过程中,您可以使用知道如何处理 JSON 数据的built in functions。您可以在this article. 中查看代码示例 你的问题中有两句话,它们都说完全相同的东西。然后你的问题的标题再次说了完全相同的事情。请清理您的问题。 【参考方案1】:

SQL Server 中没有json 数据类型,您可以简单地将json 作为nvarchar(max) 发送到存储过程。

如果您想将您的 json 映射到表,您可以使用 OPENJSON 将数据转换为行和列。

CREATE PROCEDURE SaveJSON
    @pID int,
    @pJson nvarchar(max)
AS
BEGIN
    INSERT INTO [YourTable] ([ID], [JSONData])
    VALUES (@pID, @pJson)
END

如果你想将 json 对象映射到表中,你可以这样做

//json would be something like this
[
  "id" : 2,"name": "John",
  "id" : 5,"name": "John"
]

INSERT INTO YourTable (id,Name)
SELECT id, name
FROM OPENJSON(@pJson)
WITH (id int,
name nvarchar(max))

Here 是一篇很好很详细的文章,会给你详细的思路来处理json data

【讨论】:

按照预期,非常感谢您提供这个很棒的解决方案 用于添加“JSON 数据类型”本机投票:feedback.azure.com/forums/908035-sql-server/suggestions/… 其实数据类型需要是nvarchar(max)(不仅仅是你说的varchar)——更正【参考方案2】:

SQL Server 2016 确实具有原生 JSON 支持 - 新的 JSON 数据类型(基于 nvarchar),以及用于将查询输出转换为 JSON 格式的 FOR JSON 命令

Microsoft 没有包含单独的 JSON 数据类型 - 相反,有许多 JSON 函数(用于将数据库行打包为 JSON,或将 JSON 解析为关系数据)对 NVARCHAR(n) 类型的列进行操作

如果您有 JSON 文本,您可以从 JSON 中提取数据或使用内置函数 JSON_VALUEJSON_QUERYISJSON 验证 JSON 格式是否正确。对于更高级的查询和分析,OPENJSON 函数可以将 JSON 对象数组转换为一组行。可以对返回的结果集执行任何 SQL 查询。最后,FOR JSON 子句使您能够将查询结果格式化为 JSON 文本。

所以,我建议您使用NVARCHAR(MAX) 作为您的存储过程参数。

【讨论】:

【参考方案3】:

有关显示 C# 和 SQL 的简单示例,请参阅: https://chris.koester.io/index.php/2018/03/21/load-json-into-sql-server-using-a-stored-procedure-and-csharp/

您可能在 C# 中有一些更高级别的数据层方法,例如使用 EF 或其他方法,但这将让您使用良好的 ADO.Net SQLCommand 获得简单的测试设置。

【讨论】:

以上是关于在 ASP.Net Core 项目中使用 ADO.Net 将 JSON 类型作为参数传递给 SQL Server 2016 存储过程的主要内容,如果未能解决你的问题,请参考以下文章

如何在 ASP.NET Core MVC 中使用 ADO.NET 向存储过程添加参数?

net core体系-web应用程序-4asp.net core2.0 项目实战-5项目数据库操作封装操作

如何在带有 ADO.NET 的 ASP.NET Core MVC 中使用 jQuery Ajax 自动完成

如何在 Asp.Net Core Mvc 5.0 中将 sql 数据库与 ado.net 连接?

ASP.NET MVC 项目中 ADO.NET 实体模型的已打开 DataReader

ado.net和asp.net区别?