sql >> Database teknologi >  >> RDS >> Sqlserver

Sådan bruger du strengvariabel i sql-sætning

Du kan bare gøre dette

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

Men det er dårligt og åbner dig for SQL Injection

Du skal bare bruge en parameteriseret forespørgsel

Noget som dette burde få dig i gang

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);
}

Fra Jon Skeets svar, da hans var mere komplet end mit

Se dokumenterne for SqlCommand.Parameters for mere information.

Grundlæggende bør du ikke indlejre dine værdier i selve SQL'en af ​​forskellige årsager:

  • Det er uelegant at blande kode og data
  • Det åbner dig for SQL-injektionsangreb, medmindre du er meget forsigtig med at undslippe
  • Du skal bekymre dig om formatering og i18n-detaljer for ting som tal, datoer og klokkeslæt osv.
  • Når forespørgslen forbliver den samme, og kun værdierne ændres, har optimeringsværktøjet mindre arbejde at gøre - det kan slå den tidligere optimerede forespørgsel op direkte, da det vil være et perfekt match mellem SQL'en.


  1. ugyldig værdi for parameter, 'katalog'

  2. Kan ikke skrive data til transporten. Vs2017 ASP.net kernestillads (MSSQL WINDOW 10)

  3. Vores nye SQLPerformance.com nyhedsbrev

  4. Lås MySQL-valgrækken, indtil UPDATE er blevet kørt på den?