c#SELECT FOR FOR JSON

问题描述 投票:2回答:4

我正在使用SQL Server 2008 R2,我想在ASP.NET中构建一个Web表单,在我的数据库上运行SELECT命令并从中创建一个json。

这是我的代码:

using (SqlConnection connection = new SqlConnection(ConnectionString))
{
    String query = "SELECT * FROM dbo.apartments FOR JSON";

    using (SqlCommand command = new SqlCommand(query, connection))
    {
        connection.Open();

        var jsonResult = new StringBuilder();
        var reader = command.ExecuteReader();

        if (!reader.HasRows)
        {
            jsonResult.Append("[]");
        }
        else
        {
            while (reader.Read())
            {
                jsonResult.Append(reader.GetValue(0).ToString());
            }
        }

        connection.Close();
    }
}

当我运行它时,我收到此错误:

异常详细信息:System.Data.SqlClient.SqlException:'JSON'附近的语法不正确。

c# sql asp.net .net sql-server
4个回答
3
投票

正如Lennart Stoop建议的选项是读取对象的所有项目,然后使用JSON.NET序列化为Json。

Nuget package needed NewtonSoft.Json
using Newtonsoft.Json;

例子是

using (SqlConnection connection = new SqlConnection(ConnectionString))
{
   String query = "SELECT * FROM dbo.apartments";

   using (SqlCommand command = new SqlCommand(query, connection))
   {
       connection.Open();
       List<MyObject> myObjectList= new List<MyObject>();
       var reader = command.ExecuteReader();
       if (reader.HasRows)
       {
          while (reader.Read())
          {    MyObject myObject = new MyObject();
               myObject.Name = reader["Name"].ToString();
               myObjectList.Add(myObject);
          }
       }
      var JsonResult = JsonConvert.SerializeObject(myObjectList);
    } 
}

JsonResult是你想要的json对象

编辑修改为与List一起使用以获得更好的示例


1
投票

我认为您使用的是旧版本的SQL Server。 JSON功能已添加到SQL版2016。


0
投票

将查询结果格式化为带有FOR JSON的JSON可用starting with 2016。您可以使用SqlDataReader读取数据,然后使用C#代码手动创建json(例如,使用Json.Net,请参阅Creating JSON


-1
投票

注意:SQL Server 2016添加了对JSON格式的新支持。

更改您的SQL并使用FOR JSON AUTOFOR JSON PATH来获得预期的输出

看看syntax

© www.soinside.com 2019 - 2024. All rights reserved.