将VARCHAR(MAX)转换为文件(pdf)

时间:2014-04-04 08:41:41

标签: vb.net

在过去的两天里,我一直困惑于一个无法识别的错误。我承认我不是Visual Basic 2010上经验丰富的用户。我一直在搜索这个和其他网站上试图理解这个错误的原因,但有时候我有点困惑。

我在一个名为contentx VARCHAR(MAX)的字段上有一个上传pdf的数据库,需要将其转换回pdf文件。当我运行程序时,它给我以下错误:

无法将System.String类型的对象投放到System.Byte[]类型 - 关于dbbyte = dt.Rows(0)("contentx")

的行

这是该计划:

Private Sub btnSave_Click(sender As System.Object, e As System.EventArgs) Handles btnSave.Click

    Dim FS As FileStream = Nothing
    Dim dbbyte As Byte()

    Connect.Close()
    Connect.Open()
    cmd = Connect.CreateCommand()
    cmd.CommandText = "SELECT Filename, extension, contentx FROM tbldocument where seq=1"
    'reader = cmd.ExecuteReader()
    'reader.Close()
    Dim dt As New DataTable()
    Dim da As New OleDbDataAdapter(cmd)
    da.Fill(dt)
    Connect.Close()

    If dt.Rows.Count > 0 Then
        'Get a stored PDF bytes
        dbbyte = dt.Rows(0)("contentx")
        'System.Text.Encoding.Unicode.GetBytes(dt.Rows[0]("contentx").ToString ());
        'store file Temporarily 
        Dim filepath As String = "c:\temp.pdf"
        'Assign File path create file
        FS = New FileStream(filepath, System.IO.FileMode.Create)
        'Write bytes to create file
        FS.Write(dbbyte, 0, dbbyte.Length)
        'Close FileStream instance
        FS.Close()
        ' Open file after write 
        'Create instance for process class
        Dim Proc As New Process()
        'assign file path for process
        Proc.StartInfo.FileName = filepath
        Proc.Start()
    End If

我也承认我对bytebyte()类型有点困惑,我相信我几乎就在那里。

1 个答案:

答案 0 :(得分:0)

所以contentx是数据库中的一个字符串,但是你想要它作为一个字节数组?只需使用:

dbbyte  = System.Encoding.Default.GetBytes(dt.Rows(0)("contentx"))

现在应该可以了。

也许你应该考虑将pdf存储为VARBINARY(MAX)