【问题标题】:SQL Wrong syntax near 'END''END' 附近的 SQL 语法错误
【发布时间】:2018-11-29 16:54:36
【问题描述】:

我会尝试从帐户创建方法中创建一些规则。并查看您的 SQL 语法有错误;查看与您的 MariaDB 服务器版本相对应的手册,了解在第 1 行的“END”附近使用的正确语法

string query1 = "IF account.char_count_max > 0 THEN INSERT INTO 
playercharacter(id, connection_ID) VALUES((SELECT id FROM account WHERE 
connection_ID='" + connectionID + "'), (SELECT connection_ID FROM account 
WHERE 
connection_ID='" + connectionID + "')) END";
MySqlCommand cmd = new MySqlCommand(query1, 
MySQL.mySQLsettings.connection);
try
{             
cmd.ExecuteNonQuery();
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
throw;
}

【问题讨论】:

    标签: c# sql syntax


    【解决方案1】:

    SqlCommand.ExecuteNonQuery 通常用于直接执行 INSERT、UPDATE 或 DELETE 语句,而不是作为 IF 的一部分。考虑到这一点,我建议您将代码更改为:

    if (accountCharCount > 0)
    {
        string query1 = "INSERT INTO playercharacter(id, connection_ID) VALUES((SELECT id FROM account WHERE connection_ID='" + connectionID + "'), (SELECT connection_ID FROM account WHERE connection_ID='" + connectionID + "'))";
        using (MySqlCommand cmd = new MySqlCommand(query1, MySQL.mySQLsettings.connection))
        {
            try
            {             
                cmd.ExecuteNonQuery();
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.ToString());
                throw;
            }
        }
    }
    

    因此,您需要先调用数据库来获取 accountCharCount (account.char_count_max)。或者,您可以将所有 SQL 放入一个存储过程中,然后使用单个 SqlCommand.ExecuteNonQuery 调用它。

    顺便说一句,你真的应该为 connection_ID 使用 MySqlParameter,而不是文字字符串;这将保护您免受 SQL 注入攻击,并且是养成的好习惯。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-04-07
      • 2016-02-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多