在过去的两天里,我一直困惑于一个无法识别的错误。我承认我不是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
我也承认我对byte
和byte()
类型有点困惑,我相信我几乎就在那里。
答案 0 :(得分:0)
所以contentx
是数据库中的一个字符串,但是你想要它作为一个字节数组?只需使用:
dbbyte = System.Encoding.Default.GetBytes(dt.Rows(0)("contentx"))
现在应该可以了。
也许你应该考虑将pdf存储为VARBINARY(MAX)
。