покритикуйте мой стиль работы с SqlDataSource

teepok
Дата: 26.03.2010 12:08:57
Добрый день.
Я на всех asp страницах, где есть гриды, использую SqlDataSource. Причем если запрос к БД можно описать декларативно, я так и делаю, если же он формируется динамически сложным образом, так что никак нельзя задать декларативно, то я в CodeBehind все равно работаю с SqlDataSource, например так:
Page_PreRender(...)
{
   SqlDataSource.SelectCommand = " select * from " + sMytable + sQueryFilter;
   DataGrid.Rebind(); 
}

хотя я везде встречаю примеры, где делается по другому:
Page_PreRender(...)
{
   DataTable dt = new DataTable();
   OracleDataAdapter da = new OracleDataAdapter(" select * from " + sMytable + sQueryFilter);
  da.Fill(dt);
  DataGrid.DataSource = dt;
}

Я делаю не так, а с использование SqlDataSource, потому что:
1. Использовать автоматические операции Insert/Update/Delete как я понимаю можно только при декларативной привязки данных
2. с SqlDataSource можно очень просто настраивать кэширование.

Скажите, я что то неправильно понимаю и криво использую или все нормально? :)
Зритель с попкорном 5
Дата: 26.03.2010 12:12:02
teepok,

Было бы крайне интересно узнать что из себя представляет "sQueryFilter"
teepok
Дата: 26.03.2010 12:21:17
Зритель с попкорном 5,

ну например у меня в БД в табличке хранится строка, которая и содержит этот фильтр. Сначала я из базы в переменную считываю эту строку и только после этого этого могу складывать свою SelectCommand. Я же говорю, запрос сильно динамический :)
Зритель с попкорном 5
Дата: 26.03.2010 12:32:25
teepok,

Пример кода, я прошу пример кода. Чует моё сердце что подход крайне кривой и вы многого не понимаете и криво используете:)
teepok
Дата: 26.03.2010 12:49:37
Зритель с попкорном 5,

Ну весь проект большой, и так в двух словах сложно описать почему надо именно так, попробую :)
У меня есть структура таблиц в БД, которая содержит большой список людей с большим количеством признаков. Идея была в том, чтобы пользователь мог из этого большого множества выделять подмножество которое ему нужно. Еще раз повторюсь - конечный пользователь! Т.е. он долже обладать знанием SQL и структуры БД. Тогда он через экранную форму писал sql запрос который выбирал бы нужное ему подмножество. Он сохранял свой запрос например с названием "Запрос клиентов от Петрова". Ну и это соответственно ложилось в табличку с полями:Id, QueryText. И дальше другие пользователи могли просматривать через графический интерфейс это подмножество. Пользователь в ComboBox выбирает какое подмножество ему показать, ну и тут я собственно должен к гриду динамически подцепить DataSource, коим будет результат выполнения того самого скрипта, лежащего в поле QueryText. Это на самом деле упрощенно :)
Зритель с попкорном 5
Дата: 26.03.2010 13:00:13
teepok,

Вы не боитесь того что этот конечный пользователь может наворотить в базе? Вы ему полностью доверяете? Или всё же хотя бы ограничили его права SELECT'ом из нужных таблиц и INSERT'ом в таблицу (Id, QueryText), а то вы ведь знаете такое словосочетание как SQL Injection?
МСУ
Дата: 26.03.2010 13:05:56
Зритель с попкорном 5
teepok,

Вы не боитесь того что этот конечный пользователь может наворотить в базе? Вы ему полностью доверяете? Или всё же хотя бы ограничили его права SELECT'ом из нужных таблиц и INSERT'ом в таблицу (Id, QueryText), а то вы ведь знаете такое словосочетание как SQL Injection?


Какой нафиг SQL Injection? Человек пишет некий квери-билдер, нужный конечному пользователю, что не ясно? Конечным пользователем может являться конкретный уполномоченный юзер со знанием SQL.
По аналогии, разработчикам Management Studio тоже нужно беспокоиться о SQL Injection? :)
teepok
Дата: 26.03.2010 13:06:24
Зритель с попкорном 5,

Конечный пользователь будет грамотным и не злоумышленником :). речь идет о корпоративном решении, хотя и сам понимаю что вариант максимально гибкий не может быть максимально безовасным.
ShSerge
Дата: 26.03.2010 13:44:40
teepok
Конечный пользователь будет грамотным и не злоумышленником :). речь идет о корпоративном решении, хотя и сам понимаю что вариант максимально гибкий не может быть максимально безовасным.

Может. И должен быть. SQL injection detected!
ShSerge
Дата: 26.03.2010 13:48:04
ПС. Ваш грамотный корпоративный пользователь, которого, по его мнению, несправедливо обделили зарплатой, или увольняют с работы... . Короче, всякие люди бывают. :(