Не е необходим алгоритъм - просто не използвайте конкатенация на низове за изграждане на SQL изрази. Вместо това използвайте колекцията SqlCommand.Parameters. Това прави цялото необходимо екраниране на стойности (като замяна на '
с ''
) и гарантира, че командата ще бъде безопасна, защото някой друг (т.е. Microsoft) е извършил цялото тестване.
напр. извикване на съхранена процедура:
using (var connection = new SqlConnection("..."))
using (var command = new SqlCommand("MySprocName", connection))
{
command.CommandType = CommandType.StoredProcedure;
command.Parameters.AddWithValue("@Param1", param1Value);
return command.ExecuteReader();
}
Тази техника работи и за вградени SQL изрази, напр.
var sql = "SELECT * FROM MyTable WHERE MyColumn = @Param1";
using (var connection = new SqlConnection("..."))
using (var command = new SqlCommand(sql, connection))
{
command.Parameters.AddWithValue("@Param1", param1Value);
return command.ExecuteReader();
}