#c# #mysql #alias #where-clause
#c# #mysql #псевдоним #where-предложение
Вопрос:
У меня возникли некоторые проблемы с оператором 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) и передача параметра (как показано ниже) не работает .
sqlFillRelated.Parameters.AddWithValue("@postcode", int.Parse(PostcodeTxtBox.Text.ToString()))
Полный запрос (с параметрами) успешно выполняется при запуске из SQL-команды server Explorer.
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();
Комментарии:
1. Я думаю, вам также следует добавить тег для языка, с которого вы обращаетесь к MySQL.
Ответ №1:
Хорошо, это рискованно, потому что я не уверен, какой язык вы используете (это C #?), Но мне кажется странным, что вы используете @ при настройке параметров.
Обычно вы используете какой-нибудь волшебный символ для обозначения параметра в SQL-запросе, но когда вы устанавливаете его программно, вы опускаете этот символ.
Вы пробовали
sqlFillRelated.Parameters.AddWithValue("status", "Open")
вместо
sqlFillRelated.Parameters.AddWithValue("@status", "Open")
?
Комментарии:
1. Я использую C #, разрабатываю ASP-приложение с MySQL в качестве базы данных. @ обозначает параметр для запросов Mysql, а метод AddWithValue перегружается как (string ParameterName, значение объекта), и, насколько мне известно, имя параметра должно содержать @ (это работает в других моих запросах — и я полагаю, mysql поддерживает именованные запросы?).
Ответ №2:
Это C #. Удалите префиксы ‘@’ к параметрам в коде C #.
Комментарии:
1. Ах. Это действительно работает, спасибо вам обоим! Откуда я взял это соглашение @ naming от …?
2. Из соглашений о сценариях MySQL, соглашений о нескольких хранимых процедурах SQL, всего. Не расстраивайтесь! Это боль, @ char ломает вещи, мне потребовалось 2 дня, чтобы понять это много лет назад, когда я сделал то же самое , и вы, похоже, 10-й другой человек, которого я видел, публикует по этому же вопросу.