我想使用带有预准备语句的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 =“在创建新数据库时出错-调试器结果”>
您不能在数据定义SQL语句(如CREATE TABLE)中使用参数。使用字符串连接来创建类似的语句。
请特别注意用户提供的表名。避免标点符号和保留字,例如“ select”和“ table”。最好的选择是拒绝包含_
以外的其他标点符号的用户输入,并为用户输入加上t_
之类的前缀。因此,您拒绝table;droptable
,然后将mytable
转换为t_mytable
。