2009-03-11 28 views

Trả lời

31

Bạn nên sử dụng một tham số như trong:

SQLiteCommand cmd = _connection.CreateCommand(); 
cmd.CommandType = CommandType.Text; 
cmd.CommandText = "SELECT * FROM MyTable WHERE MyColumn = @parameter"; 
cmd.Parameters.Add(new SQLiteParameter("@parameter", textfield)); 
SQLiteDataReader reader = cmd.ExecuteReader(); 

Sử dụng SQL parametrised sẽ thoát khỏi tất cả các giá trị đầu vào và giúp bảo vệ bạn khỏi các cuộc tấn công SQL injection.

+0

Tôi phải làm gì nếu tôi có nhiều params? Để tôi viết cmd.CommandText =" chèn ... @parameter ... @parameter "; cmd.Parameters.Add (...); cmd.Parameters.Add (...);? –

+0

Có, cũng phải có phương thức AddRange có sẵn, nơi bạn có thể chuyển một mảng params phù hợp với params trong statlet sql –

+0

Bạn có thể gọi Parameters.Add nhiều lần giống như bạn đã yêu cầu hoặc sử dụng Parameters.AddRange chấp nhận một mảng các tham số – bstoney

0

Bạn cũng có thể thay thế tất cả delimiters quote duy nhất với nghi ngờ dấu nháy đơn (không phải ").

sql = sql.Replace("'","''"); 
+2

Phương pháp này không tái khen ngợi, nó có thể dẫn đến lỗi lạ. – Palani

+0

Không nhất thiết. Nếu bạn xây dựng SQL của bạn và thực hiện Thay thế bước cuối cùng, tất cả sẽ tốt. Làm việc trong nhiều năm mà không có vấn đề gì. Tôi sử dụng các khối ứng dụng ngay bây giờ, vì vậy nó không quan trọng. :) – klkitchens

+0

phương pháp này là tốt nếu bạn cần phải tạo một SQL an toàn để đổ vào một tập tin văn bản hoặc như vậy. –

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