MySql Query - Выберите Где, Псевдоним и параметр

У меня проблемы с оператором MySQL Select Where, который использует псевдонимы и параметры. Моя проблема заключается в части утверждения Where. В нынешнем виде я не возвращаю никаких результатов, когда пытаюсь использовать какие-либо параметры.

Рассматриваемое утверждение:

SELECT postcode, suburb, streetname, categorycode, DATE_FORMAT(dateRecorded, '%d/%m/%Y') AS Expr1, DATE_FORMAT(dateLastModified, '%d/%m/%Y') AS Expr2, status FROM incidentdetails WHERE (postcode = @postcode) AND (suburb = @suburb) AND (categorycode = @categorycode) AND (status = @status)

Выполнение этого запроса с правильными параметрами возвращает правильные столбцы, но не данные.

Полностью удалив предложение where, я получаю полную таблицу, как и ожидалось.

Изменение предложения where с WHERE (postcode = @postcode) AND (suburb = @suburb) AND (categorycode = @categorycode) AND (status = @status) на WHERE (postcode = 4020) работает - как и ожидалось.

Замена предложения WHERE на (postcode = @postcode) и передача параметра (как показано ниже) не работают.

sqlFillRelated.Parameters.AddWithValue("@postcode", int.Parse(PostcodeTxtBox.Text.ToString()))

Полный запрос (с параметрами) успешно работает при запуске из команды SQL проводника сервера.

        string sqlFILL = "SELECT postcode, suburb, streetname, categorycode, DATE_FORMAT(dateRecorded, '%d/%m/%Y') AS Expr1, DATE_FORMAT(dateLastModified, '%d/%m/%Y') AS Expr2, status FROM incidentdetails WHERE (postcode = @postcode) AND (suburb = @suburb) AND (categorycode = @categorycode) AND (status = @status)";
    string sql = "SELECT COUNT(*) FROM incidentdetails WHERE (postcode = @postcode) AND (suburb = @suburb) AND (categorycode = @categorycode) AND (status = @status)";
    MySqlConnection mycon = new MySqlConnection(sqlconnection);
    mycon.Open();
    MySqlCommand selectRelatedCmd = new MySqlCommand(sql, mycon);
    MySqlCommand sqlFillRelated = new MySqlCommand(sqlFILL, mycon);
    int matches = 0;
    selectRelatedCmd.Parameters.AddWithValue("@postcode", int.Parse(PostcodeTxtBox.Text.ToString()));
    selectRelatedCmd.Parameters.AddWithValue("@suburb", SuburbTxtBox.Text.ToString());
    selectRelatedCmd.Parameters.AddWithValue("@categorycode",IncidentTypeDropList.Text.ToString());
    selectRelatedCmd.Parameters.AddWithValue("@status", "Open");
    sqlFillRelated.Parameters.AddWithValue("@postcode", int.Parse(PostcodeTxtBox.Text.ToString()));
    sqlFillRelated.Parameters.AddWithValue("@suburb", SuburbTxtBox.Text.ToString());
    sqlFillRelated.Parameters.AddWithValue("@categorycode", IncidentTypeDropList.Text.ToString());
    sqlFillRelated.Parameters.AddWithValue("@status", "Open");

    matches = int.Parse(selectRelatedCmd.ExecuteScalar().ToString());
    if (matches == 0)
    {
        matchingIncidentPanel.Visible = false;  
    }
    else if (matches >= 1)
    {
        matchingIncidentPanel.Visible = true;
    }

    MySqlDataAdapter da = new MySqlDataAdapter(sqlFILL, mycon);
    DataTable table = new DataTable();
    table.Locale = System.Globalization.CultureInfo.InvariantCulture;
    da.Fill(table);
    g.DataSource = table;
    g.DataBind();

    mycon.Close();

person Travis    schedule 24.04.2011    source источник
comment
Я думаю, вам также следует добавить тег для языка, с которого вы получаете доступ к MySQL.   -  person stalker    schedule 24.04.2011


Ответы (2)


Хорошо, это долгий путь, потому что я не уверен, какой язык вы используете (это C #?), Но мне кажется странным, что вы используете @ при настройке параметров.

Обычно вы используете какой-то магический символ для обозначения параметра в SQL-запросе, но когда вы устанавливаете его программно, вы пропускаете этот символ.

Ты пробовал

sqlFillRelated.Parameters.AddWithValue("status", "Open")

вместо того

sqlFillRelated.Parameters.AddWithValue("@status", "Open")

?

person stalker    schedule 24.04.2011
comment
Я использую C #, разрабатывая приложение ASP с MySql в качестве базы данных. @ Обозначает параметр для запросов Mysql, а метод AddWithValue перегружается как (строка ParameterName, значение объекта), и, насколько мне известно, имя параметра должно иметь @ (он работает в других моих запросах - и я верите, что mysql поддерживает именованные запросы?). - person Travis; 24.04.2011

Это C #. Избавьтесь от префиксов '@' в параметрах кода C #.

person Christo    schedule 24.04.2011
comment
Ах. Это действительно работает, спасибо вам обоим! Откуда я взял это соглашение об именах @ ...? - person Travis; 24.04.2011
comment
От соглашений сценариев MySQL, множества соглашений хранимых процедур SQL, всего. Не расстраивайтесь! Это боль, которую @ char ломает, мне потребовалось 2 дня, чтобы понять это много лет назад, когда я сделал то же самое и вы ' как 10-й человек, которого я видел сообщение по той же проблеме. - person Christo; 24.04.2011