El uso de parámetros ayuda a prevenir ataques de inyección de SQL cuando la base de datos se utiliza junto con una interfaz de programa, como un programa de escritorio o un sitio web.
En su ejemplo, un usuario puede ejecutar directamente código SQL en su base de datos creando declaraciones en formato txtSalary
.
Por ejemplo, si tuvieran que escribir 0 OR 1=1
, el SQL ejecutado sería
SELECT empSalary from employee where salary = 0 or 1=1
por lo que todos los empSalaries serían devueltos.
Además, un usuario podría ejecutar comandos mucho peores en su base de datos, incluida su eliminación si escribiera 0; Drop Table employee
:
SELECT empSalary from employee where salary = 0; Drop Table employee
employee
Luego, la tabla se eliminaría.
En su caso, parece que está utilizando .NET. Usar parámetros es tan fácil como:
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:
Según el comentario de George Stocker, cambié el código de muestra para que no lo use AddWithValue
. Además, generalmente se recomienda que incluya IDisposable
s en using
declaraciones.