在 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_VALUE
、JSON_QUERY
和 ISJSON
验证 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 连接?