我的项目中有这个查询
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 语句而不应显示的用户名。这有什么问题?
答案 0 :(得分:1)
您的用户名未包含在单引号中,因此显示为:
u_name != Administrator
而不是
u_name != 'Administrator'
要解决此问题,我建议您更改:
u_name != @u_name
到
u_name != '@u_name'
答案 1 :(得分:0)
因为你的最终OR条款。您在查询结束时有这个:
or u_name like '%" + txtBoxSearch.Text.Replace("'", "''").Trim() + "%'
使用(和)将WHERE子句的不同组括起来以获得正确的结果。您可能正在查询分析器中获得正确的输出,因为您正在用文字值替换对txtBoxSearch控件的引用。