tengo esta base de datos con una tabla que tiene la siguiente, pero no tengo manera de descifrarlos queAlmacenamiento de Microsoft Word 97 documentos en la columna de SQL Server
DATA, TYPE, FILE TYPE, SIZE, DOC TYPE
0x15234324 , Word.Document.8 ,DOC, 19968, WORD.DOCUMENT.8
El campo parece contener un documento de Word almacenada en una SQL Server IMAGE
columna
¿Alguien ha encontrado esto antes o una forma de extraer estos datos en un formato legible?
Hasta ahora he intentado utilizar PHP para extraer el archivo y escribirlo en un documento de Word pero no tuve mucha suerte.
ACTUALIZACIÓN: ahora tengo Visual Studio Express y me gustaría una manera de extraer estos datos y guardar en un documento de Word
Update2: Esto es lo que tengo en VB sofar
Imports System.Data.SqlClient
Imports System.IO
Public Class Form1
Private Shared Function RetrieveFile(ByVal filename As String) As Byte()
Dim connection As New SqlConnection("Server=sqlsrv;database=database;Trusted_Connection=Yes;")
Dim command As New SqlCommand("select data from objects where object_ref in (select data from parts where object_ref =239804)", connection)
command.Parameters.AddWithValue("test", filename)
connection.Open()
Dim reader As SqlDataReader = command.ExecuteReader(System.Data.CommandBehavior.SequentialAccess)
reader.Read()
Dim memory As New MemoryStream()
Dim startIndex As Long = 0
Const ChunkSize As Integer = 256
While True
Dim buffer As Byte() = New Byte(ChunkSize - 1) {}
Dim retrievedBytes As Long = reader.GetBytes(1, startIndex, buffer, 0, ChunkSize)
memory.Write(buffer, 0, CInt(retrievedBytes))
startIndex += retrievedBytes
If retrievedBytes <> ChunkSize Then
Exit While
End If
End While
connection.Close()
Dim data As Byte() = memory.ToArray()
memory.Dispose()
Return data
End Function
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
Dim saveFileDialog1 As New SaveFileDialog()
saveFileDialog1.Filter = "Doc File|*.doc"
saveFileDialog1.Title = "Save an doc File"
saveFileDialog1.ShowDialog()
If saveFileDialog1.FileName <> "" Then
Dim fs As New System.IO.FileStream(saveFileDialog1.FileName, System.IO.FileMode.Create, System.IO.FileAccess.Write)
Dim data As Byte() = RetrieveFile("test.doc")
fs.Write(data, 0, data.Length)
fs.Flush()
fs.Close()
End If
End Sub
End Class
Probablemente se podría simplemente almacenar los bytes contenidos en 'DATA' en el sistema de archivos y luego abre ese archivo con MS Word. –
Cool - ¿cómo extraería esta información del servidor SQL? como la cadena parece ser corta en la ventana de resultados de la consulta de administración SQL – Rob
Sí, SSMS siempre truncará a un máximo. longitud: necesitará usar algún código para capturarlo desde SQL Server. Ver esta [otra pregunta SO] (http://stackoverflow.com/questions/2818557/are-there-any-utilities-to-extract-binary-data-from-sql-server) sobre un tema similar - tal vez eso ' Te ayudaré –