Можно ли использовать пользовательскую переменную MySql в .NET MySqlCommand? - PullRequest
15 голосов
/ 06 июня 2009

Я пытаюсь выполнить запрос, который в настоящее время работает в 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;
}

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

Ответы [ 3 ]

37 голосов
/ 03 апреля 2011

Я нашел этот блог , в котором говорится, что с более новыми версиями .net Connector вы должны добавить

;Allow User Variables=True

к строке подключения. Сравните мой вопрос SO Как я могу использовать определяемую пользователем переменную MySql в .NET MySqlCommand?

3 голосов
/ 12 июня 2009

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

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

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

1 голос
/ 06 июня 2009

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

table.Columns.Add("rownum");
for (int i=0; i < table.Rows.Count; i++)
{
table.Rows[i]["rownum"] = i;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...