Vb.net 无法强制转换类型为';字节[]和#x27;输入';系统.绘图.图像';在windows应用程序中

Vb.net 无法强制转换类型为';字节[]和#x27;输入';系统.绘图.图像';在windows应用程序中,vb.net,winforms,datagridview,Vb.net,Winforms,Datagridview,我有一个数据网格视图,在更新按钮中我编写了如下代码: Dim cid As Integer Dim dtid As Integer Dim cmpname As String Dim dtname As String Dim dtPhone As String Dim dtEmail As String Dim dtimage As Image For i As Integer =

我有一个数据网格视图,在更新按钮中我编写了如下代码:

Dim cid As Integer
        Dim dtid As Integer
        Dim cmpname As String
        Dim dtname As String
        Dim dtPhone As String
        Dim dtEmail As String
        Dim dtimage As Image


        For i As Integer = 0 To gv.RowCount - 2
            ' Dim rv = DirectCast(bSource.Current, DataRowView)
            Dim rv = DirectCast(gv.Rows(i).DataBoundItem, DataRowView)
            cid = rv.Row.Field(Of Integer)("Cid")

            dtid = rv.Row.Field(Of Integer)("dtId")
            cmpname = rv.Row.Field(Of String)("CompanyName")
            dtname = rv.Row.Field(Of String)("Department")
            dtPhone = rv.Row.Field(Of String)("Phone")
            dtEmail = rv.Row.Field(Of String)("Email")
            dtimage = rv.Row.Field(Of Image)("empimage")

            adapter.UpdateCommand = New SqlCommand("UPDATE CompanyMaster_tbl SET CompanyName = @CompanyName", con.connect)
            adapter.UpdateCommand = New SqlCommand("update DepartmentMaster_tbl set dtName = @dtName,dtPhone = @dtPhone,dtEmail = @dtEmail,empimage=@dtimage  where dtId=@dtid", con.connect)
            adapter.UpdateCommand.Parameters.AddWithValue("@Cid", cid)

            adapter.UpdateCommand.Parameters.AddWithValue("@CompanyName", cmpname)
            adapter.UpdateCommand.Parameters.AddWithValue("@dtId", dtid)
            adapter.UpdateCommand.Parameters.AddWithValue("@dtName", dtname)
            adapter.UpdateCommand.Parameters.AddWithValue("@dtPhone", dtPhone)
            adapter.UpdateCommand.Parameters.AddWithValue("@dtEmail", dtEmail)
            adapter.UpdateCommand.Parameters.AddWithValue("@dtimage", dtimage)
            adapter.UpdateCommand.ExecuteNonQuery()
但我在这一行有错误
dtimage=rv.Row.Field(图像)(“empimage”):无法将“System.Byte[]”类型的对象强制转换为“System.Drawing.Image”

我不确定语法是否100%正确,所以我会处理这个问题,我是一名C#程序员,但这是您需要做的:

Using ms As New MemoryStream(Row.Field(Of Byte())("empimage"))
    dtimage = New Bitmap(ms)
End Using

要将相同的
位图
保存回数据库,您需要执行以下操作:

Using ms As New MemoryStream()
    bmp.Save(ms, ImageFormat.MemoryBmp)

    Dim bytes(ms.Length) As New Byte()
    ms.Read(bytes, 0, ms.Length)

    ' now save that Byte() to the field in the data table
End Using

注意:
MemoryBmp
可能不起作用——您可能需要使用更具体的方法。这是一个.

我不确定语法是否100%正确,所以我会继续努力,我是一名C#程序员,但这是您需要做的:

Using ms As New MemoryStream(Row.Field(Of Byte())("empimage"))
    dtimage = New Bitmap(ms)
End Using

要将相同的
位图
保存回数据库,您需要执行以下操作:

Using ms As New MemoryStream()
    bmp.Save(ms, ImageFormat.MemoryBmp)

    Dim bytes(ms.Length) As New Byte()
    ms.Read(bytes, 0, ms.Length)

    ' now save that Byte() to the field in the data table
End Using

注意:
MemoryBmp
可能不起作用——您可能需要使用更具体的方法。这是一个。

empimage包含一个字节数组,您需要从中加载映像:

dtimage = ImageFromBytes(rv.Row.Field(Of Byte())("empimage"))

...


Function ImageFromBytes(ByVal bytes As Byte()) As Image
    Using ms As New MemoryStream(bytes)
        return Image.FromStream(ms)
    End Using
End Function

empimage
包含一个字节数组,您需要从中加载映像:

dtimage = ImageFromBytes(rv.Row.Field(Of Byte())("empimage"))

...


Function ImageFromBytes(ByVal bytes As Byte()) As Image
    Using ms As New MemoryStream(bytes)
        return Image.FromStream(ms)
    End Using
End Function

异常包含您问题的答案,您已经创建了Image类型的变量“dtimage”,您应该将其声明为字节数组。异常包含您问题的答案,您已经创建了Image类型的变量“dtimage”,您应该将其声明为字节数组。语法就在这里。在VB.Net数组中,使用
()
而不是
[]
。这次我在这里遇到了错误adapter.UpdateCommand.ExecuteOnQuery()错误:对象类型System.Drawing.Bitmap与已知的托管提供程序本机类型之间不存在映射。@user3106114,首先,这是一个完全不同的问题。现在你说的是拯救它。但是要保存它,你需要使用
save
方法将
Bitmap
转换回
MemoryStream
,然后使用该方法从流中获取字节。先生,我给出了这样的代码:Dim md As New MemoryStream()dtimage.save(md,System.Drawing.ImageFormat.Gif)Dim imagedata As Byte()=md.ToArray()sir,,在这行代码中:Dim bytes As New Byte(ms.Length)显示错误,type Byte没有构造函数syntax几乎在那里。在VB.Net数组中,使用
()
而不是
[]
。这次我在这里遇到了错误adapter.UpdateCommand.ExecuteOnQuery()错误:对象类型System.Drawing.Bitmap与已知的托管提供程序本机类型之间不存在映射。@user3106114,首先,这是一个完全不同的问题。现在你说的是拯救它。但是要保存它,你需要使用
save
方法将
Bitmap
转换回
MemoryStream
,然后使用该方法从流中获取字节。先生,我给出了这样的代码:Dim md As New MemoryStream()dtimage.save(md,System.Drawing.ImageFormat.Gif)Dim imagedata As Byte()=md.ToArray()先生,在此行的代码中:Dim bytes As New Byte(ms.Length)显示错误,Byte类型没有构造函数这次我在此行中遇到错误=adapter.UpdateCommand.ExecuteNonQuery()错误:不存在从对象类型System.Drawing.Bitmap到已知托管提供程序本机类型的映射这次我在thise line=adapter.UpdateCommand.ExecuteOnQuery()中遇到错误错误:不存在从对象类型System.Drawing.Bitmap到已知托管提供程序本机类型的映射