Исправить неправильный вывод

У меня есть этот запрос в моем проекте

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'
Другие вопросы по тегам