проверить, что оператор выбора действителен или нет в c # .net - PullRequest
1 голос
/ 02 июня 2010

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

Ответы [ 2 ]

2 голосов
/ 02 июня 2010

Одним из подходов, который охватывает большинство сценариев, является выполнение SQL с SET FMTONLY ON

, например

SET FMTONLY ON;
SELECT SomeField FROM ExampleQuery

От BOL, УСТАНОВИТЬ ТОЛЬКО :

Возвращает только метаданные клиенту. Может использоваться для проверки формата ответ без фактического запуска Query.query.

Это приведет к ошибке, если запрос недействителен. Вы также можете проверить результат, чтобы определить, какой будет схема возвращаемого набора результатов (т. Е. Нет схемы = не оператор SELECT).

Обновление: В общих чертах при работе с SQL, который вы хотите защитить от внедрения SQL, есть и другие вещи, о которых вам следует подумать:

  1. Избегайте динамического sql (объединение введенных пользователем значений в строку SQL для выполнения). Вместо этого используйте параметризованный SQL.
  2. Инкапсулируйте запрос как вложенный запрос. например, * +1025 *

    SELECT * FROM (ВЫБРАТЬ что-то из ADynamicQueryThatsBeenGenerated) x

Таким образом, если запрос содержит несколько команд, это приведет к ошибке. то есть это может привести к неверному запросу при инкапсуляции в виде вложенного запроса:

SELECT SomethingFrom FROM MyTable;TRUNCATE TABLE MyTable
2 голосов
/ 02 июня 2010

Как часто оператор select будет недействительным? Похоже, простого блока try / catch для выполнения SQL может быть достаточно.

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

...