everstudent Ответов: 1

Как выполнить запрос DESC tablename с помощью параметризованных запросов


MySql-это база данных, используемая здесь.

Попытка выполнить DESC tableName или DESC `tableName` с помощью параметризованных запросов в C#, как показано ниже. Однако, столкнувшись с ошибкой типа "у вас есть ошибка в вашем синтаксисе SQL; проверьте руководство, которое соответствует вашей версии сервера MySQL для правильного синтаксиса для использования рядом с сотрудником", где сотрудник-это имя таблицы.

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

But with the below code, i think query getting executed is DESC 'tableName' which is syntax error. 

Please help how to solve this issue.

<pre lang="c#">public void GetTableDescriptiont(string tableName)
{
    ConnectionManager conManager = new ConnectionManager();
    MySqlCommand dbCommand = new MySqlCommand
    {
        Connection = conManager.GetConnection(databaseName),
        CommandText = "DESC @tableName"
    };
    dbCommand.Parameters.AddWithValue("@tableName",tableName);
    var abc = dbCommand.ExecuteReader();//Gets exception as query is DESC 'tableName'

Richard MacCutchan

Что ты пытаешься здесь сделать? Насколько мне известно, "DESC" используется для сортировки результатов в порядке убывания.

everstudent

Команда DESCRIBE или DESC(оба они одинаковы) предназначена для описания структуры таблицы. Синтаксис: опишите один или DESC one

Richard MacCutchan

Возможно, синтаксис не допускает параметризованных запросов. Попробуйте его в виде одной строки и посмотрите, что получится. Также полезно включать точный текст любых сообщений об ошибках, которые генерируются. А также какую систему баз данных вы используете; "C#" мало что нам говорит.

everstudent

Обновил вопрос. MySQL-это база данных, и ошибка похожа на "У вас есть ошибка в вашем синтаксисе SQL; проверьте руководство, которое соответствует вашей версии сервера MySQL для правильного синтаксиса для использования рядом с сотрудником" ( где сотрудник-это имя таблицы). Он работает непосредственно как одна строка, например DESC `Employee`.
Может быть, как вы уже упоминали, если он не поддерживает параметризованные запросы, но как это подтвердить? А visual studio выдает предупреждение анализа кода безопасности о том, что при получении пользовательских данных следует использовать параметризованные запросы, чтобы избежать внедрения sql-кода.

Richard MacCutchan

Итак, MySQL нуждается в нем как в одной строке. Предупреждения от VS таковы: убедитесь, что вы избегаете возможности SQL-инъекции, проверяя входной параметр.

1 Ответов

Рейтинг:
1

phil.o

Согласно оригинальному руководству (3.4 получение информации о базах данных и таблицах[^]), текущий синтаксис для получения описания таблицы таков::

DESCRIBE table_name;

DESC является ли ключевое слово, используемое для управления сортировкой результатов из SELECT запрос. Несмотря на наличие одних и тех же первых четырех букв, оба этих ключевых слова относятся к совершенно разным функциональным возможностям.

[edit]страница в предоставленной ссылке, по-видимому, утверждает, что DESC это короткий путь для DESCRIBE Однако, на эта страница[^], синоним для DESCRIBE предпочитаю быть EXPLAIN Может быть, в какой-то момент MySQL принял DESC как ярлык, но ваш опыт показал бы, что это больше не так. Вам следует попробовать другой синтаксис и посмотреть, что вы получите.[/edit]


everstudent

Спасибо за ответ. Здесь проблема заключается в использовании описания/объяснения в параметризованном виде. Они выдают исключение как "у вас есть ошибка в синтаксисе SQL. Пожалуйста, проверьте руководство на наличие правильного синтаксиса рядом с надписью "сотрудник". ( Employee - это имя таблицы). Если мы не используем параметризованный запрос, анализ кода выдает предупреждение безопасности. Есть ли способ исправить эту проблему или преодолеть это предупреждение безопасности ( подавление в любом случае не является правильным)