Die Verwendung von Parametern hilft, SQL-Injection-Angriffe zu verhindern wenn die Datenbank in Verbindung mit einer Programmschnittstelle wie einem Desktop-Programm oder einer Website verwendet wird.
In Ihrem Beispiel kann ein Benutzer SQL-Code direkt in Ihrer Datenbank ausführen, indem er Anweisungen in txtSalary
erstellt .
Zum Beispiel, wenn sie 0 OR 1=1
schreiben würden , wäre das ausgeführte SQL
SELECT empSalary from employee where salary = 0 or 1=1
wodurch alle empSalaries zurückerstattet würden.
Darüber hinaus könnte ein Benutzer weitaus schlimmere Befehle für Ihre Datenbank ausführen, einschließlich des Löschens. Wenn er 0; Drop Table employee
:
SELECT empSalary from employee where salary = 0; Drop Table employee
Die Tabelle employee
würde dann gelöscht werden.
In Ihrem Fall sieht es so aus, als würden Sie .NET verwenden. Die Verwendung von Parametern ist so einfach wie:
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
Bearbeiten 2016-4-25:
Gemäß dem Kommentar von George Stocker habe ich den Beispielcode so geändert, dass AddWithValue
nicht verwendet wird . Außerdem wird allgemein empfohlen, IDisposable
zu umschließen s in using
Aussagen.