C#MySql.Data.MySqlClient创建数据库失败

问题描述 投票:0回答:1

我想使用带有预准备语句的MySql.Data.MySqlClient创建一个新数据库。不幸的是,它向我显示了一条错误消息“您的SQL语法有错误”。使用“ test”作为方法的iv_name导入值。

执行“如果不存在则创建数据库;”直接在mysql服务器控制台中,它可以正常工作。当在@dbname的左右添加“'”时,将在我的mysql服务器中创建一个名为@dbname的数据库。

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();
    }

在这里您可以找到调试过程中的屏幕快照

<< img src =“ https://image.soinside.com/eyJ1cmwiOiAiaHR0cHM6Ly9pLnN0YWNrLmltZ3VyLmNvbS9aT2hIRy5wbmcifQ==” alt =“在创建新数据库时出错-调试器结果”>

c# mysql prepared-statement
1个回答
1
投票

您不能在数据定义SQL语句(如CREATE TABLE)中使用参数。使用字符串连接来创建类似的语句。

请特别注意用户提供的表名。避免标点符号和保留字,例如“ select”和“ table”。最好的选择是拒绝包含_以外的其他标点符号的用户输入,并为用户输入加上t_之类的前缀。因此,您拒绝table;droptable,然后将mytable转换为t_mytable

© www.soinside.com 2019 - 2024. All rights reserved.