У меня есть хранимая процедура, которая получает строковый параметр «OrderByColumn» и строит динамический запрос соответственно.
Это часть моей код хранимой процедуры:Динамический запрос и sql-инъекции
ROW_NUMBER() OVER (ORDER BY
CASE WHEN @OrderByColumn='Date' AND @OrderDirection=0 THEN tbl_Docs.Date END ASC,
CASE WHEN @OrderByColumn='Count' AND @OrderDirection=0 THEN tbl_Docs.Count END ASC,
И в моем коде позади функции, которая вызывает процедуру хранит у меня есть:
cmd.Parameters.Add("@OrderByColumn", SqlDbType.NVarChar).Value = orderByColumn;
cmd.Parameters.Add("@OrderDirection", SqlDbType.Int).Value = orderDirection;
Пользователь устанавливает параметр OrderByColumn, нажав на кнопку gridviews header header, поэтому нет прямого ввода пользователем, так что я вижу, что нет никакой возможности вставлять какую-либо вещь ...
В книге они также проверяют строку orderByColumn, я не понимаю, почему это необходимо, потому чтокак я заметил, пользователь не может вводить прямое выражение.
Мой вопрос:
безопасно?
Я также прочитал в некоторой книге, что предложение ORDER BY не поддерживает использование параметров.
Что это значит?
Почему вы не используете орм? – Paco
Заключительная часть вашего вопроса вокруг 'ORDER BY' заключается в том, что вы должны явно определять имена столбцов. – 2010-02-17 11:20:13