ENG TEONG CHEAH Ответов: 2

Неправильный синтаксис рядом с ключевым словом "ORDER"


Неправильный синтаксис рядом с ключевым словом "порядок".
Описание: необработанное исключение возникло во время выполнения текущего веб-запроса. Пожалуйста, просмотрите трассировку стека для получения дополнительной информации об ошибке и о том, где она возникла в коде.

Сведения об исключении: System.Data.SqlClient.SqlException: неправильный синтаксис рядом с ключевым словом "ORDER".

Дорогие все,
Я получаю ту же ошибку, что и выше, но не знаю, как ее решить.
Вот мой код:

public DataTable getINASecKeywordList(String Shortcode)
        {
            DataTable dt = new DataTable();
            Database dbCon = DatabaseFactory.CreateDatabase("InaPremium");
            string cmd = "";
             string keyword = "";

            try
            {
               
               if (Shortcode == "All" || Shortcode == "")
                {
                   cmd = "SELECT DISTINCT(seckeyword) FROM INA_Keyword ORDER BY seckeyword";
                }
                else
                {

                    cmd = "SELECT DISTINCT(seckeyword) FROM INA_Keyword WHERE shortcode = "+ Shortcode + " AND keyword = " + keyword + " ORDER BY seckeyword";
                }
                using (DbCommand dbcmd = dbCon.GetSqlStringCommand(cmd))
                {
                    dbcmd.CommandType = CommandType.Text;
                    dbcmd.CommandTimeout = 100;
                    dt = dbCon.ExecuteDataSet(dbcmd).Tables[0];
                }
                return dt;
            }
            catch (Exception ex)
            {
                Logger.LogToFile(ConfigurationManager.AppSettings.Get("errLogPath") + "INADAC.txt", ex);
                throw;
            }
        }


Я понятия не имею, как решить проблему "неправильного синтаксиса" рядом с ключевым словом "порядок".
Пожалуйста, помогите, спасибо.

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

Попытка решить ошибку, что неправильный синтаксис

Jochen Arndt

Что такое шорткод и ключевое слово?
Вы должны распечатать созданную команду, чтобы взглянуть на нее. Такие ошибки могут возникать, например, когда параметры содержат пробелы. Затем они должны быть вставлены в кавычки.

2 Ответов

Рейтинг:
2

Patrice T

Используйте отладчик и посмотрите на cmd чтобы увидеть, каков ваш реальный запрос.

Никогда не создавайте SQL-запрос путем конкатенации с пользовательскими вводами, он называется "SQL-инъекция", он опасен для вашей базы данных и подвержен ошибкам.
Одна кавычка в имени - и ваша программа рухнет. Если пользовательский ввод типа "Брайан О'Коннер" может привести к сбою вашего приложения, то это уязвимость SQL-инъекции.
SQL-инъекция-Википедия[^]
SQL-инъекция[^]


Рейтинг:
2

_Asif_

Ваш запрос неверен.

КМД = "выбрать различные(seckeyword) от INA_Keyword где короткий = "+ короткий + " и "ключевое слово" = "+ ключевое слово + " Сортировать по seckeyword";

Так и должно быть

КМД = "выбрать различные(seckeyword) от INA_Keyword где шорткод = '"+ короткий + "' и "ключевое слово" = '" + ключевое слово + "' заказ seckeyword";

как уже упоминалось ранее, этот подход уязвим для атак sql-инъекций. Проверьте рекомендации OWASP.