Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Jak używać zmiennej łańcuchowej w instrukcji sql

Możesz to po prostu zrobić

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

Ale to jest złe i otwiera cię na wstrzykiwanie SQL

Powinieneś po prostu użyć sparametryzowanego zapytania

Coś takiego powinno Cię zacząć

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 odpowiedzi Jona Skeeta, ponieważ jego była pełniejsza niż moja

Zobacz dokumentację dla SqlCommand.Parameters aby uzyskać więcej informacji.

Zasadniczo nie powinieneś osadzać swoich wartości w samym SQL z różnych powodów:

  • Łączenie kodu i danych jest nieeleganckie
  • Otwiera cię na ataki typu SQL injection, chyba że jesteś bardzo ostrożny w ucieczce
  • Musisz się martwić o formatowanie i szczegóły i18n dotyczące takich rzeczy jak liczby, daty i godziny itp.
  • Gdy zapytanie pozostaje takie samo, zmieniając tylko wartości, optymalizator ma mniej pracy do wykonania – może bezpośrednio wyszukać poprzednie zoptymalizowane zapytanie, ponieważ będzie ono idealnie dopasowane pod względem SQL.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cofanie aktualizacji tabel w SQL Server 2008

  2. Czy SQL Server otacza Select...Insert Queries w niejawną transakcję?

  3. Jak wstawić dane do tabeli SQL Server za pomocą R?

  4. Grupuj według liczby i łącznej liczby

  5. SQL Server Like Query nie uwzględnia wielkości liter