正确查询错误输出

时间:2014-05-12 04:28:34

标签: c# sql sql-server

我的项目中有这个查询

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 个答案:

答案 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控件的引用。