O uso de parâmetros ajuda a evitar ataques de injeção de SQL quando o banco de dados é usado em conjunto com uma interface de programa, como um programa de desktop ou site.
Em seu exemplo, um usuário pode executar diretamente o código SQL em seu banco de dados elaborando instruções em txtSalary
.
Por exemplo, se eles fossem escrever 0 OR 1=1
, o SQL executado seria
SELECT empSalary from employee where salary = 0 or 1=1
em que todos os empSalaries seriam devolvidos.
Além disso, um usuário poderia executar comandos muito piores em seu banco de dados, incluindo excluí-lo se escrevesse 0; Drop Table employee
:
SELECT empSalary from employee where salary = 0; Drop Table employee
A tabela employee
seria então excluída.
No seu caso, parece que você está usando .NET. Usar parâmetros é tão fácil quanto:
C #
string sql = "SELECT empSalary from employee where salary = @salary";
using (SqlConnection connection = new SqlConnection(/* connection info */))
using (SqlCommand command = new SqlCommand(sql, connection))
{
var salaryParam = new SqlParameter("salary", SqlDbType.Money);
salaryParam.Value = txtMoney.Text;
command.Parameters.Add(salaryParam);
var results = command.ExecuteReader();
}
VB.NET
Dim sql As String = "SELECT empSalary from employee where salary = @salary"
Using connection As New SqlConnection("connectionString")
Using command As New SqlCommand(sql, connection)
Dim salaryParam = New SqlParameter("salary", SqlDbType.Money)
salaryParam.Value = txtMoney.Text
command.Parameters.Add(salaryParam)
Dim results = command.ExecuteReader()
End Using
End Using
Editar 2016-4-25:
De acordo com o comentário de George Stocker, alterei o código de amostra para não usar AddWithValue
. Além disso, geralmente é recomendado que você envolva IDisposable
s em using
instruções.