Stockage des documents Microsoft Word 97 dans la colonne SQL Server

J'ai cette database avec une table qui a le suivant mais je n'ai aucun moyen de le déchiffrer

DATA, TYPE, FILE TYPE, SIZE, DOC TYPE 0x15234324 , Word.Document.8 ,DOC, 19968, WORD.DOCUMENT.8 

Le champ semble contenir un document Word stocké dans une colonne SQL Server IMAGE

Quelqu'un at-il déjà rencontré cela ou un moyen d'extraire ces données dans un format lisible?

Jusqu'à présent, j'ai essayé d'utiliser PHP pour extraire le file et l'écrire dans un document Word, mais je n'ai pas eu beaucoup de chance.

MISE À JOUR: J'ai maintenant Visual Studio Express et voudrais un moyen d'extraire ces données et save dans un document Word

UPDATE2: C'est ce que j'ai dans VAR sofar

 Imports System.Data.SqlClient Imports System.IO Public Class Form1 Private Shared Function ResortingeveFile(ByVal filename As Ssortingng) 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 resortingevedBytes As Long = reader.GetBytes(1, startIndex, buffer, 0, ChunkSize) memory.Write(buffer, 0, CInt(resortingevedBytes)) startIndex += resortingevedBytes If resortingevedBytes <> 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() = ResortingeveFile("test.doc") fs.Write(data, 0, data.Length) fs.Flush() fs.Close() End If End Sub End Class 

J'ai écrit un script VBS pour extraire des données de blobs de sharepoint il y a quelques time, voici une version générique:

 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 

Code C #:

 connection.Open(); SqlCommand command1 = new SqlCommand("select DATA from TABLE where ...", connection); byte[] img = (byte[])command1.ExecuteScalar(); File.WriteAllBytes("your_path/word.doc", img); 

Cela devrait être la logique. Écrivez quelque chose de similaire dans n'importe quelle langue que vous connaissez. Cela ne devrait pas être difficile en PHP ou tout ce que vous utilisez.

Jetez un oeil à ce fil.

http://www.sqlteam.com/forums/topic.asp?TOPIC_ID=101754

Le gars le fait en utilisant le file SCRIPTING.FILESYSTEMOBJECT pour extraire le contenu d'une colonne IMAGE et l'écrire dans un file.

lire à travers les commentaires.

Essayez quelque chose comme ça, remplacez les "quelques" valeurs par les vôtres:

 declare @doc varbinary(max), @ObjectToken int select @doc = (select data from yourTable were someID = @idThatYouWant) set @FileName = '\someFolder\' + 'someFilename.doc' print 'Processing: ' + isnull(@FileName, 'null') exec sp_oacreate 'ADODB.Stream', @objecttoken output exec sp_oasetproperty @objecttoken, 'type', 1 exec sp_oamethod @objecttoken, 'open' exec sp_oamethod @objecttoken, 'write', null, @doc exec sp_oamethod @objecttoken, 'savetofile', null, @FileName, 2 exec sp_oamethod @objecttoken, 'close' exec sp_oadestroy @objecttoken 

Je pense que vous obtiendrez une exception IndexOutOfRangeException dans la ligne suivante de votre code:

  Dim resortingevedBytes As Long = reader.GetBytes(1, startIndex, buffer, 0, ChunkSize) 

parce que l'index du premier param est 0 et non 1

de toute façon je vous suggère d'utiliser une méthode comme celle proposée par Klark, qui est plus simple et plus lisible.