2011-08-31 6 views
8

Tengo una aplicación de WPF en el que me estoy haciendoCómo utilizar variable de cadena en la instrucción SQL

string someone = TextBox.text; 

me gustaría utilizar esto en la siguiente consulta

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

¿Cómo debo proceder para usando la variable alguien en la consulta?

+2

you shouldnt! ¿Has oído hablar de SQL Injection o consultas parametrizadas? –

+0

sí, esta es una práctica muy mala –

+0

aquí puede leer algunos ejemplos de inyección de SQL http://en.wikipedia.org/wiki/SQL_injection –

Respuesta

13

solo se puede hacer esto

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

Pero eso es malo y que se abre a la inyección de SQL

Sólo debe utilizar una consulta con parámetros

Algo como esto debería empezar

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 fue más completa que la mía

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

Básicamente no se debe integrar sus valores dentro del propio SQL, por diversas razones:

  • Es poco elegante para mezclar código y los datos
  • Se le abre a la inyección de SQL ataques a menos que esté muy cuidado de escapar
  • Usted tiene que preocuparse acerca de formato y i18n detalles para cosas como los números, las fechas y los tiempos etc
  • Cuando la consulta sigue siendo el mismo con sólo los valores cambio, el optimizador tiene menos trabajo por hacer - puede buscar la consulta optimizada anterior directamente, ya que será una combinación perfecta en los términos del SQL.
+0

¿Qué sucede si tengo varias variables que debo agregar? – Si8

+1

Utilice parámetros múltiples. Sería algo como 'cmd.CommandText = "SELECT * FROM tabla WHERE tile = @title, cosa = @ Thing' 'cmd.Parameters.Add (" @ Título", alguien); cmd.Parameters.Add ("@Thing, thing);' – msarchet

+0

Tiene sentido ahora. Gracias. Upvoted. – Si8

10

se debe utilizar una consulta SQL con parámetros:

query = "SELECT * From TableName WHERE Title = @Title"; 

command.Parameters.Add("@Title", SqlDbType.VarChar).Value = someone; 

Consulte la documentación para SqlCommand.Parameters para más información.

Básicamente no se debe integrar sus valores dentro del propio SQL, por diversas razones:

  • Es poco elegante para mezclar código y los datos
  • Se le abre a los ataques de inyección SQL a menos que esté muy cuidado de escapar
  • usted tiene que preocuparse acerca de formato y i18n detalles para cosas como números, fechas y horarios, etc.
  • Cuando la consulta sigue siendo el mismo con sólo cambiar los valores, el optimizador ha s menos trabajo por hacer: puede buscar directamente la consulta optimizada anterior, ya que será una combinación perfecta en términos de SQL.
+1

Le saqué la carne de su respuesta a la mía ya que la mía fue aceptada por lo que al menos alguien que mira la respuesta aceptada verá la mayor cantidad de información. – msarchet

+1

@msarchet: suficiente. –

1

Lo más fácil es utilizar un C# Prepared sql. Example on this post. Usted no tiene que preocuparse de escapar los caracteres en la cadena de SQL o cualquier

-1
declare @SqlQuery varchar(2000), @Fromdate varchar(20), @Todate varchar(20) 

set @Fromdate='01 jan 2017' 
set @Todate='30 mar 2017' 


set @SqlQuery='select * from tblEmployee where tblEmployee.JDate between '''+ @Fromdate + ''' and '''+ @Todate+ '''' 

print @SqlQuery 
Cuestiones relacionadas