我有这个数据库,其中有一个表的下面,但我没有办法正是DeCypher它存储的Microsoft Word 97页中的SQL Server列中的文档
DATA, TYPE, FILE TYPE, SIZE, DOC TYPE
0x15234324 , Word.Document.8 ,DOC, 19968, WORD.DOCUMENT.8
领域似乎包含存储在一个Word文档SQL Server IMAGE
列
有没有人遇到过这个或以可读的格式提取数据的方法?
到目前为止,我已经尝试使用PHP来提取文件并将其写入word文档,但没有多少运气。
更新:我现在拥有的Visual Studio Express和希望的方式来提取这些数据,并保存到word文档
UPDATE2:这是我在VB中辛勤
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
你也许包含在'DATA'字节只是存储在文件系统和然后用MS Word打开该文件。 – 2011-05-06 12:37:09
很酷 - 如何从SQL服务器提取这些数据?因为字符串接缝在SQL管理查询结果窗口中是短的 – Rob 2011-05-06 12:38:48
是的,SSMS将始终截断为最大值。长度 - 您需要使用一些代码从SQL Server中获取它。看到这个[其他SO问题](http://stackoverflow.com/questions/2818557/are-there-any-utilities-to-extract-binary-data-from-sql-server)上类似的话题 - 也许这'我会帮你 – 2011-05-06 12:39:43