2011-05-06 20 views
7

मैं है जो एक मेज के साथ इस डेटाबेस है निम्नलिखित लेकिन मैं decypher करने के लिए इसेभंडारण माइक्रोसॉफ्ट वर्ड 97 एसक्यूएल सर्वर कॉलम में दस्तावेजों

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

क्षेत्र एक में संग्रहीत एक शब्द दस्तावेज़ को रोकने के लिए लगता है कोई रास्ता नहीं है एसक्यूएल सर्वर IMAGE कॉलम

क्या कोई इस पाठ को एक पठनीय प्रारूप में निकालने के पहले या किसी तरीके से आया है?

अब तक मैंने फ़ाइल निकालने के लिए PHP का उपयोग करने की कोशिश की है और इसे एक शब्द दस्तावेज़ में लिखना है लेकिन बहुत भाग्य नहीं है।

अद्यतन: अब मैं विजुअल स्टूडियो एक्सप्रेस है और इस डेटा निकालने और एक शब्द भी दस्तावेज़ को बचाने के लिए

UPDATE2 एक तरह से करना चाहते हैं: यह है कि मैं क्या 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 
है
+0

आप शायद सिर्फ फ़ाइल सिस्टम में बाइट्स 'डेटा' में निहित संग्रहीत कर सकती है और फिर उस फ़ाइल को एमएस वर्ड के साथ खोलें। –

+0

कूल - एसक्यूएल सर्वर से इस डेटा को कैसे निकाला जाएगा? चूंकि एसक्यूएल मैनेजमेंट क्वेरी परिणाम विंडो – Rob

+3

में स्ट्रिंग सीम कम होने के लिए हाँ, एसएसएमएस हमेशा अधिकतम तक छोटा हो जाएगा। लंबाई - आपको SQL सर्वर के भीतर से इसे पकड़ने के लिए कुछ कोड का उपयोग करने की आवश्यकता होगी। यह [अन्य SO प्रश्न] देखें (http://stackoverflow.com/questions/2818557/are-there-any-utilities-to-extract-binary-data-from-sql-server) एक समान विषय पर - शायद वह ' आपको मदद मिलेगी –

उत्तर

4

मैं बाहर की SharePoint एक समय पहले blobs डेटा खींचने के लिए एक VBS पटकथा लिखी, यहां इसके बारे में एक जेनेरिक वर्जन है:

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 
+0

मैंने उपर्युक्त कोशिश की और मुझे शब्द में एक कनवर्टर त्रुटि मिल रही है, फिर निम्नलिखित पाठ - ÿÿÿÿ दस्तावेज़ वर्ड। डॉक्यूमेंट 8 वर्ड। डॉक्यूमेंट 8 æ ÐÏ à¡ ± á> þÿ - ऐसा लगता है कि आउटपुट गलत है – Rob

+0

मैंने इसे एक शब्द के साथ परीक्षण किया 2007 दस्तावेज़ आज सुबह एक शेयरपॉइंट 2007 डेटाबेस में संग्रहीत है और यह ठीक काम करने लग रहा था। – Dave

0

इस धागे को देखो।

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

पुरुष एक छवि स्तंभ से सामग्री निकालने और यह एक फ़ाइल पर लिखने में SCRIPTING.FILESYSTEMOBJECT का उपयोग कर यह करता है।

टिप्पणियों के माध्यम से पढ़ें।

2

सी # कोड:

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

यही तर्क होना चाहिए। आप जानते हैं कि किसी भी भाषा में कुछ लिखें। यह PHP में या जो भी आप उपयोग कर रहे हैं में मुश्किल नहीं होना चाहिए। मुझे लगता है कि आप अपने कोड की निम्न पंक्ति में एक IndexOutOfRangeException मिल जाएगा

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 
+0

ऊपर अपडेट 2 देखें यह वह कोड है जिसे मैंने सोफर फटकारा है और मुझे सीमाओं से बाहर सूचकांक मिल रहा है! कोई विचार? – Rob

0

इस तरह की कोशिश कुछ, अपने खुद के साथ "कुछ" मूल्यों की जगह पहले पैरामीटर का सूचकांक 0

वैसे भी मेरा सुझाव है कि आप एक क्लार्क द्वारा सुझाए गए एक विधि का उपयोग करें, जो सरल और अधिक पठनीय है।

+0

यह काम करता है और फ़ाइल लिखती है लेकिन यह शब्द में एक कनवर्टर त्रुटि प्राप्त करने में शब्द को खोलता है, तो निम्न पाठ - ÿÿÿÿ दस्तावेज़ वर्ड। डॉक्यूमेंट 8 वर्ड। डॉक्यूमेंट 8 æ ÐÏ à¡ ± á> þÿ - ऐसा लगता है कि आउटपुट गलत है – Rob

0

:

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

क्योंकि

संबंधित मुद्दे