Исправить неправильный вывод
У меня есть этот запрос в моем проекте
u_name = Application.Current.Properties["username"].ToString();
cmd = new SqlCommand("Select 'User ID' = u_id, 'USERNAME' = u_name, 'ROLE' = r_name from [User] as u, [Role] as r Where u_name != '@u_name' and u.r_id = r.r_id and r_name like '%" + txtBoxSearch.Text.Replace("'", "''").Trim() + "%' or u_name like '%" + txtBoxSearch.Text.Replace("'", "''").Trim() + "%'", conn);
cmd.Parameters.AddWithValue("@u_name", u_name);
da = new SqlDataAdapter(cmd);
dt = new DataTable("User");
da.Fill(dt);
dataGridUser.ItemsSource = dt.DefaultView;
dataGridUser.Columns[0].Visibility = System.Windows
.Visibility
.Hidden;
Когда я пытаюсь использовать запрос в SQL Server, он показывает правильный вывод, но когда я использую его в своем проекте и показываю его в таблице данных с помощью кнопки поиска. Он по-прежнему показывает имя пользователя, которое не должно отображаться из-за оператора u_name!= @U_name, который я использую в своем запросе. Что не так с этим?
2 ответа
Это из-за вашего последнего предложения ИЛИ. У вас есть это в конце вашего запроса:
or u_name like '%" + txtBoxSearch.Text.Replace("'", "''").Trim() + "%'
Используйте (и), чтобы заключить различные группы в предложение WHERE для получения правильного результата. Возможно, вы получаете правильный вывод в анализаторе запросов, потому что заменяете ссылку на элемент управления txtBoxSearch на буквальное значение.
Ваше имя пользователя не заключено в одинарные кавычки и поэтому отображается так:
u_name != Administrator
вместо
u_name != 'Administrator'
Чтобы решить эту проблему, я предлагаю вам изменить:
u_name != @u_name
в
u_name != '@u_name'