• Miércoles 24 de Abril de 2024, 19:57

Autor Tema:  Problemas con parámetros  (Leído 1217 veces)

Johnny Brusko

  • Nuevo Miembro
  • *
  • Mensajes: 6
    • Ver Perfil
    • http://www.konektaz.com
Problemas con parámetros
« en: Viernes 15 de Agosto de 2008, 18:04 »
0
Tengo un metodo en C# que me devuelve en un DataTable una serie de noticias dependiendo de varios parametros que le paso. El problema es que si utilizo parametros para construir la sentencia sql, me devuelve el DataTable vacio, pero si lo hago con los datos directamente en la sentencia no tengo ningún problema.

Código: Text
  1.  
  2.     //metodo que nos devuelve una tabla con las noticias paginadas
  3.     public DataTable obtenerNoticiasPaginadas(Int32 numeroPagina, String palabra, DateTime fechaInicio, DateTime fechaFin)
  4.     {
  5.         try
  6.         {
  7.             String strSql = "SELECT * FROM (SELECT *, ROW_NUMBER() OVER (ORDER BY fecha DESC) AS RowNumber FROM noticias WHERE (titular LIKE '%@palabra%' OR cuerpo LIKE '%@palabra%') AND fecha BETWEEN @fechaInicio AND @fechaFin) AS noticias WHERE RowNumber BETWEEN (@tamanoPagina * @numeroPagina + 1 - @tamanoPagina) AND (@tamanoPagina * (@numeroPagina + 1) - @tamanoPagina)";
  8.  
  9.             SqlCommand comando = new SqlCommand(strSql, conexion);
  10.             comando.Parameters.AddWithValue("@tamanoPagina", Int32.Parse(ConfigurationManager.AppSettings["paginadoNoticias"]));
  11.             comando.Parameters.AddWithValue("@numeroPagina", numeroPagina);
  12.             comando.Parameters.AddWithValue("@palabra", palabra);
  13.             comando.Parameters.AddWithValue("@fechaInicio", fechaInicio);
  14.             comando.Parameters.AddWithValue("@fechaFin", fechaFin);
  15.             SqlDataAdapter adaptador = new SqlDataAdapter(comando);
  16.  
  17.             DataTable tablaNoticias = new DataTable("Noticias");
  18.  
  19.             conexion.Open();
  20.             adaptador.Fill(tablaNoticias);
  21.             conexion.Close();
  22.  
  23.             return tablaNoticias;
  24.         }
  25.         catch (Exception exc)
  26.         {
  27.             conexion.Close();
  28.             throw exc;
  29.         }
  30.     }
  31.  
  32.  

Si sustituyo en la sentencia sql
Código: Text
  1. LIKE '%@palabra%' OR cuerpo LIKE '%@palabra%'
  2.  
por
Código: Text
  1. LIKE '%ipsum%' OR cuerpo LIKE '%ipsum%'
  2.  
siendo ipsum un texto que hay en la base de datos, el metodo funciona perfectamente.

¿Alguien puede ayudarme a encontrar la luz al final del tunel? ¿Por qué no me funciona con el parametro @palabra?

Johnny Brusko

  • Nuevo Miembro
  • *
  • Mensajes: 6
    • Ver Perfil
    • http://www.konektaz.com
Re: Problemas con parámetros
« Respuesta #1 en: Lunes 18 de Agosto de 2008, 19:48 »
0
Después de investigar y hacer muchas pruebas he conseguido saber qué fallaba en mi código. Por si a alguien le es de interés lo dejo por aquí.

Código: Text
  1. SELECT * FROM (SELECT *, ROW_NUMBER() OVER (ORDER BY fecha DESC) AS RowNumber FROM noticias WHERE (titular LIKE '%'+@palabra+'%' OR cuerpo LIKE '%'+@palabra+'%') AND fecha BETWEEN @fechaInicio AND @fechaFin) AS noticias WHERE RowNumber BETWEEN (@tamanoPagina * @numeroPagina + 1 - @tamanoPagina) AND (@tamanoPagina * (@numeroPagina + 1) - @tamanoPagina)
  2.  

Mi sentencia sql ha quedado finalmente así. El parametro @palabra al ser un string no necesitaba de las comillas pero los porcentajes para hacer una busqueda más abierta si que las necesitaban.

Un saludo.