在asp.net中移动最匹配的结果

时间:2014-06-07 18:19:13

标签: asp.net

我正在开发一个用户搜索其他用户的应用程序。最匹配的结果应该更高。

string name = txtSearch.Text;
string space = " ";

if(name.Contains(space))
{
    string[] FullName = txtSearch.Text.Split(' ');
    using (SqlConnection conn = new SqlConnection(strcon))
    {

        using (SqlCommand cmd = new SqlCommand())
        {
            cmd.CommandText = "select UserProfile.City,  UserProfile.FirstName, UserProfile.LastName,UserProfile.Age where UserProfile.FirstName like '%" + FullName[0] + "%' or UserProfile.FirstName like '%" + FullName[1] + "%'  or UserProfile.LastName like '%" + FullName[1] + "%'";
            cmd.Connection = conn;
            conn.Open();
            dlContacts.DataSource = cmd.ExecuteReader();
            dlContacts.DataBind();
            conn.Close();
        }
    }
}

这是我处理搜索工作的地方。 txrSearch是文本框的id,其中用户键入要搜索的用户名,最后数据绑定到datalist。现在我想移动比赛记录。就像用户键入“Tom John”一样,Tom John名称应该位于顶部,然后这些关键字频率较低的剩余记录应该会降低。我该怎么做? 提前致谢

1 个答案:

答案 0 :(得分:0)

为避免SQL注入攻击,请始终使用参数化查询。

cmd.Parameters.AddWithValue("@myFirstParam", FullName[0])
cmd.Parameters.AddWithValue("@mySecondParam", FullName[1])

你的CommentText (maby它不理想,但它适合你。)

SELECT 
 UserProfile.City,UserProfile.FirstName,UserProfile.LastName,UserProfile.Age 
FROM 
 UserProfile 
WHERE 
 UserProfile.FirstName LIKE '%' + @myFirstParam + '%' OR 
 UserProfile.FirstName LIKE '%' + @mySecondParam + '%' OR 
 UserProfile.LastName LIKE '%" + @mySecondParam + "%' 
ORDER BY 
 CASE WHEN UserProfile.FirstName LIKE '%' + @myFirstParam + '%' THEN 1 ELSE 0 END + 
 CASE WHEN UserProfile.FirstName LIKE '%' + @mySecondParam + '%' THEN 1 ELSE 0 END + 
 CASE WHEN UserProfile.LastName LIKE '%' + @mySecondParam + '%' THEN 1 ELSE 0 END 
DESC

怎么样

  • 我有三个名字
  • 我有三个名字
  • 我使用大/小写
  • 我输入空格而不输入第二个字
  • ....?