Подтвердить что ты не робот

Можно ли использовать MySql User Defined Variable в .NET MySqlCommand?

Я пытаюсь выполнить запрос, который в настоящее время работает в phpMyAdmin, но он не работает при выполнении его в .NET с помощью MySqlAdapter. Это оператор Sql.

SELECT @rownum := @rownum +1 rownum, t . *
FROM (
  SELECT @rownum :=0
) r, (
  SELECT DISTINCT
    TYPE FROM `node`
  WHERE TYPE NOT IN ('ad', 'chatroom')
)t     

Использует @rownum для номера каждой отдельной строки, возвращаемой из моего внутреннего скалярного запроса. Но если я использую его в .NET, он предполагает, что @rownum является параметром и выбрасывает исключение, потому что я его не определял.

using (var sqlConnection = new MySqlConnection(SOURCE_CONNECTION))
{
    sqlConnection.Open();

    MySqlDataAdapter sqlAdapter = new MySqlDataAdapter(SqlStatement, sqlConnection);

    DataTable table = new DataTable();
    sqlAdapter.Fill(table);
    sqlConnection.Close();

    return table;
}

Любые идеи о том, как я могу обойти эту проблему? Или возможные способы получить номер строки?

4b9b3361

Ответ 2

Какую версию поставщика данных MySQL вы используете? Возможно, вам придется обновить.

Я нашел это в 5.0 документации:

Предыдущие версии поставщика использовали символ "@" для отметки параметров в SQL. Это несовместимо с переменными пользователя MySQL, поэтому поставщик теперь использует '?' символ для нахождения параметров в SQL. Чтобы поддерживать старый код, вы можете установить "старый синтаксис = да" в строке подключения. Если вы это сделаете, помните, что исключение не будет выбрано, если вы не сможете определить параметр, который вы собираетесь использовать в своем SQL.

Ответ 3

Вы можете добавить столбец в свою таблицу под названием rownum, а затем заполнить его значениями:

table.Columns.Add("rownum");
for (int i=0; i < table.Rows.Count; i++)
{
table.Rows[i]["rownum"] = i;
}