Member 14588284 Ответов: 1

Коды добавления столбцов datagridview


Привет друзья,

у меня есть проблема, которую я не решил 3 дня,

я получаю данные из базы данных oracle с нижними кодами. но когда я изменил выбор флажка, то datagridvew добавил столбец справа .

не в порядке запроса pf

Что я уже пробовал:

 ma = "SYS19.MUHTM001_PKG.GETAD(MUHKOD)"
            If ayb.Checked = True Then kosul = "TO_CHAR(TARIH,'MM'),SYS19.MUHTM001_PKG.GETAD(MUHKOD)"
            If fb.Checked = True Then kosul = " TARIH,SYS19.MUHTM001_PKG.GETAD(MUHKOD),FISNO "
            If gunb.Checked = True Then kosul = " TARIH,SYS19.MUHTM001_PKG.GETAD(MUHKOD)" : gunkosul = " AND TO_CHAR(TARIH,'MM') =" & AY.Text & " "


            sorgu = " SELECT " & kosul & ", " & borç & "," & alacak & " ," & Borçbakiye & "," & alacakbakiye & "" & _
" FROM SYS19.MUHTD002 WHERE  BIRIM NOT IN ('999','998') " & gunkosul & " " & _
" AND TARIH BETWEEN '" & ilktar.Text & "' AND '" & sontar.Text & "'  " & _
" AND MUHKOD LIKE '" & muhkod.Text & "%'  GROUP BY " & kosul & "  ORDER BY " & kosul & " "
            myConn.Open()

1 Ответов

Рейтинг:
1

OriginalGriff

Только не это! Никогда не объединяйте строки для построения команды SQL. Это оставляет вас широко открытыми для случайной или преднамеренной атаки SQL-инъекции, которая может уничтожить всю вашу базу данных. Вместо этого всегда используйте параметризованные запросы.

Когда вы объединяете строки, вы вызываете проблемы, потому что SQL получает такие команды, как:

SELECT * FROM MyTable WHERE StreetAddress = 'Baker's Wood'
Цитата, добавленная пользователем, завершает строку в том, что касается SQL, и вы получаете проблемы. Но могло быть и хуже. Если я приду и наберу вместо этого: "x';DROP TABLE MyTable;--", то SQL получит совсем другую команду:
SELECT * FROM MyTable WHERE StreetAddress = 'x';DROP TABLE MyTable;--'
Которые SQL видит как три отдельные команды:
SELECT * FROM MyTable WHERE StreetAddress = 'x';
Совершенно правильный выбор
DROP TABLE MyTable;
Вполне допустимая команда "удалить таблицу"
--'
А все остальное-это комментарии.
Так оно и происходит: выбирает любые совпадающие строки, удаляет таблицу из базы данных и игнорирует все остальное.

Поэтому всегда используйте параметризованные запросы! Или будьте готовы часто восстанавливать свою БД из резервной копии. Вы ведь регулярно делаете резервные копии, не так ли?


Member 14588284

привет,
я не использую
DROP TABLE MyTable
коды ?
я этого не понимаю? моя база данных удалена, когда я использую эти коды?

мои все запросы я не использую никакого кода, кроме "select"

OriginalGriff

Прочтите еще раз, что я сказал.
Ваш код использует конкатенацию строк; вышесказанное объясняет, почему это очень, очень плохая идея и что вам нужно сделать со всем вашим приложением, чтобы предотвратить ее.

Также смотрите здесь:
https://xkcd.com/327/
И не думайте, что это шутка!

Member 14588284

значит, я должен использовать для всех вариантов разные запросы?
не так ли

OriginalGriff

Нет, прочтите, что я сказал!
Вы должны использовать параметризованные запросы *в любое время*.

Member 14588284

ОК СПАСИБО

OriginalGriff

Всегда пожалуйста!