1. Запрос "СЕЛЕКТ ЗВЁЗДОЧКА"
Запрос вида
"SELECT * ..."
Почему плохо: потому что это мина замедленного действия, которая может приветси к торможению при расширении модели БД.
Пример:
была таблица из 2-х полей к которой мы применили запрос select * и
реально нам для работы в конкретном сценарии нужно было только эти 2
поля.
Через 2 года модеь расширилась, таблица выросла до 20-ти полей, причем появились "длиннотекстовые" поля и блобы(картинки).
Этот же запрос, даже там, где дотстаточно было бы 2- полей теперь всегда выбирает 20.
как нужно: явно указывайте выбираемые поля через запятую. Используйте sql-менеджер для ускорения работы (Детали - у Луценко)
2. Обращение к полям в датасете по номеру.
Это
тоже "бомба замедленного действия" , т.к. запрос и обращение к его
полям могут быть визуально разделены в прграмме. И, если через год
кто-то добавит в средину запроса новое поле (расширяя модель), то сразу
нарушится порядок полей. И весь ваш код, в котором Вы обращаетесь к полю
по номеру - рушится.
И хорошо, если ошибка видна сразу, а может
же случиться, что одно поле переместится на место другого поля,
такого-же типа, явной ошибки не будет, и система будет продолжать
считать, только данные уже будут не те (например если из-за сдвига
подменится поле "сумма заказа" на "сумма заказа со скидкой").
Кроме того очень ухудшается читаемость кода. Как например найти нужное поле в 20-ти строках присваивания вида
ДатаСет.Поле[1] = значение
ДатаСет.Поле[2] = значение
ДатаСет.Поле[3] = значение
...
ДатаСет.Поле[20] = значение
Как нужно: обращайтесь к полям по имени.
3. Формирование запроса в коде путем склеивания строк (подстановка параметров в виде текста)
почему плохо:
а)
увеличивается риск получить простейшую ошибку, если вы подставляете в
запрос строку, а в строке есть кавычка - она сломает ваш код.
б) увеличивается риск хакнуть систему путем sql injection (посмотрите в вики).
в) сложно отлаживать запрос, например если захотиете вытащить его из программы и проверить в скл-менеджере
как лучше:
задавате запрос константной строкой. в общем случае используйте
параметры. Если без текстовых вставок не обойтись - делайте в строке
запроса шаблоны вида __TEMPLATE_NAME__ и заменяйте их функцией замены
строки при формировании реального запроса. И, только в крайних случаях,
склеивайте запрос как строку.