2012-12-19 11 views
7

kullanarak Npgsql için deyimi gibi bir postgresql DB var ve ben kullanıcı tarafından girilen olan adı eşleşen tüm yer adlarını almak için tablo "Yerler" sorgulamak istiyorum. Sütun adı "LocationName" dir. Ben C# ile ASP.net kullanıyorum.parametresini

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

bu özel durum alıyorum: Ben% kullanmadan sorgu çalıştıran denedim

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

, ancak çalışmıyor. Ben de + ve aşağıda verilen ama bu da işe yaramadı gibi & kullanarak denedim:

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

Son sorgu için: postgres operatörünü kullanıyor || dizeleri bitiştirmek değil artı için (+). – alfoks

cevap

12

Eğer

kullanmalısınız:

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

yukarıdaki çizgiyle, ben bu istisna olsun

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

Çok fazla tırnak işareti yerleştiriyordunuz: Postgre, çift tırnak/alan-tablo adı olarak dizgeyi yorumluyor. Parametre, escape-string işini

P: S: Postgre'de diziyi birleştirmek için || işlecini kullanmalısınız, bkz. here. Yani son sorgu'nız

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

işe yaradı !! Şimdi tüm eşleşen satırları döndürüyor. Yardım için teşekkürler ve böyle bir hızlı tepki için @trippino. size yardımcı olmak için – Namrata

+0

sevindim. Yığın taşması hoşgeldiniz :) –