Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

So verwenden Sie eine Zeichenfolgenvariable in einer SQL-Anweisung

Sie können dies einfach tun

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

Aber das ist schlecht und öffnet Sie für SQL Injection

Sie sollten nur eine parametrisierte Abfrage verwenden

So etwas sollte Ihnen den Einstieg erleichtern

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

Aus Jon Skeets Antwort, da seine vollständiger war als meine

Siehe die Dokumentation für SqlCommand.Parameters für weitere Informationen.

Grundsätzlich sollten Sie Ihre Werte aus verschiedenen Gründen nicht in die SQL selbst einbetten:

  • Es ist unelegant, Code und Daten zu mischen
  • Es macht Sie angreifbar für SQL-Injection-Angriffe, es sei denn, Sie sind sehr vorsichtig beim Entkommen
  • Sie müssen sich um Formatierung und i18n-Details für Dinge wie Zahlen, Datum und Uhrzeit usw. kümmern
  • Wenn die Abfrage gleich bleibt und sich nur die Werte ändern, hat der Optimierer weniger Arbeit zu tun - er kann die vorherige optimierte Abfrage direkt nachschlagen, da sie eine perfekte Übereinstimmung mit dem SQL ergibt.