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