sql >> Database >  >> RDS >> Sqlserver

Hoe tekenreeksvariabele te gebruiken in sql-instructie

Je kunt dit gewoon doen

query = "Select * From Table Where Title = " + someone;

Maar dat is slecht en opent je voor SQL-injectie

U moet gewoon een geparametriseerde query gebruiken

Zoiets zou je op weg moeten helpen

using (var cn = new SqlClient.SqlConnection(yourConnectionString))
using (var cmd = new SqlClient.SqlCommand())
{
   cn.Open();
   cmd.Connection = cn;
   cmd.CommandType = CommandType.Text;
   cmd.CommandText = "Select * From Table Where Title = @Title";
   cmd.Parameters.Add("@Title", someone);
}

Van Jon Skeet's antwoord, omdat zijn antwoord completer was dan het mijne

Zie de documenten voor SqlCommand.Parameters voor meer informatie.

In principe zou u om verschillende redenen uw waarden niet in de SQL zelf moeten insluiten:

  • Het is onelegant om code en data te combineren
  • Het stelt je bloot aan SQL-injectieaanvallen, tenzij je heel voorzichtig bent om te ontsnappen
  • Je moet je zorgen maken over opmaak en i18n-details voor zaken als getallen, datums en tijden, enz.
  • Als de query hetzelfde blijft en alleen de waarden veranderen, heeft de optimizer minder werk te doen - hij kan de vorige geoptimaliseerde query direct opzoeken, omdat deze perfect overeenkomt met de SQL.


  1. De mysqli_connect werkt niet

  2. Een overzicht van de nieuwe opgeslagen procedures in PostgreSQL 11

  3. Wat is de beste manier om het aantal query's te verminderen wanneer de Class DAO methoden heeft die hetzelfde resultaat gebruiken?

  4. WordPress Query:Volgorde van het aantal overeenkomende rijen?