word y sql

30/03/2006 - 19:11 por Cid | Informe spam
Querria guardar documentos de word en un campo de sql server y luego
recuperarlos a disco, es decir coger de c:\a.doc y meterlo en una tabla y
luego cuando quiera pasarlo a c:\aNuevo.doc. Puede hacerse esto? salu2.

Preguntas similare

Leer las respuestas

#1 Jorge Serrano [MVP VB]
30/03/2006 - 20:21 | Informe spam
Hola,

con Access sí lo he hecho, con SQL Server no, pero supongo que no
encontrarás problemas.

Se me ocurre que metas los datos en un campo de tipo binary. Para eso,
deberás leer los datos primero en VB.NET, por lo que te sugiero usar
FileStream.
Luego lo vuelcas a base de datos a ese campo y así lo guardarías.

Finalmente lo recuperas igual pasándolo a FileStream y volcándolo a disco.

El nombre le das el que quieras, por lo que si quieres mantener el nombre o
cambiarlo, deberías añadir un campo adicional de tipo Varchar que guarde el
nombre del archivo por ejemplo. Así tendrías todo.

Que conste que no lo he probado y espero no haber dicho ninguna burrada,
pero yo probaría esto a ver que tal. Espero que alquien pueda también dar su
opinión y aprendamos más a ver si estoy equivocado o no.

Espero que sirva.

Un saludo.

Jorge Serrano Pérez
Microsoft MVP VB.NET
PortalVB.com
http://www.portalvb.com/
Weblog de Jorge Serrano
http://weblogs.golemproject.com/jorge/


"Cid" wrote:

Querria guardar documentos de word en un campo de sql server y luego
recuperarlos a disco, es decir coger de c:\a.doc y meterlo en una tabla y
luego cuando quiera pasarlo a c:\aNuevo.doc. Puede hacerse esto? salu2.



Respuesta Responder a este mensaje
#2 Cid
31/03/2006 - 12:19 | Informe spam
Gracias por tu respuesta pero no se como va eso del FileStream.

"Jorge Serrano [MVP VB]"
escribió
en el mensaje news:
Hola,

con Access sí lo he hecho, con SQL Server no, pero supongo que no
encontrarás problemas.

Se me ocurre que metas los datos en un campo de tipo binary. Para eso,
deberás leer los datos primero en VB.NET, por lo que te sugiero usar
FileStream.
Luego lo vuelcas a base de datos a ese campo y así lo guardarías.

Finalmente lo recuperas igual pasándolo a FileStream y volcándolo a disco.

El nombre le das el que quieras, por lo que si quieres mantener el nombre
o
cambiarlo, deberías añadir un campo adicional de tipo Varchar que guarde
el
nombre del archivo por ejemplo. Así tendrías todo.

Que conste que no lo he probado y espero no haber dicho ninguna burrada,
pero yo probaría esto a ver que tal. Espero que alquien pueda también dar
su
opinión y aprendamos más a ver si estoy equivocado o no.

Espero que sirva.

Un saludo.

Jorge Serrano Pérez
Microsoft MVP VB.NET
PortalVB.com
http://www.portalvb.com/
Weblog de Jorge Serrano
http://weblogs.golemproject.com/jorge/


"Cid" wrote:

Querria guardar documentos de word en un campo de sql server y luego
recuperarlos a disco, es decir coger de c:\a.doc y meterlo en una tabla y
luego cuando quiera pasarlo a c:\aNuevo.doc. Puede hacerse esto? salu2.



Respuesta Responder a este mensaje
#3 Jorge Serrano [MVP VB]
31/03/2006 - 13:32 | Informe spam
Hola,

es posible que el siguiente artículo te ayude (está en inglés, pero se
entiende bastante).

http://www.startvbdotnet.com/files/default.aspx

Un saludo.

Jorge Serrano Pérez
Microsoft MVP VB.NET
PortalVB.com
http://www.portalvb.com/
Weblog de Jorge Serrano
http://weblogs.golemproject.com/jorge/


"Cid" wrote:

Gracias por tu respuesta pero no se como va eso del FileStream.

"Jorge Serrano [MVP VB]"
escribió
en el mensaje news:
> Hola,
>
> con Access sí lo he hecho, con SQL Server no, pero supongo que no
> encontrarás problemas.
>
> Se me ocurre que metas los datos en un campo de tipo binary. Para eso,
> deberás leer los datos primero en VB.NET, por lo que te sugiero usar
> FileStream.
> Luego lo vuelcas a base de datos a ese campo y así lo guardarías.
>
> Finalmente lo recuperas igual pasándolo a FileStream y volcándolo a disco.
>
> El nombre le das el que quieras, por lo que si quieres mantener el nombre
> o
> cambiarlo, deberías añadir un campo adicional de tipo Varchar que guarde
> el
> nombre del archivo por ejemplo. Así tendrías todo.
>
> Que conste que no lo he probado y espero no haber dicho ninguna burrada,
> pero yo probaría esto a ver que tal. Espero que alquien pueda también dar
> su
> opinión y aprendamos más a ver si estoy equivocado o no.
>
> Espero que sirva.
>
> Un saludo.
>
> Jorge Serrano Pérez
> Microsoft MVP VB.NET
> PortalVB.com
> http://www.portalvb.com/
> Weblog de Jorge Serrano
> http://weblogs.golemproject.com/jorge/
>
>
> "Cid" wrote:
>
>> Querria guardar documentos de word en un campo de sql server y luego
>> recuperarlos a disco, es decir coger de c:\a.doc y meterlo en una tabla y
>> luego cuando quiera pasarlo a c:\aNuevo.doc. Puede hacerse esto? salu2.
>>
>>
>>



Respuesta Responder a este mensaje
#4 Luis Miguel Blanco
31/03/2006 - 15:42 | Informe spam
Hola Jorge y Cid

Pues claro que no has dicho burradas hombre 8-), tus indicaciones son, como
siempre, de primera.

He intentado simular una situación parecida a la que comenta Cid, y os
adjunto los resultados, a mí me ha funcionado. He creado un formulario con
dos botones, en uno abro un documento de word y lo paso a una tabla de SQL
Server. Lo único que creo es importante tener en cuenta en este sentido, es
que en la tabla de SQL Server, el campo que en el que almacenemos el
documento tiene que ser de tipo image, ya que creo que el binary se queda
corto cuando trabajemos con documentos de mucho tamaño.

Después, con el otro botón, leo el registro de la tabla y lo vuelco,
mediante streams, recuperándolo a un fichero word.

Como puedes ver, en ambos procesos se utilizan objetos de tipo stream, pero
no te preocupes, que en el ejemplo tienes cómo utilizarlos.

'/////////////////////////////////////
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 funcione de esta forma.
Un saludo
Luis Miguel Blanco
http://www.dotnetmania.com


"Cid" wrote:

Gracias por tu respuesta pero no se como va eso del FileStream.

"Jorge Serrano [MVP VB]"
escribió
en el mensaje news:
> Hola,
>
> con Access sí lo he hecho, con SQL Server no, pero supongo que no
> encontrarás problemas.
>
> Se me ocurre que metas los datos en un campo de tipo binary. Para eso,
> deberás leer los datos primero en VB.NET, por lo que te sugiero usar
> FileStream.
> Luego lo vuelcas a base de datos a ese campo y así lo guardarías.
>
> Finalmente lo recuperas igual pasándolo a FileStream y volcándolo a disco.
>
> El nombre le das el que quieras, por lo que si quieres mantener el nombre
> o
> cambiarlo, deberías añadir un campo adicional de tipo Varchar que guarde
> el
> nombre del archivo por ejemplo. Así tendrías todo.
>
> Que conste que no lo he probado y espero no haber dicho ninguna burrada,
> pero yo probaría esto a ver que tal. Espero que alquien pueda también dar
> su
> opinión y aprendamos más a ver si estoy equivocado o no.
>
> Espero que sirva.
>
> Un saludo.
>
> Jorge Serrano Pérez
> Microsoft MVP VB.NET
> PortalVB.com
> http://www.portalvb.com/
> Weblog de Jorge Serrano
> http://weblogs.golemproject.com/jorge/
>
>
> "Cid" wrote:
>
>> Querria guardar documentos de word en un campo de sql server y luego
>> recuperarlos a disco, es decir coger de c:\a.doc y meterlo en una tabla y
>> luego cuando quiera pasarlo a c:\aNuevo.doc. Puede hacerse esto? salu2.
>>
>>
>>



Respuesta Responder a este mensaje
#5 Javier Càceres
31/03/2006 - 20:09 | Informe spam
Hola

Guarda en la BD la ruta al doc, luego recupérala y utiliza los métodos
estáticos del objeto File (System.IO) para guardarlo con otro nombre.

Saludos desde Colombia!
Javier

"Cid" wrote:

Querria guardar documentos de word en un campo de sql server y luego
recuperarlos a disco, es decir coger de c:\a.doc y meterlo en una tabla y
luego cuando quiera pasarlo a c:\aNuevo.doc. Puede hacerse esto? salu2.



Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida