0

这是我的功能:

<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:无效号码”。我该如何解决这个问题?

4

1 回答 1

0

+Oracle 中的运算符仅适用于数字。因此,当 Oracle 解析:SearchText+'%'时,它将这两个术语都视为数字并执行隐式转换:

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

这将提高ORA-01722. Oracle 中字符串连接的正确运算符是||(或CONCAT函数)。

此外,正如@axrwkr在评论中指出的那样,如果您的列client_noNUMBER数据类型并且Oracle 决定将运算符的右侧转换为LIKE数字(我认为规则是LIKE将两边转换为VARCHAR2,但我不确定)。

If client_nois a NUMBER, 为了让数据库和任何未来的读者都清楚,你可以写:

SELECT CLIENT_NO FROM SC_CLIENT WHERE to_char(CLIENT_NO) LIKE :SearchText || '%'
于 2013-02-13T15:15:44.417 回答