2013-02-13 5 views
0

Это моя функция:JQuery автозаполнения

<script type="text/javascript"> 
    $(document).ready(function() { 
     SearchText(); 
    }); 
    function SearchText() { 
     $(".autosuggest").autocomplete({ 
      source: function (request, response) { 
       $.ajax({ 
        type: "POST", 
        contentType: "application/json; charset=utf-8", 
        url: "Default.aspx/GetAutoCompleteData", 
        data: "{'name':'" + document.getElementById('txtSearch').value + "'}", 
        dataType: "json", 
        success: function (data) { 
         response(data.d); 
        }, 
        error: function (result) { 
         alert("Error"); 
        } 
       }); 
      } 
     }); 
    } 
</script> 

Это мой код:

[WebMethod] 

public static List<string> GetAutoCompleteData(string name) 
{ 
    OracleConnection con = new OracleConnection("Data Source=Client;User ID=cli; Password=cli123"); 
    List<string> result = new List<string>(); 
    con.Open(); 
    OracleCommand cmd = new OracleCommand("SELECT CLIENT_NO FROM SC_CLIENT WHERE CLIENT_NO LIKE :SearchText+'%'", con); 


    cmd.Parameters.AddWithValue(":SearchText", name); 
    OracleDataReader dr = cmd.ExecuteReader(); 
    while (dr.Read()) 
    { 
     result.Add(dr["CLIENT_NO"].ToString()); 

    } 
    return result; 
} 

Но это выдаст сообщение об ошибке, как этот "ORA-01722: неправильный номер". Как я могу это решить?

ответ

0

Оператор + в Oracle работает только с числами. Поэтому, когда Oracle разбирает :SearchText+'%' он рассматривает оба термина как номера и выполняет неявное преобразование:

to_number(:SearchText) + to_number('%') 

Это поднимет ORA-01722. Правильный оператор для конкатенации строк в Oracle - || (или функция CONCAT).

Кроме того, как @axrwkr указал на комментарии, вы можете столкнуться с дополнительной ошибкой, если ваш столбец client_no является NUMBER типа данных и Oracle решает преобразовать правый оператор LIKE к ряду (я думаю, что это правило что LIKE преобразует обе стороны в VARCHAR2, но я не уверен).

Если client_no является NUMBER, чтобы понять, как к базе данных и любому будущему читателю вы могли бы написать:

SELECT CLIENT_NO FROM SC_CLIENT WHERE to_char(CLIENT_NO) LIKE :SearchText || '%' 
Смежные вопросы