Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Comment utiliser une variable de chaîne dans une instruction sql

Vous pouvez simplement faire ceci

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

Mais c'est mauvais et vous ouvre à l'injection SQL

Vous devez simplement utiliser une requête paramétrée

Quelque chose comme ça devrait vous aider à démarrer

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

D'après la réponse de Jon Skeet puisque la sienne était plus complète que la mienne

Voir la documentation pour SqlCommand.Parameters pour plus d'informations.

Fondamentalement, vous ne devriez pas intégrer vos valeurs dans le SQL lui-même pour diverses raisons :

  • C'est inélégant de mélanger code et données
  • Cela vous expose aux attaques par injection SQL à moins que vous ne fassiez très attention à vous échapper
  • Vous devez vous soucier du formatage et des détails i18n pour des éléments tels que les nombres, les dates et les heures, etc.
  • Lorsque la requête reste la même et que seules les valeurs changent, l'optimiseur a moins de travail à faire :il peut rechercher directement la requête optimisée précédente car elle correspondra parfaitement en termes de SQL.