【问题标题】:Creating MYSQL database with C# paramatized使用 C# 参数化创建 MYSQL 数据库
【发布时间】:2018-05-05 00:34:32
【问题描述】:

此代码有错误: “您的 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 语句,除了我使用的是参数这一事实。

【问题讨论】:

  • 试过直接在工作台中运行相同的命令吗?
  • 检查您的查询以确保查询没有任何问题。顺便说一句,您应该处理连接和命令。看看这个例子:stackoverflow.com/a/2532562
  • 谢谢,我是使用 MySQL 的新手,这比我使用的方法更简单。

标签: c# mysql asp.net


【解决方案1】:

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

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

在 DBMS 看来,您的查询看起来像

CREATE DATABASE IF NOT EXISTS 'MySQLDatabase'

这里不允许使用单引号。如果我们以字符串文字的形式讨论值,他们将是正确的。

参数化查询在替换对象名称时无法正常工作(在 DDL 语句中),它们不是为此而设计的。在这里,您必须自己将名称连接到查询字符串。并添加检查数据是否正常。

【讨论】:

  • 这个答案效果很好,似乎是最简单的。由于我正在处理的数据完全是内部的,我不必担心 sqlinsertion 或任何类似性质的事情,所以不需要使用参数带来的安全性。
猜你喜欢
  • 1970-01-01
  • 2021-10-30
  • 2019-07-10
  • 2013-08-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-01
  • 2013-08-30
相关资源
最近更新 更多