2012-08-03 3 views
0

현재 jQuery 자동 완성 플러그 인에 대한 쿼리 문자열이 있지만 대신 저장 프로 시저를 사용해야합니다. 누구든지 변환을 도울 수 있습니까? 내가 할 때 작동하지 않는 것 같습니다.저장 프로 시저로 변환

원래 ASHX

저장 프로 시저에 대한
public class Search_CS : IHttpHandler { 

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.CommandText = "select NUID from T_USER where " + 
      //"NUID like @SearchText + '%'"; 
      cmd.CommandText = "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 + '%'"; 
      cmd.Parameters.AddWithValue("@SearchText", 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()); 
     } 
    } 
} 

새로운 ASHX :

public class Search_CS : IHttpHandler { 

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.CommandText = "select NUID from T_USER where " + 
      //"NUID like @SearchText + '%'"; 
      cmd.CommandText = "SP_AUTOCOMPLETE"; 
      cmd.Parameters.AddWithValue("@SearchText", prefixText); 

      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()); 
     } 
    } 
} 

저장 프로 시저 :

@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 + '%' 

감사합니다!

답변

1

SqlCommand 'CommandType'을 'CommandType.StoredProcedure'로 설정해야합니다.

cmd.CommandType = CommandType.StoredProcedure; 

'sp_'이외의 접두어를 사용하는 것이 좋습니다. 이것이 Microsoft가 시스템 절차에 사용한 것과 실수로 덮어 쓸 수있는 것일 수 있습니다.

public static SqlParameter GetParameter(string parameterName, object value, SqlDbType type, int size) 
{ 
    if (value == null) 
    { 
     value = DBNull.Value; 
    } 

    if (size <= 0 && type == SqlDbType.VarChar) 
    { 
     switch (type) 
     { 
      case SqlDbType.VarChar: 
       size = 8000; 
       break; 
      case SqlDbType.NVarChar: 
       size = 4000; 
       break; 
     } 
    } 

    SqlParameter parameter = new SqlParameter(parameterName, type, size); 
    parameter.Value = value; 
    parameter.IsNullable = true; 

    return parameter; 
} 

그리고 난 그냥 이렇게 : :)

이것은 내가 매개 변수를 생성하는 방법이다.

cmd.Parameters.Add(GetParameter("@SearchText", searchText, SqlDbType.VarChar)); 
+0

SP_에 대해 잘 알고 있습니다. 내가 어떻게 배웠는지. 저장 프로 시저를 호출하기 전에 제공 한 코드를 추가하기 만하면됩니까? 또한, doesnt는 cmd.executeReader() 라인을 좋아하는 것 같습니다. – user1512593

+1

그래, 'CommandText'를 지정하고 cmd.ExecuteReader에서 오류를 보내면 도움을 줄 수 있습니다. '@SearchText'매개 변수를 두 번 추가하는 것 같습니다. – jtimperley

+0

정확합니다! "프로 시저 또는 함수 SP_AUTOCOMPLETE에 지정된 인수가 너무 많습니다." – user1512593

관련 문제