Przekazywanie parametrów do SQL pozwala uniknąć konieczności budowania dynamicznego ciągu SQL.
Tworzenie dynamicznych instrukcji SQL jest OGROMNYM zagrożeniem dla bezpieczeństwa, ponieważ ludzie mogą wstrzykiwać własny kod SQL do Twojej aplikacji, prawdopodobnie wykonując niepożądane polecenia na Twoich danych.
Istnieje kilka dobrych przykładów możliwych ataków SQL Injection pod adresem:
Przykładowe ataki typu SQL Injection
Istnieją dwa sposoby przekazywania parametrów do instrukcji SQL. Jednym z nich jest użycie procedur składowanych, o których wspomniałeś. Drugim jest użycie sparametryzowanych zapytań (co w rzeczywistości jest tym, co wolę).
Zapytanie parametryczne jest w rzeczywistości dość proste w .NET:
using(SqlConnection conn = new SqlConnection(connString))
{
SqlCommand command =
new SqlCommand("SELECT * FROM Users WHERE Username = @Username", conn);
command.Parameters.Add(new SqlParameter("@Username", "Justin Niessner"));
SqlDataAdapter adapter = new SqlDataAdapter(command);
DataTable dt = new DataTable();
adapter.Fill(dt);
}
W tym przykładzie parametr to @Username
i użyliśmy Parameters
kolekcja SqlCommand
obiekt do przekazania w wartości.