2012-04-25 54 views
1

我在SQL Server 2005數據庫類型爲'image'的字段中包含文檔,主要是pdf。當我查看數據庫中的字段時,它看起來好像數據存儲爲十六進制字符串。我已經廣泛搜索了一下,並提出了下面的VB.net函數來將字段轉換爲實際文件,但它只輸出一個包含十六進制字符串的文件,而不是字段應該表示的文件。SQL Server從圖像字段打開文件

這是字段的數據樣本(我已經截斷它出於隱私目的):

0x1F8B0800000000000400EDBD07601C499625262F6DCA7B7F4AF 

而且我寫的字段轉換爲文檔的功能:

Private Sub SimpleButton1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles SimpleButton1.Click 

    sql = New MySqlClient.MySqlConnection(connectionString) 

    Dim cmd As New MySqlClient.MySqlCommand("SELECT docdata FROM temp.temp_docs WHERE docid = " + TextEdit1.Text, sql) 

    sql.Open() 

    Dim dr As MySqlClient.MySqlDataReader = cmd.ExecuteReader() 

    dr.Read() 

    Dim b(dr.GetBytes(0, 0, Nothing, 0, Integer.MaxValue) - 1) As Byte 

    dr.GetBytes(0, 0, b, 0, b.Length) 

    dr.Close() 

    sql.Close() 

    Dim DestFilePath As String = "C:\... \Desktop\" & String.Format("{0:hhmmss}", DateTime.Now) & ".pdf" 

    Dim fs As New System.IO.FileStream(DestFilePath, IO.FileMode.Create, IO.FileAccess.Write) 

    fs.Write(b, 0, b.Length) 

    fs.Close() 

End Sub 

任何人都可以發現我要去哪裏嗎?是否有可能直接從SQL服務器中的查詢打開文件?

+1

您不應該使用SQL ADO.NET提供程序而不是MySQL提供程序嗎? – 2012-04-25 17:42:50

+0

我們正在使用DTS包將數據傳輸到我們正在讀取數據的MySQL客戶端。我們已經確認數據轉換沒有問題,所以上面的函數讀取了MySQL中SQL Server中相同的數據。我可能應該提到這一點! – 2012-04-26 08:38:49

回答

0

圖像字段不包含'十六進制字符串'。它們包含使用SqlBytes.Stream作爲二進制流讀取的二進制數據。使用Stream.CopyTo將流複製到所需的文件中。