вызов процедуры или обработка кода позади - что лучше? - PullRequest
0 голосов
/ 31 августа 2009

Я работаю над приложением ASP.NET 2.0 с языком c #.

Может кто-нибудь сказать мне, что является лучшим способом из следующих: сценарий: Мне нужно получить данные из базы данных и привязать их к представлению таблицы.

вариант 1: Я могу использовать хранимую процедуру (для итерации результата, полученного из базового запроса и выполнения операций над этим набором результатов) для получения окончательного результата.

вариант 2: Я могу получить результат (полученный из основного запроса) и выполнить итерации и операции в коде файла.

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

Спасибо Рупа

Ответы [ 6 ]

2 голосов
/ 31 августа 2009

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

Кроме того, сохраненный процесс позволит вам изменить запрос без повторного развертывания приложения.

Однако вам может быть удобнее выполнять фильтрацию в коде или в наборе данных.

Если сервер базы данных был загружен, приложение, вероятно, будет быстрее фильтровать.

Производительность, вероятно, будет диктовать, что в большинстве случаев вам будет лучше в базе данных.

1 голос
/ 31 августа 2009

Какие операции вы будете выполнять, чтобы получить «конечный результат»? Выполнение основной части работы на стороне базы данных, как правило, быстрее, чем перегрузка данных, а затем выполнение некоторой манипуляции (или, что еще хуже, серьезной фильтрации), которая могла бы быть выполнена на стороне базы данных.

0 голосов
/ 31 августа 2009

Я бы использовал случай 1, но я также постарался бы избежать итерации данных и выполнять все операции в одном или нескольких запросах. Итерации по базе данных сервера SQL не быстрые, и чем дальше от данных, тем медленнее они становятся (как итерации в графическом интерфейсе и вызов бизнес-уровня, который вызывает базы данных).

Вот как я бы попытался это сделать.

  1. Создать временную таблицу
  2. Получите данные из вашего основного запроса с фильтром во временную таблицу и выполните все возможные операции.
  3. Если я не могу выполнить все операции в вашем базовом запросе, я бы выполнил некоторую операцию над множеством временной таблицы
  4. Вернуть временную таблицу вызывающему приложению

Как это

CREATE PROC myProc @myParam int
AS
CREATE TABLE #temp1(myCol int) 
--only get the required data and apply any operations
INSERT INTO #temp1 (myCol) 
SELECT myCol FROM myTable WHERE myCol2=@myParam 


UPDATE #temp1 --do any operation on the temporary table

SELECT myCol FROM #temp1 --apply any additional filter or operations
GO
0 голосов
/ 31 августа 2009

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

В этом случае возникает несколько вопросов, например, собираетесь ли вы писать модульные тесты для своего кода? Является ли разделение проблем проблемой для вас? Насколько большой будет ваша программа?

Почему бы не использовать подход, подобный лучшей практике, такой как Model View Presenter , иногда называемый Supervising Controller или Passive View или более структурированной средой для ASP.NET, такой как ASP. NET MVC, где вы можете обнаружить, что лучшие практики намного легче следовать.

0 голосов
/ 31 августа 2009

Мой вариант лучше сделать в хранимой процедуре для итерации. Так как, если данные увеличиваются, лучше использовать proc.

0 голосов
/ 31 августа 2009

Вы можете использовать объект DataSet для этой цели. Вызовите хранимую процедуру и заполните объект DataSet, используя метод DataAdapter.Fill и

Вы можете назначить источник данных вида сетки, используя

DataSource roperty.

Если вам нужно перебрать таблицу данных, это можно сделать с помощью соответствующей таблицы данных в вашем наборе данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...