我是VB新手。 NET,所以请耐心等待。在下面的代码中,我的主窗体中有一个图片框,我希望所选查询 profile_picture 显示在图片框中,但我不知道该函数应返回什么
Public Sub ShowPicture(ByVal username As String)
user = username
Dim dsSearch As DataSet
ModuleQuery.Showpic(username)
Dim dSearch As Byte() = DirectCast(dr("Photo"), Byte())
Dim ms As New MemoryStream(dsSearch)
prof_pic.Image = Image.FromStream(ms)
End Sub
这是一个包含所有 SELECT 查询的模块,因此不会困惑。 我想调用一个函数,但我不知道要返回什么以便我可以显示图像
Public Function Showpic(ByVal user As String)
Dim FunctionErrorState As Boolean = False
Dim InsertError As Boolean = False
Dim CloseError As Boolean = False
Dim dsData As New DataSet
Dim bite As Byte()
Try
openDB()
'MyADOConnection.Open()
Dim myQuery As String = "SELECT profile_picture FROM coa.register WHERE username = '" & user & "'"
Dim myCommand As New MySql.Data.MySqlClient.MySqlCommand(myQuery)
dr = myCommand.ExecuteReader
bite = DirectCast(dr("Photo"), Byte())
Catch ex As MySql.Data.MySqlClient.MySqlException
InsertError = True
End Try
Try
MyADOConnection.Close()
Catch exclose As MySql.Data.MySqlClient.MySqlException
CloseError = True
End Try
If InsertError Then
FunctionErrorState = True
End If
Return bite 'I just put something random here since I don't know what to retun
End Function
最佳答案
在我看来,图像是以字节数组的形式存储在数据库中的。您(我猜对了)使用 ShowPic
函数中的命令 bite = DirectCast(dr("Photo"), Byte())
从数据库读取此数组。字节数组只是内存中的一大块数据,您稍后可以使用 MemoryStream
进行查询。
因此,您的 ShowPic
函数(更像是 GetPic
函数;-)应该返回 Byte()
Public Function Showpic(ByVal user As String) As Byte()
您应该用 Nothing
初始化 bite
Dim bite As Byte() = Nothing
这样,如果发生错误,数组将什么都没有,您可以检查一下。
为了将包含原始图像数据的字节数组转换为图像,您可以正确使用 MemoryStream
和 Image.FromStream
方法。 .NET 中的 I/O 大部分与流一起工作。它们只是从某些来源持续提供数据的一种方式。在这种情况下,源只是内存,特别是从数据库获取的字节数组。
但是,您永远不会使用该字节数组。将 ShowPic
函数的结果分配给一个变量,以便使用它:
Public Sub ShowPicture(ByVal username As String)
user = username
Dim ImageData As Byte() = ModuleQuery.Showpic(username)
If ImageData IsNot Nothing Then
Using ms As New MemoryStream(ImageData)
prof_pic.Image = Image.FromStream(ms)
End Using
Else
'Your function returned nothing, so an error occured.
'This is a very crude way of error handling, since you never
'see the error in the first place, which makes debugging a
'nightmare. There are better ways, out of scope of this answer.
MessageBox.Show("No image retrieved due to an error :(")
End If
End Sub
这样,您就可以在 ShowPic
中从数据库中检索图像数据(再次将其重命名为 GetPic
或 GetImageData
或其他名称)并返回将其原始数据发送到 ShowPicture
方法,您可以在其中解码并显示它。
关于mysql - 使用函数显示图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30283820/