Използването на параметри помага за предотвратяване на атаки с инжектиране на SQL когато базата данни се използва във връзка с програмен интерфейс, като например настолна програма или уеб сайт.
Във вашия пример, потребител може директно да стартира SQL код във вашата база данни, като създаде изявления в txtSalary
.
Например, ако трябва да напишат 0 OR 1=1
, изпълненият SQL ще бъде
SELECT empSalary from employee where salary = 0 or 1=1
при което всички empSalaries ще бъдат върнати.
Освен това, потребителят може да изпълнява много по-лоши команди срещу вашата база данни, включително да я изтрие, ако напише 0; Drop Table employee
:
SELECT empSalary from employee where salary = 0; Drop Table employee
Таблицата employee
след това ще бъде изтрит.
Във вашия случай изглежда, че използвате .NET. Използването на параметри е толкова лесно, колкото:
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
Редактиране 2016-4-25:
Според коментара на Джордж Стокър промених примерния код, за да не използвам AddWithValue
. Също така обикновено се препоръчва да обвиете IDisposable
е в using
изявления.