У меня есть запрос, который отлично работает в MySql Workbench, но выдает синтаксическую ошибку "You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ':= 0+1 AS Rank, z.* 
FROM(SELECT MemberId, Valu' at line 2"
при запуске через MySqlCommand.ExecuteReader. Синтаксис, о котором идет речь, - это присвоение переменной внутри выбора (т. Е. SELECT @r := @r + 1
). Я использую .net разъем v.6.9.9 на случай, если это уместно. Также вот моя строка подключения: "server=mymysqlserveraddress;port=3306;database=dbName;user id=username;password=********;Convert Zero Datetime=True;Allow User Variables=true"
Я попытался установить Allow User Variables = true в строке подключения, как показано здесь: Можно ли использовать определяемую пользователем переменную MySql в .NET MySqlCommand?
Я искал другие вопросы, которые соответствовали этому, но в конечном итоге нашел только тот, который является той же проблемой, но для спящего режима в java: Как я могу использовать оператор присваивания MySQL (: =) в собственном запросе спящего режима?
Вот необработанный SQL-запрос, который работает в MySql Workbench:
SELECT Rank, Value
FROM (SELECT @r := @r+1 AS Rank, z.*
FROM(SELECT MemberId, Value
FROM (SELECT Id, MemberId, Value, CreatedDate, EventId
FROM Scores
WHERE (LoadTime IS NULL AND EventId = 408)
ORDER BY Value DESC
) AS sub
)z,
(SELECT @r:=0)y
)x
WHERE x.Value<=228000;
408 и 228000 являются просто примерами - мой код C # создает строку и затем отправляет ее на сервер через:
StringBuilder statisticQueryString = new StringBuilder("");
// construct statisticQueryString
using (MySqlCommand cmd = new MySqlCommand(statisticQueryString.ToString(), conn))
{
cmd.Parameters.AddWithValue("r", 0);
using (MySqlDataReader rdr = cmd.ExecuteReader(CommandBehavior.SequentialAccess))
{
// Iterate through the collection of RankResult items...
}
}
Пример сконструированного запроса (я печатаю последний запрос в журнал перед отправкой), который завершается ошибкой с синтаксической ошибкой, приведенной выше:
SELECT Rank, Value
FROM (SELECT @r := @r+1 AS Rank, z.*
FROM(SELECT MemberId, Value
FROM (SELECT Id, MemberId, Value, CreatedDate, EventId
FROM Scores
WHERE (LoadTime IS NULL AND EventId = 408)
ORDER BY Value DESC
) AS sub
)z,
(SELECT @r:=0)y
)x
WHERE x.Value<=228000;
Как видите, составленный запрос идентичен тому, который я могу выполнить без ошибок в MySql workbench.