sql >> Databáze >  >> RDS >> Sqlserver

Jak používat řetězcovou proměnnou v příkazu SQL

Můžete to udělat

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

Ale to je špatné a otevírá vám to SQL Injection

Měli byste použít pouze parametrizovaný dotaz

Něco takového by vás mělo nastartovat

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

Z odpovědi Jona Skeeta, protože jeho byla úplnější než moje

Podívejte se do dokumentace pro SqlCommand.Parameters pro více informací.

V zásadě byste neměli své hodnoty vkládat do samotného SQL z různých důvodů:

  • Je neelegantní kombinovat kód a data
  • Pokud nebudete velmi opatrní při útěku, otevře vás to útokům SQL injection
  • Musíte si dělat starosti s formátováním a podrobnostmi i18n pro věci, jako jsou čísla, data a časy atd.
  • Když dotaz zůstává stejný, pouze se mění hodnoty, má optimalizátor méně práce – může vyhledat předchozí optimalizovaný dotaz přímo, protože se bude dokonale shodovat s SQL.


  1. SQL - jak počítat unikátní kombinaci sloupců

  2. Jak změnit typ dat sloupce v SQL Server (T-SQL)

  3. Mohu se připojit k serveru SQL pomocí ověřování Windows z webové aplikace Java EE?

  4. Nomenklatura a architektura produktů IRI