Как сохранить изображение PictureBox в SQL в VB.NET (форма Windows) - PullRequest
0 голосов
/ 02 февраля 2012

Мне нужно сохранить форму, в которой пользователь просматривает изображение и установить его в PictureBox. Но для другой кнопки мне нужно сохранить это изображение в SQL Server. У меня есть хранимая процедура с командой вставки (с типом изображения)

Изображение браузера с рабочего стола, код PictureBox : -

   Public Sub SelectImage()

        With OpenFileDialog1
            '.InitialDirectory = "C:\"
            .Filter = "All Files|*.*|Bitmaps|*.bmp|GIFs|*.gif|JPEGs|*.jpg"
            .FilterIndex = 4
        End With

        If OpenFileDialog1.ShowDialog() = DialogResult.OK Then
            PictureBox1.Image = Image.FromFile(OpenFileDialog1.FileName)
            PictureBox1.SizeMode = PictureBoxSizeMode.StretchImage
            PictureBox1.BorderStyle = BorderStyle.Fixed3D

        End If
    End Sub

Код кнопки сохранения

Public Sub Insert_Update_Personal()
        Dim UploadImage As Bitmap = PictureBox1.Image

        Dim ds As DataSet = New DataSet()
        Dim cmd As SqlCommand = New SqlCommand("sp_Insert_Update_Personal", con)
        con.Open()
        cmd.CommandType = CommandType.StoredProcedure

        cmd.Parameters.AddWithValue("@childrenage", TextBox10.Text)
        cmd.Parameters.AddWithValue("@picture", UploadImage)
        cmd.Parameters.AddWithValue("@hrcomments", TextBox5.Text)

        cmd.ExecuteNonQuery()
        con.Close()
        cmd.Dispose()
    End Sub

Но когда язапустите форму, которая выдаст мне ошибку «Не существует сопоставления между типом объекта System.Drawing.Bitmap и собственным типом известного управляемого поставщика».

1 Ответ

1 голос
/ 02 февраля 2012

попробуйте это: ( Измените MySqlConnection на SQLConnection, потому что я использую MySQL в моем примере )

    Public Shared Function ByteToImage(ByVal blob() As Byte) As Bitmap
        Dim mStream As New MemoryStream
        Dim pData() As Byte = DirectCast(blob, Byte())
        mStream.Write(pData, 0, Convert.ToInt32(pData.Length))
        Dim bm As Bitmap = New Bitmap(mStream, False)
        mStream.Dispose()
        Return bm
    End Function

затем используйте это так:

Private Function InsertImage(ByVal ImagePath As String, ByVal oIDNum As String) As Boolean
    Dim iPhoto() As Byte = jwImage.FileImageToByte(ImagePath)
    Dim xBool As Boolean = False
    Using xConn As New MySqlConnection(ConnectionClass.ConnectionString)
        Try
            Dim xComm As New MySqlCommand
            With xComm
                .CommandText = "InsertImage"
                .Connection = xConn
                .CommandType = CommandType.StoredProcedure

                .Parameters.AddWithValue("xID", oIDNum)
                .Parameters.AddWithValue("xImage", iPhoto)
            End With

            xConn.Open()
            xComm.ExecuteNonQuery()
            xComm.Dispose()
            xBool = True
        Catch ex As MySqlException
            MessageBox.Show(ex.Message, "MySQL Error: " & ex.Number, MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
            xBool = False
        End Try
    End Using

    Return xBool
End Function
...