SQL 2008: возвращает строки данных как JSON?

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

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

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

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

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

Ответ 1

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

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

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

Долго и коротко это, возьмите решение, которое наилучшим образом соответствует вашим текущим потребностям, в то же время думая о влиянии, которое оно будет иметь, если вам нужно изменить его в будущем.

Ответ 2

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

Ответ 3

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

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

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

Ответ 4

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

Ответ 5

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

Ответ 6

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

Ответ 7

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

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

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

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

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

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

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

Еще раз спасибо за все репсоны!