[英]jquery autocomplete
这是我的功能:
<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:无效编号”。 我该如何解决?
Oracle中的+
运算符仅适用于数字。 因此,当Oracle解析:SearchText+'%'
,它将两个术语都视为数字并执行隐式转换:
to_number(:SearchText) + to_number('%')
这将提高ORA-01722
。 Oracle中字符串连接的正确运算符是||
(或CONCAT
函数)。
此外,正如@axrwkr在评论中指出的那样,如果您的列client_no
是NUMBER
数据类型,并且Oracle决定将LIKE
运算符的右侧转换为NUMBER
,则可能会遇到进一步的错误(我认为规则是LIKE
将将双方都转换为VARCHAR2
,但我不确定)。
如果client_no
是NUMBER
,为了使数据库和以后的读者都清楚可以编写:
SELECT CLIENT_NO FROM SC_CLIENT WHERE to_char(CLIENT_NO) LIKE :SearchText || '%'
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.