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.
//metodo que nos devuelve una tabla con las noticias paginadas
public DataTable obtenerNoticiasPaginadas(Int32 numeroPagina, String palabra, DateTime fechaInicio, DateTime fechaFin)
{
try
{
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)";
SqlCommand comando = new SqlCommand(strSql, conexion);
comando.Parameters.AddWithValue("@tamanoPagina", Int32.Parse(ConfigurationManager.AppSettings["paginadoNoticias"]));
comando.Parameters.AddWithValue("@numeroPagina", numeroPagina);
comando.Parameters.AddWithValue("@palabra", palabra);
comando.Parameters.AddWithValue("@fechaInicio", fechaInicio);
comando.Parameters.AddWithValue("@fechaFin", fechaFin);
SqlDataAdapter adaptador = new SqlDataAdapter(comando);
DataTable tablaNoticias = new DataTable("Noticias");
conexion.Open();
adaptador.Fill(tablaNoticias);
conexion.Close();
return tablaNoticias;
}
catch (Exception exc)
{
conexion.Close();
throw exc;
}
}
Si sustituyo en la sentencia sql
LIKE '%@palabra%' OR cuerpo LIKE '%@palabra%'
por
LIKE '%ipsum%' OR cuerpo LIKE '%ipsum%'
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?