我正在开发一个用户搜索其他用户的应用程序。最匹配的结果应该更高。
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名称应该位于顶部,然后这些关键字频率较低的剩余记录应该会降低。我该怎么做? 提前致谢
答案 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
怎么样