2012-12-19 15 views
7

Ho un DB postgresql e voglio interrogare la tabella "Posizioni" per recuperare i nomi di tutte le posizioni che corrispondono al nome inserito dall'utente. Il nome della colonna è "LocationName". Sto usando ASP.net con C#.dichiarazione simile per npgsql utilizzando il parametro

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

ottengo questa eccezione:

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

Ho provato a fare funzionare la query senza utilizzare%, ma non funziona. Ho anche provato con + e & come riportati qui di seguito, ma che non ha funzionato neanche:

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

con la linea di cui sopra, ottengo questa eccezione:

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

Per l'ultima query: postgres sta utilizzando l'operatore || per concatenare le stringhe, non il più (+). – alfoks

risposta

12

dovreste usare

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

stavi inserendo troppe virgolette: Postgre interpreta la stringa tra virgolette come campo/nome-tabella. Lascia che il parametro esegua il lavoro di stringa di escape

P.S .: Per concatenare una stringa in Postgre devi usare l'operatore ||, vedi here. Quindi l'ultima query dovrebbe essere

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

Ha funzionato !! Ora sta restituendo tutte le righe corrispondenti. Grazie a @trippino per l'aiuto e per una risposta così rapida. – Namrata

+0

Felice di aiutarti. Benvenuto nello stack overflow :) –

Problemi correlati