簡體   English   中英

無法在Windows應用程序中將類型為“ System.Byte []”的對象轉換為類型為“ System.Drawing.Image”的對象

[英]Unable to cast object of type 'System.Byte[]' to type 'System.Drawing.Image' in windows application

我有一個數據網格視圖,在更新按鈕中,我編寫了如下代碼:

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(Of Image)(“ empimage”)無法將類型為'System.Byte []'的對象轉換為類型為'System.Drawing.Image'

我不確定語法是否100%正確,所以我將繼續處理,我是一名C#程序員,但這是您需要做的:

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

要將同Bitmap保存回數據庫,您需要執行以下操作:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM