Написание запросов в программном коде по сравнению с SqlDataSource

У меня всегда было такое представление, что писать SQL-запросы в исходном коде не очень хорошо по сравнению с написанием его с использованием SqlDataSource.

SqlDataAdapter ad = new SqlDataAdapter("SELECT * FROM Categories", myConnection);

DataSet ds = new DataSet();

ad.Fill(ds, "Categories");

myGridView.DataSource = ds;

myGridView.DataBind();

против.

<asp:SqlDataSource ID = "SqlDataSource1" runat = "server"
  ConnectionString = "<%$ ConnectionStrings:myConnection %>"
  SelectCommand = "SELECT * FROM Categories" />

Я считаю, что использование SqlDataSource безопасно и легко в обслуживании. Верно ли мое беспокойство? Обоснуйте пожалуйста.

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
4
0
11 345
7
Перейти к ответу Данный вопрос помечен как решенный

Ответы 7

Я бы не стал писать SQL-запросы в коде за точкой. Как насчет уровня доступа к данным?

Что произойдет, если вы захотите сменить резервный магазин? Вам придется переписать весь код программной части.

Что происходит, когда вам нужно использовать данные более чем в одном месте? Вы дублируете код.

Вам нужно серьезно подумать о том, как вы разрабатываете свое решение, прежде чем писать SQL-запросы в своем коде. Подумайте о разделении и ремонтопригодности задолго до того, как усомнитесь в «безопасности» объектов SqlDataSource. Серьезно.

Ответ принят как подходящий

SQL-запросы в коде программной части и SQL-запросы в SqlDataSource в значительной степени эквивалентны.

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

Уровень доступа к данным предпочтителен, но SqlDataSource иногда оказывается достаточно целесообразным. Я бы не стал ударить вас свернутой газетой за ее использование, если бы у вас еще не было уровня доступа к данным, и это было для чего-то простого / одноразового.

«Я бы не стал ударить вас свернутой газетой за использование одной», наткнулся на это, когда искал в Google «плохой дизайн SqlDataSource», поскольку в настоящее время я пытаюсь работать над проектом с использованием sqldatasource как минимум на 15 разных страницах. Спасибо, Стивен, что заставил меня смеяться (+1 за это). Искал авторитетный источник, чтобы не использовать их.

HMR 22.05.2013 07:47

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

Jay Sullivan 05.11.2013 21:06

По моему опыту, SQLDataSource хорош для быстрой разовой страницы для отображения данных и, возможно, их редактирования. Но как только вы попадаете в какой-либо сложный сценарий (а у меня всегда так), он довольно быстро выходит из строя. Ремонтопригодность - это кошмар при использовании как SQLDataSource, так и прямого SQL в исходном коде. SQLDataSource меня сжигал много раз.

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

Ни один из ваших методов не является более или менее безопасным, чем другой. Поскольку ваши aspx-страницы компилируются так же, как и ваш код за страницами, вы не рискуете случайно раскрыть свои операторы SQL или структуру базы данных просто с помощью SqlDataSources. Однако главная проблема здесь не в безопасности, а в ремонтопригодности.

Многие люди жаловались, когда Microsoft выпустила SqlDataSources как часть .NET 2.0: мы считаем, что это поощряет и укрепляет вредные привычки.

Для любого типа проекта, размер которого превышает одну страницу интрасети, вам следует изучить его старшего брата, ObjectDataSource. При использовании ODS вы почти ограничены в разработке отдельной модели для ваших данных, вдали от вашего представления.

Элементы управления DataSource отлично подходят для большинства задач. Они поддерживают разбиение на страницы в сетках и кэширование на стороне сервера и могут экономить поездки в базу данных. Однако одним из недостатков является то, что если вы делаете что-то сложное с транзакциями db, вы не сможете использовать транзакцию для более чем одного sqldatasource, по крайней мере, не легко.

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

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

+1 «любая книга по дизайну программного обеспечения». Код базы данных не принадлежит представлениям. Кроме того, это чрезвычайно затрудняет отладку. Мне нравится отлаживать свой код, когда что-то идет не так с моей базой данных.

Jay Sullivan 05.11.2013 21:04

Я использовал SQLDataSources для заполнения сетки, требующей несложного запроса. Использование хранимой процедуры вместо помещения запроса прямо в SQLDataSource решает проблему повторного использования. В примерах из элементов управления Telerik широко используются источники данных, но это может быть связано с потребностью в простоте, а не с реальными ограничениями. Еще одно использование, с которым я столкнулся, было на странице, размещенной на каждом сайте у клиента, не особо озабоченного безопасностью, что позволяло персоналу выполнять sql на лету. Он содержал простой SQL-запрос - открытие страницы было простым способом проверить, доступна ли база данных.

Другие вопросы по теме