I have this database with a table which has the the following but I have no way to decypher it
DATA, TYPE, FILE TYPE, SIZE, DOC TYPE
0x15234324 , Word.Document.8 ,DOC, 19968, WORD.DOCUMENT.8
The field seems to contain a word document stored in a SQL Server IMAGE
column
Has anyone come across this before or a way to extract this data in a readable format?
So far I have tried using PHP to extract the file and write it to a word document but not had much luck.
UPDATE: I now have Visual Studio Express and would like a way to extract this data and save to a word document
UPDATE2: This is what I have in 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
Microsoft Word has a Mail Merge feature that links a Word document with information stored in a data file, called a data source. The data source can be a database. Before the merge, you can create and manage a database within Word. The database is saved as an Access database file within Word.
I wrote a VBS script to pull data out of sharepoint blobs a while back, here's a generic version of it:
Const adOpenKeyset = 1
Const adLockOptimistic = 3
Const adTypeBinary = 1
Const adSaveCreateOverWrite = 2
strSQLServer = "YOURSERVER"
strSQLDatabase = "YOURDB"
strRecordID = "123"
strTempFileName = "c:\output.doc"
Set objConn = CreateObject("ADODB.Connection")
Set objRS = CreateObject("ADODB.RecordSet")
Set objStream = CreateObject("ADODB.Stream")
objConn.Open "Provider=SQLOLEDB;data Source=" & strSQLServer & ";Initial Catalog=" & strSQLDatabase & "; Trusted_Connection=yes;"
objRS.Open "Select * from AllDocStreams WHERE ID='" & strRecordID & "'", objConn, adOpenKeyset, adLockOptimistic
objStream.Type = adTypeBinary
objStream.Open
objStream.Write objRS.Fields("Content").Value
objStream.SaveToFile strTempFileName, adSaveCreateOverWrite
objRS.Close
objConn.Close
C# code:
connection.Open();
SqlCommand command1 = new SqlCommand("select DATA from TABLE where ...", connection);
byte[] img = (byte[])command1.ExecuteScalar();
File.WriteAllBytes("your_path/word.doc", img);
That should be the logic. Write something similar in any language you know. It shouldn't be hard in PHP or whatever you are using.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With