none
Como mandar un archivo de un campo sql a una carpeta en el sitio asp.net vb RRS feed

  • Pregunta

  • estoy trabajando en una aplicación web, que maneja solo archivos pdf. y me gustaría saber si alguien me puede brindar ayuda con eso, no encuentro la manera de mandar el archivo a una carpeta del servidor llamada Documentos.

    Saludos.

    martes, 13 de marzo de 2018 1:48

Respuestas

  • Basándome en el título de la pregunta, asumo que hay una tabla en SQL Server que tiene una columna de tipo varbinary donde se han almacenado archivos PDF.

    Using conn As New SqlConnection("<cadena de conexión aquí>")
        conn.Open()
        Using cmd As New SqlCommand("Select NombreArchivo, Archivo From Tabla Where ID = @id", conn)
            cmd.Parameters.Add("id", SqlDbType.Int).Value = <id de registro>
            Using reader As SqlDataReader = cmd.ExecuteReader()
                If reader.Read Then
                    Dim nombreArch As String
                    nombreArch = reader("NombreArchivo").ToString()
                    nombreArch = System.IO.Path.Combine("<carpeta aquí="" de="" destina="">", nombreArch)
                    Using fs As New FileStream(nombreArch, FileMode.Create)
                        Dim arch As Byte()
                        arch = CType(reader("Archivo"), Byte())
                        fs.Write(arch, 0, arch.Length)
                    End Using
                End If
            End Using
        End Using
    End Using</carpeta>

    No programo nunca en VB.net así que si tengo algún error me lo disculpa, o me corrige y así aprendo yo también. :-)

    Eso sería para leer los contenidos de un archivo desde base de datos SQL Server y almacenar en un folder de destino.  Asume que el nombre del archivo lo provee la base de datos, pero si no, siéntase en libertad de cambiar esa parte del código.

    Si necesitara eso dentro de un bucle, puede hacer que el bucle provea los ID a buscar, o bien puede hacer una consulta que devuelva muchos registros, y entonces en vez de If reader.Read Then usaría While reader.Read (o como sea que sea la sintaxis de un While en VB.net!!).


    Jose R. MCP
    Code Samples


    martes, 13 de marzo de 2018 3:00
    Moderador
  • Ok, es nombreArch = System.IO.Path.Combine(Server.MapPath("~/Documentos"), nombreArch).


    Jose R. MCP
    Code Samples


    martes, 13 de marzo de 2018 5:00
    Moderador

Todas las respuestas

  • Basándome en el título de la pregunta, asumo que hay una tabla en SQL Server que tiene una columna de tipo varbinary donde se han almacenado archivos PDF.

    Using conn As New SqlConnection("<cadena de conexión aquí>")
        conn.Open()
        Using cmd As New SqlCommand("Select NombreArchivo, Archivo From Tabla Where ID = @id", conn)
            cmd.Parameters.Add("id", SqlDbType.Int).Value = <id de registro>
            Using reader As SqlDataReader = cmd.ExecuteReader()
                If reader.Read Then
                    Dim nombreArch As String
                    nombreArch = reader("NombreArchivo").ToString()
                    nombreArch = System.IO.Path.Combine("<carpeta aquí="" de="" destina="">", nombreArch)
                    Using fs As New FileStream(nombreArch, FileMode.Create)
                        Dim arch As Byte()
                        arch = CType(reader("Archivo"), Byte())
                        fs.Write(arch, 0, arch.Length)
                    End Using
                End If
            End Using
        End Using
    End Using</carpeta>

    No programo nunca en VB.net así que si tengo algún error me lo disculpa, o me corrige y así aprendo yo también. :-)

    Eso sería para leer los contenidos de un archivo desde base de datos SQL Server y almacenar en un folder de destino.  Asume que el nombre del archivo lo provee la base de datos, pero si no, siéntase en libertad de cambiar esa parte del código.

    Si necesitara eso dentro de un bucle, puede hacer que el bucle provea los ID a buscar, o bien puede hacer una consulta que devuelva muchos registros, y entonces en vez de If reader.Read Then usaría While reader.Read (o como sea que sea la sintaxis de un While en VB.net!!).


    Jose R. MCP
    Code Samples


    martes, 13 de marzo de 2018 3:00
    Moderador
  • hola

    pero que tiene que ver un campo sql con guardar un pdf en una carpeta ?

    lo que entiendo estas realizando es el upload del documento con el control FileUpload, si es asi usas el SaveAs

    FileUpload.SaveAs

    para indicar la ruta dentro de la estructura del sitio usa

    Dim documentPath As String = Server.MapPath("~/Documentos");
    con eso tendrias la ruta fisica para usar con el saveas

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    martes, 13 de marzo de 2018 3:12
  • No estructure bien la pregunta, los archivos los guardo en una base de datos, lo que no he podido lograr hacer es convertir de nuevo el archivo y guardarlo en una carpeta del sitio.

    la carpeta seria Documentos.

    saludos, y gracias por responder.

     
    martes, 13 de marzo de 2018 4:29
  • El código que le di en mi primera respuesta lee desde base de datos y guarda en una carpeta.

    Jose R. MCP
    Code Samples

    martes, 13 de marzo de 2018 4:33
    Moderador
  • gracias por contestar, pero tengo una duda como funciona esta linea de código.

    nombreArch = System.IO.Path.Combine("<carpeta aquí="" de="" destina="">", nombreArch)

    martes, 13 de marzo de 2018 4:42
  • perdón por mi ignorancia, es solo que no logro hacer que funcione, soy nuevo en esto. 

    digamos 

    "<carpeta aquí="" de="" destino="">"

    "<Documentos="" de?="" destino?="">"

    como seria?

    la carpeta se llama documentos.

      Dim valor As String = txtid.Text
            Dim conn As New SqlConnection("Data Source=RAUL;Initial Catalog=RecursosHumanos;Integrated Security=True")
            conn.Open()
            Dim cmd As New SqlCommand("Select dtcontrato From contrato Where id = @id", conn)
            cmd.Parameters.Add("@id", SqlDbType.Int).Value = valor
            Dim reader As SqlDataReader = cmd.ExecuteReader()
            If reader.Read Then
                Dim nombreArch As String
                nombreArch = "Documento" & txtnombre.Text & "" & txtexpediente.Text & ".pdf"
                nombreArch = System.IO.Path.Combine("~/Documentos", nombreArch)
                Using fs As New FileStream(nombreArch, FileMode.Create)
                    Dim arch As Byte()
                    arch = CType(reader("dtcontrato"), Byte())
                    fs.Write(arch, 0, arch.Length)
                End Using
            End If

    lo hice asi pero me marca un error con la ruta


    martes, 13 de marzo de 2018 4:56
  • Ok, es nombreArch = System.IO.Path.Combine(Server.MapPath("~/Documentos"), nombreArch).


    Jose R. MCP
    Code Samples


    martes, 13 de marzo de 2018 5:00
    Moderador
  • Amigo muchas gracias me sirvió su respuesta es justo lo que estaba buscando. saludos. 
    martes, 13 de marzo de 2018 5:06
  • Con gusto, pero marque también la primera respuesta que le di para que quienes busquen esta solución, sepan dónde está el código completo.

    Jose R. MCP
    Code Samples

    martes, 13 de marzo de 2018 5:10
    Moderador