2012-12-19 29 views
7

Tôi có một DB postgresql và tôi muốn truy vấn bảng "Vị trí" để truy xuất tên của tất cả các vị trí khớp với tên được nhập bởi người dùng. Tên cột là "LocationName". Tôi đang sử dụng ASP.net với C#.như tuyên bố cho npgsql sử dụng tham số

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

tôi nhận được ngoại lệ này:

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

Tôi đã thử chạy các truy vấn mà không sử dụng%, nhưng nó không hoạt động. Tôi cũng đã cố gắng sử dụng + và & như đưa ra dưới đây nhưng điều đó không làm việc, hoặc:

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

với dòng trên, tôi nhận được ngoại lệ này:

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

Đối với bạn truy vấn cuối cùng: postgres đang sử dụng toán tử || để ghép các chuỗi, không phải là dấu cộng (+). – alfoks

Trả lời

12

bạn nên sử dụng

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

bạn đã chèn quá nhiều dấu ngoặc kép: Postgre diễn giải chuỗi giữa dấu nháy kép dưới dạng trường/tên bảng. Để tham số thực hiện công việc thoát chuỗi

P.S .: Để nối chuỗi trong Postgre, bạn nên sử dụng toán tử ||, xem here. Vì vậy, truy vấn cuối cùng của bạn phải là

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

Nó hoạt động !! Bây giờ nó trả về tất cả các hàng phù hợp. Cảm ơn @trippino vì đã giúp đỡ và phản hồi nhanh như vậy. – Namrata

+0

Rất vui được giúp bạn. Chào mừng trong ngăn xếp tràn :) –

Các vấn đề liên quan