Неправильный синтаксис SQL около 'END' - PullRequest
0 голосов
/ 29 ноября 2018

Попробую создать какое-то правило из метода создания учетной записи.И посмотрите, у вас есть ошибка в вашем синтаксисе SQL;проверьте руководство, соответствующее вашей версии сервера MariaDB, на предмет правильного синтаксиса для использования рядом с 'END' в строке 1

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

1 Ответ

0 голосов
/ 29 ноября 2018

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.

Кстати, вы действительно должны использовать MySqlParameter для connection_ID, а не буквальную строку;это защитит вас от атак SQL-инъекций и станет хорошей привычкой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...