none
¿ Como usar like en consulta sql ? RRS feed

  • Pregunta

  • HOLA...

    Tengo la siguente consulta en una aplicacion c# y me devuelve un error acerca de que ne hace falta caracteres de escape:

    SELECT * FROM NombreTabla WHERE Campo LIKE %@parametro%

    mi codigo C#

      public DataTable GetPedido(string cveExtendida)
            {
                var dt = new DataTable();
    
                try
                {
                    FbConnection cnxFB = new FbConnection(RNData.ctxRodamex);
                    var sql = "SELECT * FROM NombreTabla WHERE Campo LIKE %@parametro%";
                    FbCommand cmd = new FbCommand(sql, cnxFB);
                    cmd.CommandType = CommandType.Text;
                    cmd.Parameters.Clear();
                    cmd.Parameters.Add("@cveExtendida", cveExtendida);
                    cmd.Connection.Open();
                    FbDataAdapter adapter = new FbDataAdapter(cmd);
                    adapter.Fill(dt);
                    cmd.Connection.Close();
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.Message);
                }
    
                return dt;
            }


    EFRAIN MEJIAS C VALENCIA - VENEZUELA

    miércoles, 15 de septiembre de 2021 0:51

Respuestas

  • Hola Efrain Mejias Castillo:

    Escenario:

    Create table dbo.NombreTabla (id int primary key,Campo varchar(100))
    Go
    Insert into NombreTabla (id, Campo)
    values
    (1,'AA_BB_CC'),
    (2,'CC_BB_AA'),
    (3,'BB_CC_DD'),
    (4,'BB_AA_BB'),
    (5,'CC_DD_EE');
    go

    Utiliza bloques Using, así no tienes que preocuparte de cerrar o disposar los objetos creados.

    public DataTable GetPedido(string cveExtendida)
    {
        DataTable dt = new DataTable();
        try
        {
            // Create a connection to the server
            string sqlConnectionString = "Tu cadena de conexión";
            using (SqlConnection conn = new SqlConnection(sqlConnectionString))
            {
                string query = "SELECT * FROM NombreTabla WHERE Campo LIKE @param";
                
                using (SqlCommand cmd = new SqlCommand(query, conn))
                {
                    cmd.CommandType = CommandType.Text;
                    // añadimos el parámetro que contendrá el like.
                    cmd.Parameters.Add(new SqlParameter()
                    {
                        ParameterName = "@param",
                        SqlDbType = SqlDbType.NVarChar,
                        Value = string.Format("%{0}%", cveExtendida)
                    });
                        
                    using (SqlDataAdapter da = new SqlDataAdapter(cmd))
                    {
                        //Se abre la conexión
                        cmd.Connection.Open();    
                        //Se cargan los datos en el DataTable
                        da.Fill(dt);
                    }
                }
            }
        }
        catch (Exception exception)
        {
            /* Code exeption */
            Console.WriteLine(exception.Message);
        }
         return dt;
    }

    La ejecución de dicho método, lanza al servidor la siguiente sentencia dinámica.

    exec sp_executesql N'SELECT * FROM NombreTabla WHERE Campo LIKE @param',N'@param nvarchar(4)',@param=N'%AA%'

    Y resuelve 3 filas. 

    La que empieza por AA. La que dispone del literal en medio, y la que lo contiene al final.

    miércoles, 15 de septiembre de 2021 4:03
  • Estuve googleando y por lo que vi, tenes que poner los % como parte del parámetro, por ejemplo:

    [...]

    cmd.Parameters("@filtro", "%" + filtro + "%");

    O, alternativamente, puedes usar concatenación dentro de la sentencia SQL:

    var sql = "SELECT * FROM NombreTabla WHERE Campo LIKE '%'+@parametro+'%'";

    Las dos cosas funcionan: O bien meter los % dentro del valor del parámetro, o bien concatenárselos al parámetro dentro del SQL.

    miércoles, 15 de septiembre de 2021 6:35

Todas las respuestas

  • Hola Efrain

    Estuve googleando y por lo que vi, tenes que poner los % como parte del parámetro, por ejemplo:

    var filtro = "algo";

    var sql = "SELECT * FROM Tabla WHERE Campo LIKE @filtro";

    var cmd = new FbCommand(sql, cnxFB);

    cmd.Parameters("@filtro", "%" + filtro + "%");

    Espero te sea útil

    Saludos

    Pablo

    miércoles, 15 de septiembre de 2021 2:38
  • Hola Efrain Mejias Castillo:

    Escenario:

    Create table dbo.NombreTabla (id int primary key,Campo varchar(100))
    Go
    Insert into NombreTabla (id, Campo)
    values
    (1,'AA_BB_CC'),
    (2,'CC_BB_AA'),
    (3,'BB_CC_DD'),
    (4,'BB_AA_BB'),
    (5,'CC_DD_EE');
    go

    Utiliza bloques Using, así no tienes que preocuparte de cerrar o disposar los objetos creados.

    public DataTable GetPedido(string cveExtendida)
    {
        DataTable dt = new DataTable();
        try
        {
            // Create a connection to the server
            string sqlConnectionString = "Tu cadena de conexión";
            using (SqlConnection conn = new SqlConnection(sqlConnectionString))
            {
                string query = "SELECT * FROM NombreTabla WHERE Campo LIKE @param";
                
                using (SqlCommand cmd = new SqlCommand(query, conn))
                {
                    cmd.CommandType = CommandType.Text;
                    // añadimos el parámetro que contendrá el like.
                    cmd.Parameters.Add(new SqlParameter()
                    {
                        ParameterName = "@param",
                        SqlDbType = SqlDbType.NVarChar,
                        Value = string.Format("%{0}%", cveExtendida)
                    });
                        
                    using (SqlDataAdapter da = new SqlDataAdapter(cmd))
                    {
                        //Se abre la conexión
                        cmd.Connection.Open();    
                        //Se cargan los datos en el DataTable
                        da.Fill(dt);
                    }
                }
            }
        }
        catch (Exception exception)
        {
            /* Code exeption */
            Console.WriteLine(exception.Message);
        }
         return dt;
    }

    La ejecución de dicho método, lanza al servidor la siguiente sentencia dinámica.

    exec sp_executesql N'SELECT * FROM NombreTabla WHERE Campo LIKE @param',N'@param nvarchar(4)',@param=N'%AA%'

    Y resuelve 3 filas. 

    La que empieza por AA. La que dispone del literal en medio, y la que lo contiene al final.

    miércoles, 15 de septiembre de 2021 4:03
  • Estuve googleando y por lo que vi, tenes que poner los % como parte del parámetro, por ejemplo:

    [...]

    cmd.Parameters("@filtro", "%" + filtro + "%");

    O, alternativamente, puedes usar concatenación dentro de la sentencia SQL:

    var sql = "SELECT * FROM NombreTabla WHERE Campo LIKE '%'+@parametro+'%'";

    Las dos cosas funcionan: O bien meter los % dentro del valor del parámetro, o bien concatenárselos al parámetro dentro del SQL.

    miércoles, 15 de septiembre de 2021 6:35