Member 13858616 Ответов: 3

Cmd.executenonquery(); выдает ошибку "неправильный синтаксис рядом с '/'"


Разработка веб-приложения .net с использованием языка C#.

Когда я использую один запрос alter, я получаю вышеуказанную ошибку.

home.global.mon - получение значения имени таблицы из глобальной переменной.
tbl_col - имя столбца, чтобы быть добавлены, принимая из локальной переменной.

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

кон.открыть();
команда sqlcommand cmd и=новая команда sqlcommand("изменить таблицу "+дом.глобальные.пн+ "включить" +tbl_col+ "типа varchar(50)",кон );
УМК.метод executenonquery();
кон.рядом();

кон(связь) уже установился при попрошайничестве.

j snooze

Я думаю, что если вы отладите и посмотрите, каково значение home.global.mon или tbl_col, вы увидите проблему. Кроме того, другие люди скажут вам это, но вы должны использовать параметры команды вместо объединения строки вместе. Это оставляет вас открытыми для атак sql-инъекций.

3 Ответов

Рейтинг:
11

F-ES Sitecore

"Alter table "+home.global.mon+ "ADD" +tbl_col+ "varchar(50)"


Если ваши переменные не имеют начальных\конечных пробелов, то вышеизложенное приведет к


"Alter table TableNameADDColumnNamevarchar(50)"


Является ли это допустимым SQL? Вы могли бы увидеть это сами, если бы использовали отладчик для пошагового просмотра вашего кода. Кроме того, тот факт, что у вас есть "/" в ошибке, предполагает, что в одной из ваших переменных есть косая черта, оставляющая недопустимое имя таблицы или столбца.

Как уже говорили другие, мы не знаем, что находится в ваших входных данных, поэтому мы не можем сказать вам, что делать. Однако научитесь отлаживать свой код, так как это поможет вам охватить основы.


Рейтинг:
1

Dave Kreskowiak

Во-первых, вы строите запросы с помощью конкатенации строк. Это действительно плохая идея!! Всегда используйте параметризованные запросы. Например, Google для "параметризованных запросов C#".

Затем вы можете поискать в Google "атаку SQL-инъекций", чтобы понять, почему то, что вы делаете, так плохо.

Теперь, сказав это, вы не обращаете внимания на пробелы, когда строите свою строку запроса. Ваш результирующий запрос будет выглядеть примерно так:

Alter table homeglobalmonADDtblcolvarchar(50)
* Замените выделенный курсивом текст соответствующим содержимым переменной.

Сначала постройте запрос в строковую переменную, а затем используйте строковую переменную для создания объекта SqlCommand и использования отладчика, что очень упростило бы диагностику этой проблемы.


Рейтинг:
0

Patrice T

Цитата:
Cmd.executenonquery(); выдает ошибку "неправильный синтаксис рядом с '/'"

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

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

Существует почти универсальное решение: запускайте свой код на отладчике шаг за шагом, проверяйте переменные.
Отладчик здесь, чтобы показать вам, что делает ваш код, и ваша задача-сравнить с тем, что он должен делать.
В отладчике нет никакой магии, он не знает, что вы должны делать, он не находит ошибок, он просто помогает вам, показывая, что происходит. Когда код не делает того, что ожидается, вы близки к ошибке.
Чтобы увидеть, что делает ваш код: просто установите точку останова и посмотрите, как работает ваш код, отладчик позволит вам выполнять строки 1 на 1 и проверять переменные по мере их выполнения.
Отладчик - Википедия, свободная энциклопедия[^]

Освоение отладки в Visual Studio 2010 - руководство для начинающих[^]
Базовая отладка с помощью Visual Studio 2010 - YouTube[^]
Отладка кода C# в Visual Studio - YouTube[^]
Отладчик здесь только для того, чтобы показать вам, что делает ваш код, и ваша задача-сравнить его с тем, что он должен делать.