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
 

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



Preguntas similares