Tomar a través de algún código de mi predecesor, y me encontré con una consulta que utiliza el operador Like:

SELECT * FROM proveedores
DONDE supplier_name like ‘%’+nombre+%’;

Tratando de evitar la Inyección SQL problema y parametrizar este, pero no estoy muy seguro de cómo esto podría llevarse a cabo. Alguna sugerencia ?

nota, necesito una solución para el clásico ADO.NET – yo realmente no tienen el visto bueno para cambiar este código a algo como LINQ.

OriginalEl autor MikeJ | 2008-10-23

4 Comentarios

  1. 18

    intente esto:

    var query = "select * from foo where name like @searchterm";
    using (var command = new SqlCommand(query, connection))
    {
      command.Parameters.AddWithValue("@searchterm", String.Format("%{0}%", searchTerm));
      var result = command.ExecuteReader();
    }

    el marco automáticamente acuerdo con la cotización problemas.

    Gracias! Bueno para conseguir trabajo fragmento de código como respuesta. Yo estaba pegado en la {0} en el texto de la consulta.

    OriginalEl autor craigb

  2. 8

    Simplemente parametrizar la consulta:

    SELECT * FROM suppliers WHERE supplier_name like '%' + @name + '%'

    Ahora usted puede pasar su «nombre» de la variable en el @nombre de parámetro y la consulta se ejecute sin ningún peligro de ataques de inyección de código. Incluso si pasa algo como «» O de la verdad –» aún funciona bien.

    OriginalEl autor Matt Hamilton

  3. 0

    En Entity Framework 6 podría ser hecho como este por los Nativos de SQL:

    List<Person> peopleList = contex.People.SqlQuery(
        @"SELECT * FROM [Person].[Person]
           WHERE [FirstName] LIKE N'%' + @p0 + '%' ", "ab").ToList();

    O

    List<Person> peopleList = contex.People.SqlQuery(
        @"SELECT * FROM [Person].[Person]
           WHERE [FirstName] LIKE N'%' + @name + '%' ",
        new SqlParameter("@name", "ab")).ToList();

    También, usted puede utilizar LINQ to entities directamente:

    List<Person> peopleList1 = contex.People.Where(s => s.FirstName.Contains("ab")).ToList();

    OriginalEl autor Recev Yildiz

  4. -5

    Breve Respuesta:

    1) nombre.Reemplazar(«‘», «»»)…. Reemplazar cualquiera de los caracteres de escape que su base de datos puede tener (comillas simples, siendo los más comunes)

    2) si usted está usando un lenguaje como .net use Consultas Parametrizadas

    sql="Insert into Employees (Firstname, Lastname, City, State, Zip, Phone, Email) Values ('" & frmFirstname.text & "', '" & frmLastName & "', '" & frmCity & "', '" & frmState & "', '" & frmZip & "', '" & frmPhone & "', '" & frmEmail & "')"

    El anterior se sustituye con el siguiente

    Dim MySQL as string = "Insert into NewEmp (fname, LName, Address, City, State, Postalcode, Phone, Email) Values (@Firstname, @LastName, @Address, @City, @State, @Postalcode, @Phone, @Email)" 
    
    With cmd.Parameters:
        .Add(New SQLParameter("@Firstname", frmFname.text))
        .Add(New SQLParameter("@LastName", frmLname.text))
        .Add(New SQLParameter("@Address", frmAddress.text))
        .Add(New SQLParameter("@City", frmCity.text))
        .Add(New SQLParameter("@state", frmState.text))
        .Add(New SQLParameter("@Postalcode", frmPostalCode.Text))
        .Add(New SQLParameter("@Phone", frmPhone.text))
        .Add(New SQLParameter("@email", frmemail.text))
    end with

    3) el usuario Almacena los procs de

    4) uso de Linq to SQL, de nuevo, si usted está utilizando .net

    No veo por qué no todas las votaciones aquí… me mostró la gama de opciones y lo que estaba disponible. Yo personalmente no uso la opción 1, pero me han dicho que todos los personajes tendrían que ser escapado no sólo las comillas simples. Si el hecho de que es perfectamente válido. Las opciones sólo se consigue mejor desde allí. La gente no voto sin decir por qué.
    vdhant, no contestó a la pregunta. La pregunta inicial se centró en cómo utilizar consultas parametrizadas con el operador Like, y no mencionar el operador Like a todos en su respuesta.

    OriginalEl autor vdhant

Dejar respuesta

Please enter your comment!
Please enter your name here