C # MySql.Data.MySqlClient Создать базу данных не удалось - PullRequest
0 голосов
/ 31 октября 2019

Я хотел создать новую базу данных, используя MySql.Data.MySqlClient с подготовленными утверждениями. К сожалению, он показывает мне сообщение об ошибке «У вас ошибка с синтаксисом SQL». Использование «теста» для значения импорта метода iv_name.

При выполнении «СОЗДАТЬ БАЗУ ДАННЫХ, ЕСЛИ НЕ СУЩЕСТВУЕТ тест;»прямо в консоли сервера mysql, работает без проблем. При добавлении «'» слева и справа от @dbname будет создана база данных с именем @dbname на моем сервере MySQL.

public void CreateDatabase(string iv_name)
    {
        MySqlCommand lo_cmd = new MySqlCommand("CREATE DATABASE IF NOT EXISTS @dbname;", this._conn);
        lo_cmd.Prepare();
        lo_cmd.Parameters.AddWithValue("@dbname", iv_name);
        lo_cmd.ExecuteNonQuery();
    }

Здесь вы можете найти скриншот из процесса отладки

error while creating a new database - debugger result

1 Ответ

1 голос
/ 31 октября 2019

Нельзя использовать параметры в инструкциях SQL определения данных, таких как CREATE TABLE. Используйте конкатенацию строк для создания таких операторов.

Будьте очень осторожны с именами таблиц, предоставленными пользователем. Избегайте пунктуации и избегайте зарезервированных слов, таких как «выберите» и «таблица». Лучше всего отклонить любой пользовательский ввод, содержащий знаки препинания, кроме _, и поставить перед пользовательским вводом что-то вроде t_. Таким образом, вы отклоняете table;droptable и превращаете mytable в t_mytable.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...