Sử dụng SQL được tham số hóa.
Ví dụ
Thay concatenations chuỗi của bạn với @...
placeholders và, sau đó, thêm các giá trị để SqlCommand của bạn. Bạn có thể chọn tên của trình giữ chỗ một cách tự do, chỉ cần đảm bảo rằng chúng bắt đầu bằng ký hiệu @
. Ví dụ bạn sẽ trông như thế này:
var sql = "INSERT INTO myTable (myField1, myField2) " +
"VALUES (@someValue, @someOtherValue);";
using (var cmd = new SqlCommand(sql, myDbConnection))
{
cmd.Parameters.AddWithValue("@someValue", someVariable);
cmd.Parameters.AddWithValue("@someOtherValue", someTextBox.Text);
cmd.ExecuteNonQuery();
}
Các mô hình tương tự được sử dụng cho các loại câu lệnh SQL:
var sql = "UPDATE myTable SET myField1 = @newValue WHERE myField2 = @someValue;";
// see above, same as INSERT
hoặc
var sql = "SELECT myField1, myField2 FROM myTable WHERE myField3 = @someValue;";
using (var cmd = new SqlCommand(sql, myDbConnection))
{
cmd.Parameters.AddWithValue("@someValue", someVariable);
using (var reader = cmd.ExecuteReader())
{
...
}
// Alternatively: object result = cmd.ExecuteScalar();
// if you are only interested in one value of one row.
}
Một lời cảnh báo: AddWithValue
là tốt điểm khởi đầu và hoạt động tốt trong hầu hết các trường hợp. Tuy nhiên, giá trị bạn vượt qua cần phải khớp chính xác với kiểu dữ liệu của trường cơ sở dữ liệu tương ứng. Nếu không, bạn có thể kết thúc trong trường hợp chuyển đổi ngăn truy vấn của bạn từ using an index. Lưu ý rằng một số kiểu dữ liệu SQL Server, chẳng hạn như char/varchar (không có trước "n") hoặc ngày không có kiểu dữ liệu .NET tương ứng. Trong những trường hợp đó, Add
with the correct data type should be used instead.
Tại sao tôi nên làm điều đó?
Khác thư viện truy cập cơ sở dữ liệu
Lưu ý: Câu hỏi này có nghĩa là như một câu hỏi kinh điển cho những người không thể có được SQLs chuỗi nối của họ để làm việc. [Nếu bạn muốn thảo luận, đây là câu hỏi meta tương ứng.] (Http://meta.stackoverflow.com/q/315913/87698) – Heinzi
Nếu bạn muốn có cái nhìn sâu sắc hơn về "SQL Injection" là gì và tại sao lại nguy hiểm khi thấy câu hỏi: "[Làm thế nào tôi có thể giải thích SQL injection mà không có thuật ngữ kỹ thuật?] (http://security.stackexchange.com/questions/25684/how-can-i-explain-sql-injection-without- thuật ngữ kỹ thuật) "từ trang web chị em bảo mật thông tin của chúng tôi. –
Bạn nên wiki này, btw. – Will