如何从 sql server 2016 获取 JSON 数据,并通过 Web API 将其按原样(使用 IHttpAct



在 Sql server 2016 之后,我们可以通过以下语句选择直接作为 JSON 的数据:

SELECT Top (10) * from  Products FOR JSON AUTO

因此,我们不再需要将它们分配给对象并将它们转换为 JSON 到代码。 我认为我们可以降低流程的复杂性并获得更好的性能。 我使用 Web API 2,我想接收并直接将其发送到 cleint 。 这是任何新的函数或方法与 SqlCommand 一起使用来执行此操作吗?云,请帮帮我?

此示例演示如何使用 SqlCommand 从 SQL Server 读取 JSON:

var queryWithForJson = "SELECT ... FOR JSON";
var conn = new SqlConnection("<connection string>");
var cmd = new SqlCommand(queryWithForJson, conn);
conn.Open();
var jsonResult = new StringBuilder();
var reader = cmd.ExecuteReader();
if (!reader.HasRows)
{
jsonResult.Append("[]");
}
else
{
while (reader.Read())
{
jsonResult.Append(reader.GetValue(0).ToString());
}
}

在 ApiController 中,可以使用ResponseMessage-方法返回字符串:

public IHttpActionResult Get()
{
var jsonResult = new StringBuilder();
/// get JSON
var response = new HttpResponseMessage(System.Net.HttpStatusCode.OK);
response.Content = new StringContent(jsonResult.ToString());
return ResponseMessage(response);
}

但是,尽管技术上可行,但恕我直言,在走这条路线时应考虑一些缺点:

  1. 您将失去协商从 Web API 返回的内容类型的能力。如果以后必须为请求 XML 的客户端提供服务,则无法轻松完成此操作。
  2. 另一个缺点(可能是小缺点(是降低了缩放 JSON 转换的能力。 通常,您有一个数据库服务器,而您可以有多个 Web 前端。显然,您需要数据库服务器来获取数据,但是您可以将转换的负载放在可以更好地扩展的位置。

我认为让 SQL Server 以二进制格式将数据传递到执行转换的前端会更有效。我怀疑将此负载放在数据库服务器上会快得多 - 当然这取决于基础架构。

最新更新