Použití parametrů pomáhá předcházet útokům SQL Injection když se databáze používá ve spojení s rozhraním programu, jako je počítačový program nebo webová stránka.
Ve vašem příkladu může uživatel přímo spouštět kód SQL ve vaší databázi vytvořením příkazů v txtSalary
.
Pokud by například napsali 0 OR 1=1
, provedené SQL by bylo
SELECT empSalary from employee where salary = 0 or 1=1
čímž by byly vráceny všechny pracovní platy.
Dále by uživatel mohl provádět mnohem horší příkazy proti vaší databázi, včetně její smazání, pokud by napsal 0; Drop Table employee
:
SELECT empSalary from employee where salary = 0; Drop Table employee
Tabulka employee
bude poté smazáno.
Ve vašem případě to vypadá, že používáte .NET. Použití parametrů je stejně snadné jako:
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();
}
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
Upravit 25. 4. 2016:
Podle komentáře George Stockera jsem změnil ukázkový kód tak, aby nepoužíval AddWithValue
. Obecně se také doporučuje zabalit IDisposable
s v using
prohlášení.