2012-03-23 5 views
5

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

Мне было интересно, какой самый эффективный/лучший способ запустить этот запрос из C# в коде, чтобы заполнить gridview?

Разрыв SQL и запись некоторых вычислений на C#?

Создание хранимой процедуры?

Просто передайте sql в виде строки и создайте набор данных, а затем привязка набора данных к gridview, кажется, занимает слишком много времени.

+0

1) насколько велики (строки и столбцы) - возвращаемый набор данных ?, и 2) показывают нам инструкцию SQL. – RBarryYoung

+0

, если вы хотите использовать ** LINQ **, вы сможете легко вычислить код ** C# ** –

+0

Я действительно не хочу публиковать SQL здесь, но попытаюсь изменить его так, чтобы его более общий ... он может иметь в зависимости от поиска до 10 000 строк, а его получить не менее 30 столбцов – user1186144

ответ

3

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

Первое, на что я хотел бы обратить внимание - это оптимизировать индексы базы данных, чтобы повысить производительность вашего запроса. Если вы можете, используйте SQL Profiler и Index Tuning Wizard (я не думаю, что эти инструменты доступны в Express Edition SQL Server). Обратите внимание, что новые индексы также могут привести к ухудшению производительности со вставками, поэтому, если ваша база данных должна поддерживать высокий объем транзакций, вы должны быть осторожны в использовании этого подхода.

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

В качестве отправной точки я бы прототип вашего запроса и/или частей вашего запроса в редакторе SQL, чтобы вы могли сосредоточиться только на оптимизации запросов, прежде чем принимать какие-либо решения о том, как изменится ваш код ASP.NET.

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

+0

Спасибо, я думаю, я попробую это и оптимизирую свой запрос и запустил его как хранимую процедуру – user1186144

1

Выполняете ли вы какие-либо скрипты SQL из любого места в своем коде (т. Е. Вы уже пришли к решению о том, как вы собираетесь обращаться к данным)? Причина, по которой я прошу, заключается в том, что я недавно использовал базовую модель сущностей ADO .net, чтобы устранить разрыв между моей базой данных и концептуальными объектами, с которыми я хотел работать, из данных в базе данных, и я настоятельно рекомендую его. Действительно легко получить повесить, а также. После того, как вы внедрили EF-модель, это просто случай вызова хранимой процедуры (да, я бы посоветовал вам сохранить запрос в хранимой процедуре), используя метод, который будет сгенерирован EF-моделью и будет загружен в ваши классы (которые также автоматически созданный моделью). Список классов, которые вы только что извлекли из процедуры, может, очевидно, быть привязан к любому управлению, которое вам нравится.

http://msdn.microsoft.com/en-us/data/ff191186

Это стоит знать.

+0

Я не помечал вас ни – user1186144

+0

Нет проблем, все имеют право голоса. –

+1

Плохой совет вообще выбрать модель фреймворка сущностей !? "Многие"? На самом деле, я действительно не помню, чтобы поднимать «многие» точки, чтобы быть честными - два предложения, которые я сделал, - это реализовать модель EF (широко используемую, ничего плохого в этом) и что сценарий хранится в процедуре (которая многие другие в этой теме согласятся со мной). Кроме того, я думаю, что вы горько не соглашаетесь с моим редактированием - написание и грамматика вашего ответа оставляет желать лучшего. –

-2

Мне было интересно, какой самый эффективный/лучший способ запустить этот запрос из C# в коде, чтобы заполнить gridview?

Вы имеете в виду только одну возможную версию, с которой вы должны начать?

Единственный способ выполнения запроса, возвращающего таблицу, - это запустить команду, которая возвращает DataReader. Точка. Если SQL задан, то есть он. Нет альтернативы.

Примечание: все остальное, что вы можете бросить здесь, использует это внутренне. Они обертывают его.

Разрыв SQL и запись некоторых вычислений на C#?

Моя любимая еда? Кому ты рассказываешь. Зависит от аппаратного обеспечения, объема данных и запроса. Не в состоянии ответить.

Создание хранимой процедуры?

Без разницы.

Просто передайте sql в виде строки и создайте набор данных, а затем привяжите набор данных к gridview, кажется, слишком долго.

  • Что еще слишком долго?
  • Что занимает так много времени? Загрузка 100 миллионов строк? Обработка SQL Server? Все это определяет оптимизацию. Просьба предоставить соответствующую информацию - сообщите нам, где потрачено время.

ЭТО НЕОБХОДИМО: не использовать набор данных, но наблюдаемый набор объектов, который вы заполняете фон, по крайней мере позволял бы результатам появляться во время заполнения списка.

+0

Я не маркировал тебя. BTW – user1186144

+4

Я сделал. Я не ценю такие комментарии, как «какая моя любимая еда? КОМУ ТЫ РАССКАЗЫВАЕШЬ'. Облик сарказма для тех, кто просто ищет помощи и совета. Создание хранимой процедуры имеет значение, будь то производительность или в отношении организации и «правильная» структура решения. Кроме того, орфография и грамматика - «вверх по стене», и если вы не собираетесь принимать изменения, тогда примите участие в голосовании. –

+0

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

2

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

Вы можете вызвать пересчет результатов при изменении базовых данных. Вы либо используете триггеры, либо вызываете sproc, который выполняет вычисления из кода C#.