L'utilisation de paramètres permet d'éviter les attaques par injection SQL lorsque la base de données est utilisée conjointement avec une interface de programme telle qu'un programme de bureau ou un site Web.
Dans votre exemple, un utilisateur peut exécuter directement du code SQL sur votre base de données en créant des instructions dans txtSalary
.
Par exemple, s'ils devaient écrire 0 OR 1=1
, le SQL exécuté serait
SELECT empSalary from employee where salary = 0 or 1=1
par lequel tous les salaires seraient retournés.
De plus, un utilisateur pourrait exécuter des commandes bien pires contre votre base de données, y compris la supprimer s'il écrivait 0; Drop Table employee
:
SELECT empSalary from employee where salary = 0; Drop Table employee
Le tableau employee
serait alors supprimé.
Dans votre cas, il semble que vous utilisez .NET. L'utilisation des paramètres est aussi simple que:
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
Modifier le 25/04/2016:
Selon le commentaire de George Stocker, j'ai changé l'exemple de code pour ne pas l'utiliser AddWithValue
. En outre, il est généralement recommandé d'encapsuler les IDisposable
s dans des using
instructions.