Genom att skicka parametrar till SQL slipper du bygga en dynamisk SQL-sträng.
Att bygga dynamiska SQL-satser är en ENORM säkerhetsrisk eftersom människor kan injicera sin egen SQL-kod i din applikation och eventuellt utföra oönskade kommandon mot dina data.
Det finns några bra exempel på möjliga SQL Injection-attacker på:
SQL Injection Attacks by Example
Det finns två sätt att skicka parametrar till SQL-satser. En är att använda lagrade procedurer som du nämnde. Den andra är att använda parametriserade frågor (vilket faktiskt är vad jag föredrar).
En parameteriserad fråga är faktiskt ganska enkel i .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);
}
I det exemplet var parametern @Username
och vi använde Parameters
samling av SqlCommand
objekt att skicka in värdet.