mysql - 使用函数显示图像

标签 mysql vb.net function

我是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

这样,如果发生错误,数组将什么都没有,您可以检查一下。

为了将包含原始图像数据的字节数组转换为图像,您可以正确使用 MemoryStreamImage.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 中从数据库中检索图像数据(再次将其重命名为 GetPicGetImageData 或其他名称)并返回将其原始数据发送到 ShowPicture 方法,您可以在其中解码并显示它。

关于mysql - 使用函数显示图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30283820/

相关文章:

php - IP2LOCATION - SQL 查询与二进制文件?

mysql - 加入id可能不存在的多个表

mysql - 多个JOIN之间的关系

Javascript循环创建函数并使用收到的基于PHP查询的id附加值

c - '->' 标记之前的预期主表达式

MySQL 服务器连接无法通过使用 DBI 的 Perl 脚本工作,但也可以通过命令行和 GUI 工作

javascript - asp.net 中撇号的编码字符串

vb.net - 从另一个对象类型创建一个对象

vb.net - LINQ 选择语法 VB.NET

类与函数