none
Subir Archivo Pdf como binario y repurarlo en sqlserver 2012 RRS feed

  • Pregunta

  • Buenas saludos

    tengo un inconveniente con pdf necesito abrir un archivo pdf y guardarlo en sqlserver a traves de C# logro guardar el documento pdf pero no logro mostrarlo agradeceria su ayuda

    de esta manera inicio el openfial y guardo el archivo pdf

     public partial class Scanner : Form
        {
            public byte[] Transformador { get; private set; }
         

            public Scanner()
            {
                InitializeComponent();
                
            }

    private void button1_Click(object sender, EventArgs e)
            {
                try
                {
                    SqlCommand sql = new SqlCommand();
                    Dato.Conexion conexion = new Conexion();
                    conexion.conecta();
                    sql.Connection = conexion.conexion;
                    sql.CommandText = "ingresoscanner";
                    sql.CommandType = CommandType.StoredProcedure;
                    sql.Parameters.AddWithValue("@Nombre", txtnombre.Text);
                    sql.Parameters.AddWithValue("@Archivo", Transformador);
                    SqlDataReader go = sql.ExecuteReader();
                    go.Close();
                    conexion.conexion.Close();

                    MessageBox.Show("Documento Guardado Satisfactoriamente");

                }
                catch (SqlException )
                {
                    MessageBox.Show("No se Guardo Documento", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }

            private void button4_Click(object sender, EventArgs e)
            {
                try
                {
                    openFileDialog1.ShowDialog();
                    if (openFileDialog1.FileName.Equals("") == false)
                    {
                        archivo.src = openFileDialog1.FileName;
                        Transformador = System.IO.File.ReadAllBytes(openFileDialog1.FileName);
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show("No se pudo cargar la imagen: " + ex.ToString());
                }
            }

    para mostrar el documento queda en varbinary la tabla dode se almacena es

    create table Scanner
    (
    id bigint primary key IDENTITY(1,1) NOT NULL,
    Nombre varchar(150) NULL,
    Archivo varbinary (max) NULL
    )

    he intentado mostrarla de la siguiente manera

    public void verdocumentos(string Nombre, AxAcroPDF PDF, OpenFileDialog openFileDialog )
            {
                try
                {
                    conexion.Close();
                    SqlDataAdapter adapter = new SqlDataAdapter("Select Archivo from Scanner where Nombre = '" + Nombre + "'", conexion);
                    DataSet set = new DataSet();
                    conecta();
                    adapter.Fill(set, "Scanner");
                    byte[] datos = new byte[0];
                    DataRow row = set.Tables["Scanner"].Rows[0];
                    datos = (byte[])row["Archivo"];
                    System.IO.MemoryStream ms = new System.IO.MemoryStream(datos);
                    
                    PDF.src = openFileDialog.FileName;

                }
                catch (SqlException)
                {
                    MessageBox.Show("Error Al Cargar La Imagen", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }

    agradeceria su colaboracion he buscado en internet pero no encuentro respuesta

    saludos !!!

    viernes, 24 de noviembre de 2017 17:03

Respuestas

  • El lunes preguntaste esto mismo. Te respondí, pero allí murió. No problemo.

    Ahora vuelves a pegar la pregunta sin cambiar una coma.

    Tienes un programa en windowsforms, en el que lees un archivo del disco, y lo guardas en una tabla en la base.

    Luego buscas el registro en la tabla, recuperas el arreglo de bytes y deseas mostrarlo en el ocx acroPdf de adobe, que tienes instanciado en tu formulario.

    La propiedad src del control espera un nombre de archivo pero también acepta una dirección http. Esto te abre una puerta para poder cargar el archivo sin necesidad de copiarlo en el disco.

    Sería bueno que participases de los hilos que abres en lugar de reiniciarlos. Todo bien. No problemo.

    viernes, 24 de noviembre de 2017 19:23

Todas las respuestas

  •  PDF.src = openFileDialog.FileName;

    No, eso no puede funcionar. openDileDialog.FilenName es el fichero que LEES para guardarlo. Pero cuando quieres presentar el fichero, unicamente existe en la base de datos, ya no existe en disco (presumo que lo lees en otro sitio o en otro momento distinto de cuando lo guardaste, de lo contrario no necesitarias meterlo en la base de datos).

    Dado que no existe en disco, y que presumiblemente "PDF" se refiere a alguna herramienta que estas usando para presentar archivos en disco, necesitaras salvar los bytes a disco en un archivo temporal y luego pasarle ese archivo temporal al PDF.src.

    string temporal = @"c:\ruta\temp.pdf"; // Cambiar por un valor adecuado
    
    System.IO.File.WriteAllBytes(temporal, datos); // Esto EN LUGAR DE la sentencia donde usas el MemoryStream
    
    PDF.src =temporal;
    

    viernes, 24 de noviembre de 2017 17:20
    Moderador
  • hola

    deberias usar parametros en el codigo

    public void verdocumentos(string Nombre, AxAcroPDF PDF, OpenFileDialog openFileDialog )
    {
    	try
    	{
    		string query = "Select Archivo from Scanner where Nombre = @nombre";
    		SqlCommand cmd = new SqlCommand(query, conexion)
    		cmd.Parameters.AddWithValue("@nombre", Nombre);
    		
    		SqlDataAdapter da = new SqlDataAdapter(cmd);
    		DataTable dt = new DataTable();
    		adapter.Fill(dt);
    		
    		DataRow row = dt.Rows[0];
    		byte[] datos = (byte[])row["Archivo"];
    		
    		File.WriteAllBytes("ruta", datos);
    		
    		PDF.src = "ruta";
    
    	}
    	catch (SqlException)
    	{
    		MessageBox.Show("Error Al Cargar La Imagen", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
    	}
    }

    ademas la persona selecciona donde descargar el pdf? porque si es asi deberias usar el SaveFileDialog

    File.WriteAllBytes(fileDialog.FileName, datos);

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    viernes, 24 de noviembre de 2017 17:42
  • El lunes preguntaste esto mismo. Te respondí, pero allí murió. No problemo.

    Ahora vuelves a pegar la pregunta sin cambiar una coma.

    Tienes un programa en windowsforms, en el que lees un archivo del disco, y lo guardas en una tabla en la base.

    Luego buscas el registro en la tabla, recuperas el arreglo de bytes y deseas mostrarlo en el ocx acroPdf de adobe, que tienes instanciado en tu formulario.

    La propiedad src del control espera un nombre de archivo pero también acepta una dirección http. Esto te abre una puerta para poder cargar el archivo sin necesidad de copiarlo en el disco.

    Sería bueno que participases de los hilos que abres en lugar de reiniciarlos. Todo bien. No problemo.

    viernes, 24 de noviembre de 2017 19:23
  • Hola Alejo Espitia

    Para que las soluciones que se te brinden sean útiles para el resto de la comunidad, favor de marcarlas.

    Quedamos al pendiente de cualquier actualización de tu parte.

    Saludos Cordiales.

    Gracias por usar los foros de MSDN.

    Pablo Rubio
    _____
     
    Por favor recuerde "Marcar como respuesta" las respuestas que hayan resuelto su problema, es una forma común de reconocer a aquellos que han ayudado, y hace que sea más fácil para los otros visitantes encontrar la solución más tarde.
     
    Microsoft ofrece este servicio de forma gratuita, con la finalidad de ayudar a los usuarios y la ampliación de la base de datos de conocimientos relacionados con los productos y tecnologías de Microsoft.
     
    Este contenido es proporcionado "tal cual" y no implica ninguna responsabilidad de parte de Microsoft.

    lunes, 27 de noviembre de 2017 18:05
    Moderador