Brug af parametre hjælper med at forhindre SQL Injection-angreb når databasen bruges sammen med en programgrænseflade, såsom et skrivebordsprogram eller et websted.
I dit eksempel kan en bruger køre SQL-kode direkte på din database ved at lave sætninger i txtSalary
.
For eksempel, hvis de skulle skrive 0 OR 1=1
, ville den udførte SQL være
SELECT empSalary from employee where salary = 0 or 1=1
hvorved alle empLaries ville blive returneret.
Yderligere kunne en bruger udføre langt værre kommandoer mod din database, herunder slette den, hvis de skrev 0; Drop Table employee
:
SELECT empSalary from employee where salary = 0; Drop Table employee
Tabellen employee
ville så blive slettet.
I dit tilfælde ser det ud til, at du bruger .NET. Brug af parametre er lige så let som:
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
Redigeret 2016-4-25:
I henhold til George Stockers kommentar ændrede jeg prøvekoden til ikke at bruge AddWithValue
. Det anbefales også generelt, at du indpakker IDisposable
s i using
udsagn.