Para leerlos:
Código:
//Valor del Id del fichero a mostrar
private Int32 Identif = Request.Params["ValorIdentif"];
//Busca en la tabla que sea el registro correspondiente a ese ID
//Y saca los 4 campos necesarios que siempre se llamarán igual en todas las tablas
private SqlConnection Conecta = new SqlConnection("CadenaConexion");
private SqlCommand Comando = new SqlCommand("Select Nombre_Fichero, Contenido_Fichero, Tipo_Fichero, Tamano_Fichero " + "From TABLA Where idFichero=@ID", Conecta);
Comando.Parameters.Add("@ID", Identif);
SqlDataReader Datos = null;
Conecta.Open();
Datos = Comando.ExecuteReader(CommandBehavior.CloseConnection);
try
{
if (Datos.HasRows)
{
Datos.Read();
if (System.Convert.ToString(Datos["Tipo_Fichero"]) == "application/pdf")
Response.AppendHeader("content-disposition", "attachment; filename=" + System.Convert.ToString(Datos["Nombre_Fichero"]));
else
Response.AppendHeader("content-disposition", "inline; filename=" + System.Convert.ToString(Datos["Nombre_Fichero"]));
// Establece el tipo de contenido que se va amostrar. Por ejemplo: "application/msword"
Response.ContentType = System.Convert.ToString(Datos["Tipo_Fichero"]);
Response.Charset = "charset.ansi";
//saca el contenido del documento a response output stream
Response.OutputStream.Write((byte[])(Datos["Contenido_Fichero"]), 0, System.Convert.ToInt32(Datos["Tamano_Fichero"]));
}
}
catch (Exception ex)
{
Response.Write(ex.ToString());
}
finally
{
Datos.Close();
}
Éste código lo tenía en una página sin nada más y lo que hacía era un enlace a esa página abriéndola en ventana nueva. Puedes usarlo así o con un IFrame, el resto investigar porque ya ni idea... ¡qué tiempos aquellos!
Al final volví a guardar los archivos físicamente, me resultó más cómodo.
Un saludo.