10

postgresql DBがあり、テーブル「Locations」をクエリして、ユーザーが入力した名前と一致するすべての場所の名前を取得したいと思います。列名は「LocationName」です。私はC#でASP.netを使用しています。

NpgsqlConnection con = new NpgsqlConnection(ConfigurationManager.ConnectionStrings["ConnString"].ToString());

NpgsqlCommand cmd = new NpgsqlCommand("Select * from \"Locations\" where \"LocationName\" LIKE \"%@loc_name%\"", con);

cmd.Parameters.AddWithValue("@loc_name", Location_Name);

NpgsqlDataReader reader = cmd.ExecuteReader();

この例外が発生します:

Npgsql.NpgsqlException: ERROR: 42703: column "%((E'My place'))%" does not exist

%を使用せずにクエリを実行しようとしましたが、機能しません。以下に示す+などを使用してみましたが、どちらも機能しませんでした。

string query = "Select \"LocationName\" from \"Locations\" where \"LocationName\" LIKE '%'+ :loc_name +'%'";

上記の行で、私はこの例外を受け取ります:

Npgsql.NpgsqlException: ERROR: 42725: operator is not unique: unknown + unknown
4

1 に答える 1

19

あなたが使用する必要があります

NpgsqlCommand cmd = new NpgsqlCommand("Select * from \"Locations\" where \"LocationName\" LIKE @loc_name", con);
cmd.Parameters.AddWithValue("@loc_name", "%" + Location_Name + "%");

引用符を挿入しすぎていました:Postgreは、二重引用符の間の文字列をフィールド/テーブル名として解釈します。パラメータにエスケープ文字列ジョブを実行させます

PS:Postgreで文字列を連結するには、||演算子を使用する必要があります。ここを参照してください。したがって、最後のクエリは

string query = "Select \"LocationName\" from \"Locations\" where \"LocationName\" LIKE '%' || :loc_name || '%'";
于 2012-12-19T10:35:21.477 に答える