Guardar y recuperar archivo!

31/05/2006 - 23:00 por Gustavo Arriola | Informe spam
Hola a todos!

¿Cómo puedo guardar un archivo binario en un campo en una base de datos SQL
2000?
¿Cómo puedo hacer para recuperar el mismo campo y convertirlo nuevamente en
archivo?

Desde ya muchas gracias!
Saludos cordiales,
Gustavo Arriola

Preguntas similare

Leer las respuestas

#1 Luis Miguel Blanco
01/06/2006 - 08:15 | Informe spam
Hola Gustavo

Utilizando objetos stream creo que podrías resolver la situación. A
continuación te adjunto el código de un ejemplo en el que se abre un archivo
de Word, volcándolo a un stream, seguidamente lo grabamos en un campo de una
tabla SQL Server definido como tipo image, que tiene más capacidad que
binary, por lo que es recomendable para cantidades importantes de contenido.

Por otra parte, también tienes el ejemplo opuesto, obtener un registro de la
tabla de la bbdd y mediante otro stream y un array de bytes, creamos un nuevo
archivo de Word con este campo.

'/////////////////////////////////////
Imports System.IO
Imports System.Data.SqlClient

Public Class Form1
Inherits System.Windows.Forms.Form

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button1.Click
' en este botón pasamos un documento word a la base de datos
Dim oFileStream As FileStream
oFileStream = New FileStream("c:\cubo\DTSsql.doc", FileMode.Open)

Dim aDocumento() As Byte
aDocumento = New Byte(oFileStream.Length - 1) {}
oFileStream.Read(aDocumento, 0, oFileStream.Length - 1)
oFileStream.Close()

Dim sSQL As String
Dim cnConexion As SqlConnection
Dim cmdComando As SqlCommand

sSQL = "INSERT INTO Documentos VALUES (@IDDocumento, @Nombre,
@Documento)"
cnConexion = New SqlConnection("data source=localhost;initial
catalog=PRUEBAS;uid=sa;pwd='';")
cmdComando = New SqlCommand
cmdComando.Connection = cnConexion
cmdComando.CommandType = CommandType.Text
cmdComando.CommandText = sSQL

Dim parIDDocumento As SqlParameter
parIDDocumento = New SqlParameter("@IDDocumento", SqlDbType.Int)
parIDDocumento.Value = Convert.ToInt32(111)
cmdComando.Parameters.Add(parIDDocumento)

Dim parNombre As SqlParameter
parNombre = New SqlParameter("@Nombre", SqlDbType.VarChar, 50)
parNombre.Value = "PruebaDoc1"
cmdComando.Parameters.Add(parNombre)

Dim parDocumento As SqlParameter
parDocumento = New SqlParameter("@Documento", SqlDbType.Image)
parDocumento.Value = aDocumento
cmdComando.Parameters.Add(parDocumento)

cnConexion.Open()
cmdComando.ExecuteNonQuery()
cnConexion.Close()
End Sub

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button2.Click
' en este botón recuperamos el documento word de la base de datos
' y lo pasamos a un fichero
Dim sSQL As String
Dim cnConexion As SqlConnection
Dim cmdComando As SqlCommand
Dim drDocumentos As SqlDataReader
Dim aBytDocumento() As Byte
Dim sNombreDoc As String
Dim oFileStream As FileStream

sSQL = "SELECT Nombre, Documento FROM Documentos WHERE IDDocumento =
111"
cnConexion = New SqlConnection("data source=localhost;initial
catalog=PRUEBAS;uid=sa;pwd='';")
cmdComando = New SqlCommand
cmdComando.Connection = cnConexion
cmdComando.CommandType = CommandType.Text
cmdComando.CommandText = sSQL

cnConexion.Open()
drDocumentos = cmdComando.ExecuteReader(CommandBehavior.SingleRow)

If drDocumentos.Read() Then
sNombreDoc = drDocumentos("Nombre")
aBytDocumento = drDocumentos("Documento")
End If

drDocumentos.Close()
cnConexion.Close()

oFileStream = New FileStream("c:\cubo\NUEVO.doc", _
FileMode.CreateNew, FileAccess.Write)
oFileStream.Write(aBytDocumento, 0, aBytDocumento.Length)
oFileStream.Close()
End Sub

End Class
'/////////////////////////////////////

Espero que te sea de utilidad para adaptarlo a tu caso.
Un saludo
Luis Miguel Blanco
http://www.dotnetmania.com


"Gustavo Arriola" wrote:

Hola a todos!

¿Cómo puedo guardar un archivo binario en un campo en una base de datos SQL
2000?
¿Cómo puedo hacer para recuperar el mismo campo y convertirlo nuevamente en
archivo?

Desde ya muchas gracias!
Saludos cordiales,
Gustavo Arriola



Respuesta Responder a este mensaje
#2 Jhonny Vargas P. [MVP]
01/06/2006 - 14:57 | Informe spam
Hola Gustavo,

Para guardar solo debes tener un campo tipo binary o image, adicionalmente
crea un Procedimiento Almacenado cuyo parametro sea tipo Binary o Image

ejemplo con una imagen:

create procedure spGrabarImagen
@Identificador int,
@Archivo image
as
insert tabla (identificador, archivo)
values (@identificador, @archivo)
go


'Rescatando la imagen desde un archivo físico
Dim objStream As System.IO.Stream, _
FileSize As Long
objStream = New FileStream("c:\imagen.jpg", FileMode.Open)
FileSize = objStream.Length
Dim Imagen(CInt(FileSize)) As Byte
objStream.Read(Imagen, 0, CInt(FileSize))
objStream.Close()


'desde el código, creando un Command
Dim objConnection As New SqlClient.SqlConnection("string de
coneccion"), _
objCommand As New SqlClient.SqlCommand

objConnection.Open()

objCommand.Connection = objConnection
objCommand.CommandText = "spGrabarImagen"
objCommand.CommandType = CommandType.StoredProcedure
objCommand.Parameters.Add("@Identificador", SqlDbType.Int)
objCommand.Parameters("@Identificador").Value = Identificador

objCommand.Parameters.Add("@Archivo", SqlDbType.Image)
objCommand.Parameters("@Archivo").Value = Imagen

objCommand.ExecuteNonQuery()
objConnection.Close()
objConnection.Dispose()



'para Leer la imagen puedes usar un DataSet o un SqlDataReader
Dim tifImagen As Byte()
tifImagen = objDataSet.Tables(0).Rows(0).Item(0)

'Si lo quieres dejar en un Stream:
Dim ImagenStream As IO.Stream
ImagenStream = New IO.MemoryStream(tifImagen)


Saludos,
Jhonny Vargas P.
Santiago de Chile
http://msmvps.com/jvargas



"Gustavo Arriola" escribió en el mensaje
news:
Hola a todos!

¿Cómo puedo guardar un archivo binario en un campo en una base de datos
SQL 2000?
¿Cómo puedo hacer para recuperar el mismo campo y convertirlo nuevamente
en archivo?

Desde ya muchas gracias!
Saludos cordiales,
Gustavo Arriola

email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida