为了账号安全,请及时绑定邮箱和手机立即绑定

使用参数化的C#创建MYSQL数据库

使用参数化的C#创建MYSQL数据库

C#
一只甜甜圈 2021-05-06 14:15:31
我的代码有错误:“您的SQL语法有错误;请查看与您的MySQL服务器版本相对应的手册,以找到在第1行的“ MySQLDatabase”附近使用正确的语法”string connectionString = string.Format("SERVER = {0}; Port = {1}; User = {2}; Password = {3}", server, port, username, password);MySqlConnection conn = new MySqlConnection(connectionString);MySqlCommand cmd;try{    conn.Open();    string createDBCommand = "CREATE DATABASE IF NOT EXISTS @database";    cmd = new MySqlCommand(createDBCommand, conn);    cmd.Parameters.AddWithValue("@database", database);    cmd.ExecuteNonQuery();    conn.Close();}这是在ExecuteNonQuery()语句中产生错误的代码。database是来自class.Properties.Default值的值。并且当前是字符串“ MySQLDatabase”我当前正在使用MySQL服务器5.7,并且正在使用与文档中的示例类似的create语句,除了我正在使用参数这一事实之外。
查看完整描述

1 回答

?
湖上湖

TA贡献2003条经验 获得超2个赞

“您的SQL语法有错误;请在与MySQL服务器版本相对应的手册中找到在第1行的“ MySQLDatabase”附近使用的正确语法”

注意,这些不是围绕MySQLDatabase的双引号,而是两个单引号。这在这里给出了重要的提示。发生错误的语句的子字符串用错误消息中的单引号引起来。也就是说,子字符串读取为“ MySQLDatabase”,另一对单引号位于该子字符串中。

正如DBMS所看到的,您的查询看起来像

CREATE DATABASE IF NOT EXISTS 'MySQLDatabase'

并且此处不允许使用单引号。如果我们讨论字符串文字形式的值,那将是正确的。

参数化查询只是不能正确地替换对象名称(在DDL语句中),它们并不是为此目的而设计的。在这里,您必须自己将名称连接到查询的字符串。并添加检查,以确保数据是合理的。


查看完整回答
反对 回复 2021-05-29
  • 1 回答
  • 0 关注
  • 248 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信