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 employeeverrà 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 IDisposablei messaggi di posta elettronica nelle usingdichiarazioni.