A passagem de parâmetros para o SQL evita que você tenha que criar uma string SQL dinâmica.
Construir instruções SQL dinâmicas é um ENORME risco de segurança porque as pessoas podem injetar seu próprio código SQL em seu aplicativo, possivelmente executando comandos indesejáveis em seus dados.
Existem alguns bons exemplos de possíveis ataques de injeção de SQL em:
Ataques de injeção de SQL por exemplo
Existem duas maneiras de passar parâmetros para instruções SQL. Uma é usar Stored Procedures como você mencionou. A outra é usar consultas parametrizadas (que na verdade é o que eu prefiro).
Uma consulta parametrizada é realmente muito fácil em .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);
}
Nesse exemplo, o parâmetro era
@Username
e usamos os Parameters
coleção do SqlCommand
objeto para passar o valor.