Использование параметров помогает предотвратить атаки 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. Использовать параметры так же просто, как:
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
s в using
операторы.