2012-12-19 19 views
7

私はpostgresql DBを持っており、テーブル "Locations"を照会して、ユーザーが入力した名前と一致するすべてのロケーションの名前を取得したいと考えています。列名は "LocationName"です。私はC#とASP.netを使用しています。パラメータを使用するnpgsqlのようなステートメント

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 
+0

である必要があります。最後のクエリの場合:postgresは演算子を使用しています。プラス(+)ではなく、文字列を連結します。 – alfoks

答えて

12

あなたが

を使用する必要があります
NpgsqlCommand cmd = new NpgsqlCommand("Select * from \"Locations\" where \"LocationName\" LIKE @loc_name", con); 
cmd.Parameters.AddWithValue("@loc_name", "%" + Location_Name + "%"); 

引用符をあまりにも多く挿入していました。Postgreは、二重引用符で囲んだ文字列をフィールド/テーブル名として解釈します。パラメータにエスケープ文字列ジョブを実行させます

P .:レスポンスをPostgreで連結するには、||演算子を使用する必要があります(を参照)。したがって、最後のクエリは

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

それは働いた!今すぐ一致するすべての行を返します。そのような迅速な対応のために、おかげさまで@trippino。 – Namrata

+0

よろしくお願いします。スタックオーバーフローへようこそ:) –

関連する問題