2012-08-07 59 views
0

我有jQuery自动完成(而不是jQueryUI)来搜索我的数据库中的fname和lname。现在很好,它可以搜索名字,然后过滤出来并搜索姓氏。但是有没有办法让其他方法得到它呢?在列和顺序内搜索jQuery自动完成

即。搜索水晶带来了水晶桑托斯,水晶插柳,水晶海耶斯等
但搜索桑托斯带来了桑托斯Rameros,桑托斯Riveria等(它假定桑托斯是FNAME)

反正有没有改变呢?为了过滤fname和lname。

我也可以得到它在一个列内搜索?我有一个为部门过滤,但有些部门有多个值。在移至第二个之前,它只会搜索第一个。

即。搜索医疗办公室控制器,你将不得不搜索医疗第一。你不能搜索控制器或​​Office,并让它显示出结果。

如果需要澄清,请告诉我。

处理器ASHX

public void ProcessRequest (HttpContext context) { 
    string prefixText = context.Request.QueryString["q"]; 
    using (SqlConnection conn = new SqlConnection()) 
    { 
     conn.ConnectionString = ConfigurationManager.ConnectionStrings["Rollup2ConnectionString"].ConnectionString; 
     using (SqlCommand cmd = new SqlCommand()) 
     { 
      cmd.CommandType = CommandType.StoredProcedure; 
      cmd.CommandText = "SP_AUTOCOMPLETE";       
      cmd.Parameters.Add(new SqlParameter("@SearchText", SqlDbType.VarChar));  
      cmd.Parameters["@SearchText"].Value = prefixText;    
      cmd.Connection = conn;   
      StringBuilder sb = new StringBuilder();  
      conn.Open();   
      using (SqlDataReader sdr = cmd.ExecuteReader())   
      {    
       while (sdr.Read()) 
       {      
        sb.Append(sdr["NUID"].ToString() + " ").Append(sdr["FNAME"].ToString() + " ").Append(sdr["LNAME"].ToString() + " ")      
         .Append(Environment.NewLine);   
       }   
      }    
     conn.Close();    
     context.Response.Write(sb.ToString()); 
     } 

    } 
} 

public bool IsReusable { 
    get { 
     return false; 
    } 
} 

这是目前一个FNAME LNAME,在一个部门究竟是除了磁场变化一样。

存储过程NAME

@SearchText VARCHAR(255) 
AS 
BEGIN 

SET NOCOUNT ON; 
SELECT RTRIM(NUID) NUID, RTRIM(FNAME) FNAME, RTRIM(LNAME) LNAME 
FROM T_USER 
WHERE NUID like @SearchText + '%' OR FNAME like @SearchText + '%' OR LNAME like @SearchText + '%' 

END 

存储过程系

@SearchText VARCHAR(255) 
AS 
BEGIN 

SET NOCOUNT ON; 
SELECT RTRIM(DEPT_DESC) DEPT_DESC, RTRIM(DEPT_ID) DEPT_ID 
FROM T_ROLLUP_DEPT 
WHERE DEPT_ID like @SearchText + '%' OR DEPT_DESC like @SearchText + '%' 

END

+0

该问题不在您的代码中,而是在您存储的proc中 – Brian 2012-08-07 18:13:26

+0

已更新为Stored Proc。感谢您的澄清 – user1512593 2012-08-07 18:20:57

+0

如果您从您的存储过程中获取选择的陈述,并运行这个值与您期望通过的值一致,它是否会给出预期的结果? – Brian 2012-08-07 18:44:59

回答

2

这更是一个数据库问题。你需要回到你的存储过程,并添加一个或子句WHERE说

WHERE (FNAME LIKE '%SearchText%') OR (LNAME LIKE '%SearchText%') 

调整SQL语句,当你输入后“桑托斯”,你会现在得到水晶桑托斯,桑托斯Rameros ,Santos Riveria等

问题的第二部分还需要对SQL存储过程进行调整。只需在你的WHERE子句中添加LIKE'%%'即可。因此,如果您的用户搜索“控制器”,医疗管理员将出现。

+0

已更新Stored Proc。对于那个很抱歉。 – user1512593 2012-08-07 18:20:38

+0

感谢您使用LIKE'%%'命令提供的帮助。但是,'%SearchText%'似乎没有返回值。 – user1512593 2012-08-07 18:42:47

+0

我认为你需要做'%'+ @SearchText +'%' – Arm0geddon 2012-08-07 21:27:49