SQL 2008: возвращать строки данных в формате JSON? - PullRequest
11 голосов
/ 08 августа 2010

Я думаю, что этот вопрос похож на стрельбу по глиняным пиджинам. .. сбил .. но тем не менее, стоит спросить, я верю.

Многие JS-фреймворки и т. Д. В наши дни используют JSON, и для этого есть все основания. Классический вопрос - «где преобразовать данные в JSON».

Я понимаю, что в какой-то момент в конвейере вы должны конвертировать данные в JSON, будь то на уровне доступа к данным (я смотрю на JSON.NET) или я верю, что в .NET 4.x есть методы выводить / сериализовать как JSON.

Итак, вопрос: Неужели плохая идея рассматривать функцию SQL для вывода в виде JSON?

Классификатор: Я понимаю, что пытаться выводить тысячи строк подобным образом не очень хорошая идея - на самом деле не очень хорошая идея для веб-приложений в любом случае, если только вам это не нужно. Для моего требования мне нужно, возможно, 100 строк одновременно ...

Ответы [ 7 ]

5 голосов
/ 08 августа 2010

Ответ на самом деле таков: это зависит .

Если ваше приложение маленькое и не пользуется большим спросом, то обязательно сделайте это в базе данных.Однако следует помнить: что происходит, когда ваше приложение используется в 10 раз больше пользователей за 12 месяцев ?

Если это делает его быстрым, простым и легким в реализацииJSON-кодирование в ваших хранимых процедурах, а не в веб-коде, позволяет вам выводить и использовать ваше приложение, и это, безусловно, путь.Тем не менее, на самом деле не нужно так много работы, чтобы сделать это «правильно» с решениями, которые были предложены в других ответах.потребности, думая о том, какое влияние это окажет, если вам потребуется изменить его в будущем.

2 голосов
/ 08 августа 2010

Я согласен с другими респондентами, что это лучше сделать в коде вашего приложения. Однако ... это теоретически возможно, если SQL Server может включать сборки CLR в базу данных с использованием синтаксиса create Assembly . Выбор действительно за вами. Вы можете создать сборку для выполнения перевода в .net, определить эту сборку для SQL Server и затем использовать содержащиеся в ней методы для сериализации в JSON в качестве возвращаемых значений из ваших хранимых процедур ...

2 голосов
/ 08 августа 2010

Лучше всего загрузить данные в программу и затем вернуть их в формате JSON.

.NET 4 имеет поддержку для возврата json, и я сделал это как часть одного сайта ASP.NET MVC, и это было довольно просто и понятно.

Рекомендую перенести преобразование с сервера SQL

2 голосов
/ 08 августа 2010

Вот почему существует [WebMethod] (WebMethodAttribute).

1 голос
/ 08 августа 2010

Лучше загрузить его, используя стандартную технику доступа к данным, а затем преобразовать в JSON. Затем вы можете использовать его в стандартных объектах в .NET, а также на своем клиентском JavaScript.

0 голосов
/ 09 августа 2010

Привет, спасибо за все ответы. Меня все еще поражает, сколько людей имеют время помочь.

Все очень хорошие замечания и, безусловно, подтвердили мое ощущение, что приложение / слой выполняет преобразование - как связующее звено между фактическими данными и внешним интерфейсом. Я полагаю, что я не слишком следил за MVC или SQL-2008, и поэтому не был уверен, есть ли какие-то самородки, которые стоит отследить.

Как это получилось (по некоторым ссылкам, размещенным здесь, и дальнейшая рыбалка), я решил сделать следующее на данный момент (остановился на использовании .NET 3.5 и без MVC сейчас ..):

  1. Получение данных SQL как datatable / datareader
  2. Использование простого преобразования данных> коллекции (словаря) для сериализуемого списка
  3. Потому что сейчас я использую страницу ASHX, чтобы выступать в качестве посредника для JavaScript (т.е. через вызов JQuery AJAX), на моей странице ASHX у меня есть:

    context.Response.ContentType = "application / json"; System.Web.Script.Serialization.JavaScriptSerializer json = new System.Web.Script.Serialization.JavaScriptSerializer ();

  4. Затем я могу выдать: json.serialize (<>)

Может показаться немного отсталым, но он работает нормально ... и главное предостережение в том, что он никогда не возвращает огромное количество данных за раз.

Еще раз спасибо за все отклики!

0 голосов
/ 08 августа 2010

Если вы используете .net mvc, вы сериализуете результаты в своих контроллерах и выводите JsonResult, есть метод Controller.Json (), который делает это для вас. Если вы используете веб-формы, лучше всего использовать обработчик http и класс JavascriptSerializer.

...