2012-12-19 5 views
7

Ich habe eine postgresql DB und ich möchte die Tabelle "Locations" abfragen, um die Namen aller Standorte abzurufen, die den Namen, der vom Benutzer eingegeben wurde, entsprechen. Der Spaltenname ist "LocationName". Ich benutze ASP.net mit C#.Like-Anweisung für npgsql mit Parameter

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(); 

Ich erhalte diese Ausnahme:

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

Ich habe versucht, die Abfrage ausgeführt wird, ohne% zu verwenden, aber es funktioniert nicht. Ich habe auch versucht + und & wie unten angegebenen, aber das hat nicht funktioniert entweder:

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

mit der obigen Zeile, erhalte ich diese Ausnahme:

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

Für Ihre letzte Abfrage: postgres verwendet den Operator || zum Verketten von Strings, nicht das Pluszeichen (+). – alfoks

Antwort

12

sollten Sie

Sie haben zu viele Anführungszeichen eingefügt: Postgre interpretiert die Zeichenfolge zwischen Anführungszeichen als Feld/Tabellenname. Lassen Sie den Parameter den Escape-String-Job

P.S .: Um Zeichenfolge in Postgre verketten Sie sollten die ||-Operator verwenden, siehe here. Ihre letzte Abfrage sollte also

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

Es hat funktioniert !! Jetzt gibt es alle übereinstimmenden Zeilen zurück. Danke @trippino für die Hilfe und für eine so schnelle Antwort. – Namrata

+0

Ich bin froh, Ihnen zu helfen. Willkommen im Stapelüberlauf :) –