L'utilizzo dei parametri aiuta a prevenire attacchi SQL Injection quando il database viene utilizzato insieme a un'interfaccia di programma come un programma desktop o un sito Web.
Nel tuo esempio, un utente può eseguire direttamente codice SQL sul tuo database creando istruzioni in txtSalary
.
Ad esempio, se dovessero scrivere 0 OR 1=1
, l'SQL eseguito sarebbe
SELECT empSalary from employee where salary = 0 or 1=1
per cui tutti i salari sarebbero stati restituiti.
Inoltre, un utente potrebbe eseguire comandi molto peggiori contro il tuo database, inclusa l'eliminazione se ha scritto 0; Drop Table employee
:
SELECT empSalary from employee where salary = 0; Drop Table employee
La tabella employee
verrà quindi eliminata.
Nel tuo caso, sembra che tu stia usando .NET. Usare i parametri è facile come:
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
Modifica 2016-4-25:
Come da commento di George Stocker, ho cambiato il codice di esempio in modo che non lo usasse AddWithValue
. Inoltre, si consiglia generalmente di racchiudere IDisposable
i messaggi di posta elettronica nelle using
dichiarazioni.