如何在C#中获取SQL Server通过FOR JSON AUTO生成的JSON对象?
在C#中获取SQL Server生成的JSON对象的实现方法
下面是几种常用的实现方式,直接从SQL Server获取你生成的JSON字符串:
1. 使用ADO.NET原生方式
这是最基础的实现方式,无需额外依赖:
using System.Data.SqlClient; using System; class Program { static void Main() { // 替换为你的数据库连接字符串 string connectionString = "Server=你的服务器名;Database=你的数据库名;Integrated Security=True;"; string sqlQuery = @"SELECT Attribute1, Attribute2, Attribute3 AS Identifier FROM Table_1 tbl1_obj INNER JOIN Table_2 tbl2_obj ON tbl2_obj.Id = tbl1_obj.Id FOR JSON AUTO"; using (SqlConnection connection = new SqlConnection(connectionString)) { connection.Open(); using (SqlCommand command = new SqlCommand(sqlQuery, connection)) { // 执行查询并获取JSON结果 string jsonResult = command.ExecuteScalar()?.ToString(); if (!string.IsNullOrEmpty(jsonResult)) { // 这里可按需处理JSON字符串,比如反序列化为实体对象 Console.WriteLine(jsonResult); } else { Console.WriteLine("未获取到JSON数据"); } } } } }
说明:ExecuteScalar()适合返回单个值的场景,刚好匹配FOR JSON AUTO返回的单条JSON字符串;using语句会自动释放数据库连接和命令资源,避免内存泄漏。
2. 使用Dapper(轻量ORM)
如果项目已引入Dapper,代码会更简洁:
先安装Dapper NuGet包(Install-Package Dapper),再执行以下代码:
using Dapper; using System.Data.SqlClient; using System; class Program { static void Main() { string connectionString = "Server=你的服务器名;Database=你的数据库名;Integrated Security=True;"; string sqlQuery = @"SELECT Attribute1, Attribute2, Attribute3 AS Identifier FROM Table_1 tbl1_obj INNER JOIN Table_2 tbl2_obj ON tbl2_obj.Id = tbl1_obj.Id FOR JSON AUTO"; using (SqlConnection connection = new SqlConnection(connectionString)) { connection.Open(); string jsonResult = connection.QuerySingleOrDefault<string>(sqlQuery); if (jsonResult != null) { Console.WriteLine(jsonResult); } else { Console.WriteLine("未获取到JSON数据"); } } } }
3. 使用Entity Framework Core
如果项目基于EF Core开发,可通过FromSqlRaw执行原生SQL查询:
先确保已配置好EF Core数据库上下文,再执行以下代码:
using Microsoft.EntityFrameworkCore; using System; using System.Linq; class YourDbContext : DbContext { // 配置数据库连接和实体映射 protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { optionsBuilder.UseSqlServer("Server=你的服务器名;Database=你的数据库名;Integrated Security=True;"); } } class Program { static void Main() { string sqlQuery = @"SELECT Attribute1, Attribute2, Attribute3 AS Identifier FROM Table_1 tbl1_obj INNER JOIN Table_2 tbl2_obj ON tbl2_obj.Id = tbl1_obj.Id FOR JSON AUTO"; using (var context = new YourDbContext()) { string jsonResult = context.Database.SqlQueryRaw<string>(sqlQuery).FirstOrDefault(); if (jsonResult != null) { Console.WriteLine(jsonResult); } else { Console.WriteLine("未获取到JSON数据"); } } } }
说明:EF Core 3.0及以上版本支持SqlQueryRaw方法,可直接返回原生SQL的查询结果。
内容的提问来源于stack exchange,提问作者Coding Enthusiast
相关产品推荐
相关产品推荐

