Какова цель наборов данных? - PullRequest
7 голосов
/ 01 октября 2011

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

Ответы [ 4 ]

30 голосов
/ 01 октября 2011

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

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

Цель DataSets - избежать прямого взаимодействия с базой данных с помощью простых операторов SQL . Цель DataSet - действовать как дешевая локальная копия данных, которые вас интересуют, чтобы вам не приходилось делать дорогостоящие вызовы с высокой задержкой в ​​базу данных. Они позволяют вам доехать до хранилища данных один раз , забрать все, что вам понадобится на следующую неделю, и положить его в холодильник на кухне, чтобы он был там, когда вам это нужно.

Кроме того, какой путь лучше? Обновление данных в наборе данных с последующей их передачей в базу данных или непосредственное обновление базы данных?

Вы заказываете дюжину различных продуктов с веб-сайта. Какой способ лучше: доставлять товары по одному, как только они станут доступны от их производителей, или ждать, пока они все будут доступны, и отправлять их все сразу? Первый способ, вы получаете каждый предмет как можно скорее; Второй способ имеет более низкую стоимость доставки. Какой путь лучше ? Как, черт возьми, мы должны знать? Это решать вам!

Стратегия обновления данных, которая лучше , - это стратегия, которая лучше соответствует потребностям и потребностям вашего клиента. Вы не сказали нам, что означает показатель «лучше» вашего клиента, поэтому на этот вопрос нельзя ответить. Чего хочет ваш клиент - новейшие товары, как только они появятся, или низкая стоимость доставки?

11 голосов
/ 01 октября 2011

Наборы данных поддерживают отключенную архитектуру.Вы можете добавить локальные данные, удалить их, а затем с помощью SqlAdapter вы можете зафиксировать все в базе данных.Вы даже можете загрузить XML-файл непосредственно в набор данных.Это действительно зависит от ваших требований.Вы даже можете установить в памяти отношения между таблицами в DataSet.

И, между прочим, использование прямых SQL-запросов, встроенных в ваше приложение, - это действительно очень плохой и плохой способ проектирования приложения.Ваша заявка будет подвержена "Sql Injection".Во-вторых, если вы пишете запросы, подобные тем, которые встроены в приложение, Sql Server должен каждый раз выполнять свой план выполнения, в то время как хранимые процедуры компилируются, и его выполнение уже определено, когда оно компилируется.Также Sql-сервер может изменить свой план, поскольку данные становятся большими.Вы получите улучшение производительности за счет этого.По крайней мере, используйте хранимые процедуры и проверяйте ввод мусора в этом.Они по своей природе устойчивы к впрыску Sql.

Хранимые процедуры и набор данных - это путь.

См. Эту диаграмму:

enter image description here

Редактировать: Если вы работаете в .Net Framework 3.5, 4.0, вы можете использовать такое количество ORM, какEntity Framework, NHibernate, Subsonic.ORM представляют вашу бизнес-модель более реалистично.Вы всегда можете использовать хранимые процедуры с ORM, если некоторые функции не поддерживаются в ORM.

Например: Если вы пишете рекурсивное CTE (Common Table Expression), хранимые процедуры оченьполезно.Если вы используете Entity Framework для этого, у вас будет слишком много проблем.

3 голосов
/ 01 октября 2011

Эта страница подробно объясняет, в каких случаях вы должны использовать Dataset, а в каких случаях вы используете прямой доступ к базам данных

0 голосов
/ 01 октября 2011

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

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

...