Проблема при сохранении изображения в базу данных из Picturebox. VB.Net 2008. Framework 3.5

У меня есть форма, содержащая список со списком имен изображений. Это связано к таблице базы данных. При нажатии на имя изображения оно показывает изображение и imagename в картинках и текстовых полях соответственно. Когда изображение не выбрано в списке, новая запись может быть вставлена ​​путем просмотра нового изображения в Picturebox от openfiledialog, записав имя изображения в текстовое поле и нажав кнопку ОК. Когда изображение уже выбрано, запись может быть обновляется нажатием той же кнопки ОК. Данные сохраняются в MSSQL Server. 2005. Соответствующие поля таблицы: Keycode int autono, логон nvarchar (50), изображение логотипа. Теперь проблема, когда я вставляю новые данные с изображением, все идет хорошо но всякий раз, когда я пытаюсь обновить существующие данные с изображением, он бросает исключение - «Произошла общая ошибка в GDI +». на следующей строке- 'pic.Image.Save (ms, pic.Image.RawFormat)'. Удивительно, когда я обновляю существующие данные без какого-либо изображения в окне рисунка без исключения генерируется. Я проверял это, и кажется, что проблема только в одной точке «Обновление изображения из картинки». Я почти закончил все, но застрял в этом конкретном моменте. Пожалуйста помоги. С уважением.

Мой код для вставки / обновления данных с помощью кнопки ОК и для заполнения его списком doubleclick:

Private ms As MemoryStream
Private arrImage() As Byte
Private conn As SqlConnection
Private cmd As SqlCommand

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    'Method to bind listbox.
    BindListBox(lst, "Select Keycode,LogoName from tbltest", "Logoname", "keycode")
        Tag = "Insert"
End Sub

Private Sub lst_DoubleClick(ByVal sender As Object, ByVal e As System.EventArgs) Handles lst.DoubleClick
        Dim dr As SqlDataReader

        dr = CreateReader("Select LogoName,logo from tblTest where keycode=" & lst.SelectedValue)
        If dr.Read Then
            txtLogoName.Text = vbNullString & dr("Logoname")
            If Not IsDBNull(dr("Logo")) Then
                arrImage = CType(dr("Logo"), Byte())
                ms = New MemoryStream(arrImage)
                pic.Image = Image.FromStream(ms)
                ms.Close()
            Else
                pic.Image = Nothing
                pic.Invalidate()
            End If
            Tag = "Update"
        End If
        dr.Close()
        closeconnection()
        arrImage = Nothing
        ms = Nothing
End Sub

Private Sub btnOk_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnOk.Click
        Dim com As SqlCommand
        Dim strSql As String

        If Tag = "Insert" Then
            strSql = "Insert into tbltest (logoname,logo) values ('" & Trim(txtLogoName.Text) & "',@Logo)"
        Else
            strSql = "Update tbltest set logoname='" & Trim(txtLogoName.Text) & "',Logo=@Logo Where keycode=" & lst.SelectedValue
        End If

        com = CreateCommand(strSql)
        com.Parameters.Add(New SqlParameter("@Logo", SqlDbType.Image))
        If Not pic.Image Is Nothing Then
            ms = New MemoryStream()
            pic.Image.Save(ms, pic.Image.RawFormat)
            arrImage = ms.GetBuffer
            ms.Close()
            com.Parameters("@Logo").Value = arrImage
        Else
            com.Parameters("@Logo").Value = DBNull.Value
        End If

        If com.ExecuteNonQuery = 1 Then
            closeconnection()
            BindListBox(lst, "Select Keycode,LogoName from tbltest", "Logoname", "keycode")
            pic.Image = Nothing
            pic.Invalidate()
            txtLogoName.Clear()
            Tag = "Insert"
        End If


        arrImage = Nothing
        ms = Nothing
        strSql = Nothing
End Sub

Private Sub btnBrowse_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnBrowse.Click
        With dlg
            .Filter = "All Files|*.*|Bitmap|*.bmp|GIF|*.gif|Icon|*.ico|JPEG|*.jpg|PNG|*.png"
            .FilterIndex = 5
        End With

        If dlg.ShowDialog() = DialogResult.OK Then pic.Image = Image.FromFile(dlg.FileName)
End Sub

Public Sub setconnection()
        Try
            conn = New SqlConnection("Data Source=MyServer;Initial Catalog=TestDB;User Id=sa;Password=;")
            conn.Open()
        Catch ex As Exception
            MsgBox(ex.Message)
        End Try
End Sub

Public Sub closeconnection()
        conn.Close()
End Sub

Public Function CreateCommand(ByVal query As String) As SqlCommand
        setconnection()
        Dim command As New SqlCommand(query, conn)
        Return command
End Function

Public Function CreateReader(ByVal query As String) As SqlDataReader
        Dim reader As SqlDataReader
        setconnection()
        cmd = CreateCommand(query)
        reader = cmd.ExecuteReader()
        Return reader
End Function
1
задан priyamtheone 20 August 2010 в 13:59
поделиться