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関数) です。

さらに、@axrwkrclient_noがコメントで指摘したように、列がNUMBERデータ型であり、Oracleが演算子の右側を数値に変換することを決定した場合、さらにエラーが発生する可能性がありますLIKE(ルールはLIKE両側をVARCHAR2、 確信はないけど)。

client_noが の場合NUMBER、データベースと将来の読者の両方に明確にするために、次のように記述できます。

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