Создание базы данных mysql с использованием команды mysql

У меня возникла проблема при попытке создать базу данных с помощью команды mysql. Код, который я использую:

using (MySqlConnection con = connect_db())
{
 con.Open();
 MySqlCommand cmd = new MySqlCommand("CREATE DATABASE @name;", con);
 cmd.Parameters.AddWithValue("@name", "fancydb");
 try
 {
 cmd.ExecuteNonQuery();
 }
 catch (Exception exc)
 { 
 return;
 }
 cmd.Dispose();
 con.Close();
 con.Dispose();
}

Когда я пытаюсь запустить этот код, я всегда получаю сообщение об ошибке, что у меня есть

ошибка в синтаксисе mysql около "fancydb"

но когда я ввожу имя в команду: "CREATE DATABASE facnydb;", он работает. Может кто-нибудь объяснить мне, почему ошибка происходит только при попытке использования параметров?

4 ответа

Оператор create не является оператором манипуляции данными. Параметры допускаются только в таких операциях. Оператор create ist представляет собой инструкцию определения данных.


Параметры SqlCommand поддерживаются для Операции манипуляции данными Операции Язык определения данных.

Язык манипулирования данными =

SELECT ... FROM ... WHERE ...
INSERT INTO ... VALUES ...
UPDATE ... SET ... WHERE ...
DELETE FROM ... WHERE ...

Язык определения данных =

CREATE TABLE ... 
DROP TABLE ... ;
ALTER TABLE ... ADD ... INTEGER;


Я бы предположил, что запрос выполняется как

CREATE DATABASE "fancydb";

что неверно.


Это работает:

cmd.CommandText = "exec ('CREATE DATABASE ' + @database)";
cmd.Parameters.AddWithValue("@database", restoreDB);
cmd.ExecuteNonQuery();

licensed under cc by-sa 3.0 with attribution.