sql >> Base de Datos >  >> RDS >> Sqlserver

Cómo usar la variable de cadena en la declaración sql

Solo puedes hacer esto

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

Pero eso es malo y te abre a SQL Injection

Solo debe usar una consulta parametrizada

Algo como esto debería ayudarlo a comenzar

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

De la respuesta de Jon Skeet ya que la suya era más completa que la mía

Consulte los documentos para SqlCommand.Parameters para más información.

Básicamente, no debe incrustar sus valores dentro del propio SQL por varias razones:

  • No es elegante mezclar código y datos
  • Te expone a ataques de inyección SQL a menos que tengas mucho cuidado con escapar
  • Tiene que preocuparse por el formato y los detalles de i18n para cosas como números, fechas y horas, etc.
  • Cuando la consulta sigue siendo la misma y solo cambian los valores, el optimizador tiene menos trabajo que hacer:puede buscar la consulta optimizada anterior directamente, ya que será una coincidencia perfecta en términos de SQL.