2016-12-18 3 views
0

В MySQL Workbench запрос MySQLИспользование запроса MySQL с переменными из C#

SET @rownum=-1; 
SELECT @rownum:[email protected]+1 AS row_num 
FROM someTable 

возвращает таблицу, где значение row_num начинается с 0 и идет вверх на 1 для каждой строки:

+---------+ 
| row_num | 
+---------+ 
| 0  | 
+---------+ 
| 1  | 
+---------+ 
| 2  | 

    .... 

Я пытаюсь выполнить тот же запрос из C#.

string connectionString = "SERVER=" + server + ";" + "DATABASE=" + database + ";" + 
    "UID=" + uid + ";" + "PASSWORD=" + password + ";" + "ALLOW USER VARIABLES = true;"; 

MySqlConnection connection = new MySqlConnection(connectionString); 
MySqlCommand command; 
MySqlDataAdapter adapter = new MySqlDataAdapter(); 

connection.Open(); 
command = connection.CreateCommand(); 

command.CommandText = "SELECT @rownum := @rownum + 1 AS row_num FROM someTable"; 
command.Parameters.Add("@rownum", MySqlDbType.Int32); 
command.Parameters["@rownum"].Value = -1; 
adapter.SelectCommand = command; 

DataTable table = new DataTable(); 
adapter.Fill(table); 

Последняя строка из приведенных выше результатов в следующем MySqlException

Вы имеете ошибку в вашем синтаксисе SQL; в руководстве, соответствует версии сервера MySQL для правильного синтаксиса, чтобы использовать вблизи «: = -1 + 1 AS ROW_NUM ИЗ someTable»

Почему запрос не работает с C#?

+0

why ':' after '@ rownum'? –

+0

Вы не объявляете @rownum, как в исходном запросе – Mihai

+0

@Ehsan: becasue: = - оператор присваивания в MySQL. Использование '@rownum = @rownun + 1' в запросе MySQL приводит к сравнению -1 = (-1 + 1), и поэтому каждая строка имеет значение 0 для row_num –

ответ

0

Удалить эти строки параметров:

command.Parameters.Add("@rownum", MySqlDbType.Int32); 
command.Parameters["@rownum"].Value = -1; 

И использовать этот запрос:

command.CommandText = "SET @rownum=-1;SELECT @rownum := @rownum + 1 AS row_num FROM someTable"; 

Путь ваш делают это как "@rownum" будет заменен на -1. Итак, у вас возникает вопрос:

SELECT -1:= -1 + 1 AS row_num FROM someTable 
+0

Выполнение запроса и любое присваивание переменной происходит в движке MySQL. Ваш string.Format приводит к точному тому же CommandText, что и мой код, и приводит к той же ошибке тоже –

+0

Вы уверены? Я быстро сделал редактирование на свой пост. Пожалуйста, убедитесь, что вы используете последнее редактирование, потому что да, первый был неправильным, но я сделал так быстро. Вы, должно быть, подняли его, прежде чем я отредактировал свой ответ. – CodingYoshi

+0

Я пробовал оба (до редактирования и после). Оба результата приводят к той же ошибке –

Смежные вопросы