sql >> Databasteknik >  >> RDS >> Sqlserver

Hur man använder strängvariabel i sql-satsen

Du kan bara göra detta

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

Men det är dåligt och öppnar dig för SQL Injection

Du bör bara använda en parameteriserad fråga

Något sådant här borde få dig igång

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

Från Jon Skeets svar eftersom hans var mer komplett än mitt

Se dokumenten för SqlCommand.Parameters för mer information.

I grund och botten bör du inte bädda in dina värden i själva SQL-en av olika anledningar:

  • Det är oelegant att blanda kod och data
  • Det öppnar upp för SQL-injektionsattacker om du inte är mycket försiktig med att fly
  • Du måste oroa dig för formatering och i18n-detaljer för saker som siffror, datum och tider etc.
  • När frågan förblir densamma och endast värdena ändras, har optimeraren mindre arbete att göra - den kan slå upp den tidigare optimerade frågan direkt eftersom det kommer att vara en perfekt matchning av SQL:n.


  1. MySQL-replikering:om jag inte anger några databaser, kommer log_bin att logga ALLT?

  2. SQL Server Temporary Object Caching

  3. välj att uppdatera med distinkt mysql

  4. MySQL:Använder DATETIME som primärnyckel