无法从 SQL Server 检索图像 Vb.net



我有一个数据库,它的字段名称如下,并且在同一表中,它还有一个字段名称"photo",并且数据类型为Varbinary(max)

我在存储图像方面没有问题,但是当我尝试显示数据库中的图像文件时,它没有显示任何内容,并且出现错误"无法将类型'System.String'的对象转换为类型'System.Byte[]'。

Sub fillDataFields()
    Dim mid As String
    Dim last As String
    Dim first As String
    con.Open()
    comm.CommandText = "Select last_name,middle_name,first_name,course, section, address, birthday, picture from Users where user_id like '%" & frmUsers.ListView1.SelectedItems(0).Text & "%'"
    comm.Connection = con
    Dim imageData As Byte() = DirectCast(comm.ExecuteScalar(), Byte())
    If Not imageData Is Nothing Then
        Using ms As New MemoryStream(imageData, 0, imageData.Length)
            ms.Write(imageData, 0, imageData.Length)
            PictureBox1.BackgroundImage = Image.FromStream(ms, True)
        End Using
    End If
    dr = comm.ExecuteReader
    While (dr.Read())
        last = (dr("last_name"))
        mid = (dr("middle_name"))
        first = (dr("first_name"))
        txtCourse.Text = (dr("course"))
        txtSection.Text = (dr("section"))
        richtxtAddress.Text = (dr("address"))
        txtBirthday.Text = (dr("birthday"))
        txtName.Text = last + ", " + first + " " + mid
    End While
    con.Close()
    dr.Close()
    comm.Dispose()
End Sub

您尝试使用 ExecuteScalar 提取图像数据,但此方法返回第一行的第一列,并且在查询中,此数据是字段Last_Name的内容。这是错误的原因

说了,我想你应该把你的逻辑应用到字段的内容上 图片

Sub fillDataFields()
    Dim mid As String
    Dim last As String
    Dim first As String
    con.Open()
    comm.CommandText = "Select last_name,middle_name,first_name,course, section, address, " & _
                       "birthday, picture from Users where user_id like @uid"
    comm.Connection = con
    comm.Parameters.AddWithValue("@uid", "%" & frmUsers.ListView1.SelectedItems(0).Text & "%")
    dr = comm.ExecuteReader
    While (dr.Read())
        last = (dr("last_name"))
        mid = (dr("middle_name"))
        first = (dr("first_name"))
        txtCourse.Text = (dr("course"))
        txtSection.Text = (dr("section"))
        richtxtAddress.Text = (dr("address"))
        txtBirthday.Text = (dr("birthday"))
        txtName.Text = last + ", " + first + " " + mid
        Dim imageData As Byte() = DirectCast(dr("picture"), Byte())
        If Not imageData Is Nothing Then
            Using ms As New MemoryStream(imageData, 0, imageData.Length)
               ms.Write(imageData, 0, imageData.Length)
               PictureBox1.BackgroundImage = Image.FromStream(ms, True)
           End Using
        End If
    End While
    con.Close()
    dr.Close()
    comm.Dispose()
End Sub

请注意,我还删除了字符串连接,因为它是安全 rìsk(Sql 注入)。您还应该修改此代码以应用 using 语句所需的逻辑

最新更新