2014-01-21 33 views
0

我有一个数据网格视图中,在更新按钮i写这样的代码:无法转换类型的对象“System.Byte []”中的窗口的应用程序类型“为System.Drawing.Image”

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,[email protected] where [email protected]", 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。图片'

+0

异常包含的回答你的问题,你已经创建图像类型的变量“dtimage”,应声明此作为一个字节数组。 – Ramashankar

回答

4

我不确定语法是否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可能不工作 - - 你可能需要使用更具体的东西。这是一个listing of them

+3

语法几乎就在那里。在VB.Net数组中使用'()'而不是'[]'。 – JaredPar

+0

@JaredPar:感谢编辑朋友! –

+0

这次我在这里得到错误adapter.UpdateCommand.ExecuteNonQuery()错误:没有从对象类型System.Drawing.Bitmap到已知托管提供程序本机类型的映射。 – user3106114

1

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 
+0

这次我在这行中得到错误= adapter.UpdateCommand.ExecuteNonQuery()错误:没有从对象类型System.Drawing.Bitmap到已知托管提供程序本机类型的映射 – user3106114

相关问题