4

尝试使用 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();
}

当我尝试运行此代码时,我总是收到一条错误消息,说我有一个

“fancydb”附近的mysql语法错误

但是当我将名称放在命令中时:"CREATE DATABASE facnydb;"它可以工作。谁能向我解释为什么只有在我尝试使用参数时才会发生错误?

4

4 回答 4

3

创建语句不是数据操作语句。仅在此类操作中允许使用参数。创建语句是数据定义语句。

于 2013-05-27T10:25:35.037 回答
1

我猜想查询被执行为

CREATE DATABASE "fancydb";

这是错误的。

于 2013-05-27T10:24:55.957 回答
1

SqlCommand 参数支持数据操作语言操作而不是数据定义语言操作。

数据操作语言 =

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

数据定义语言 =

CREATE TABLE ... 
DROP TABLE ... ;
ALTER TABLE ... ADD ... INTEGER;
于 2013-05-27T10:27:05.387 回答
0

这有效:

cmd.CommandText = "exec ('CREATE DATABASE ' + @database)";
cmd.Parameters.AddWithValue("@database", restoreDB);
cmd.ExecuteNonQuery();
于 2017-07-12T16:18:23.033 回答