SQL Server从图像字段打开文件

时间:2012-04-25 16:01:55

标签: sql sql-server vb.net

我在“image”类型的SQL Server 2005数据库中有一个字段,其中包含文档,主要是pdfs。当我在数据库中查看字段时,看起来好像数据存储为十六进制字符串。我已广泛搜索并提出下面的VB.net函数将字段转换为实际文件,但它只输出一个包含十六进制字符字符串的文件,而不是该字段应该表示的文件。

这是字段数据的示例(我为了隐私目的而将其截断):

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 个答案:

答案 0 :(得分:0)

IMAGE字段不包含“十六进制字符串”。它们包含二进制数据,您可以使用SqlBytes.Stream将其作为二进制流读取。您可以使用Stream.CopyTo将流复制到所需的文件中。