Att använda parametrar hjälper till att förhindra SQL Injection-attacker när databasen används tillsammans med ett programgränssnitt som ett skrivbordsprogram eller en webbplats.
I ditt exempel kan en användare köra SQL-kod direkt på din databas genom att skapa satser i txtSalary
.
Till exempel, om de skulle skriva 0 OR 1=1
, skulle den exekverade SQL vara
SELECT empSalary from employee where salary = 0 or 1=1
varigenom alla löner skulle returneras.
Vidare kan en användare utföra mycket sämre kommandon mot din databas, inklusive att radera den om de skrev 0; Drop Table employee
:
SELECT empSalary from employee where salary = 0; Drop Table employee
Tabellen employee
skulle då raderas.
I ditt fall ser det ut som att du använder .NET. Att använda parametrar är lika enkelt 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
Edit 2016-4-25:
Enligt George Stockers kommentar ändrade jag exempelkoden till att inte använda AddWithValue
. Det rekommenderas också generellt att du lindar IDisposable
s i using
uttalanden.