Search code examples
mysqlinsertpicturebox

Inserting images in mysql database with a longblob data type


Somebody check my code for inserting image into the database.I know there's some error but can't figure it out.When i run the code it worked but when i click the done button it always says NullReferenceException Here's What I've got

Imports MySql.Data.MySqlClient
Imports System.IO

Public Class adminreg

Dim con As MySqlConnection
Dim cmd As MySqlCommand
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    Dim reader As MySqlDataReader
    Dim mstream As New System.IO.MemoryStream
    PictureBox1.Image.Save(mstream, System.Drawing.Imaging.ImageFormat.Jpeg)
    Dim arrImage() As Byte = mstream.GetBuffer()
    mstream.Close()

    con = New MySqlConnection
    con.ConnectionString = "server=localhost;userid=root;password=1234;database=dat"


    Try
        con.Open()
        Dim query As String

        query = "insert into dat.login (idlogin,user,password,name,position,ownpic) values ('" & id.Text & "','" & usertxt.Text & "','" & passtxt.Text & "','" & nmetxt.Text & "','" & postxt.Text & "',@ownpic)"
        cmd.Parameters.AddWithValue("@ownpic", arrImage)

        cmd = New MySqlCommand(query, con)
        reader = cmd.ExecuteReader

        MessageBox.Show("Data Saved")

        con.Close()
    Catch ex As MySqlException
        MessageBox.Show(ex.Message)
    Finally
        con.Dispose()
    End Try

End Sub

Private Sub adminreg_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

End Sub

Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
    OpenFileDialog1.Filter = "imahe lang (*.jpg, *.bmp, *.png) | *.jpg; *.bmp; *.png| all files (*.*) | *.*"
    If OpenFileDialog1.ShowDialog <> Windows.Forms.DialogResult.Cancel Then
        PictureBox1.Image = Image.FromFile(OpenFileDialog1.FileName)

    End If
End Sub

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
    Login.Show()
    Me.Hide()
End Sub
End Class

Any Suggestion is highly appreciated Thank you...Just a beginner in VB.net


Solution

  • Private Sub pbStudentImage_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles pbStudentImage.Click, txtStudentImage.Enter, txtStudentImage.Click Try Dim fileOpener As OpenFileDialog = New OpenFileDialog() fileOpener.Filter = "Image files | *.jpg"

          If fileOpener.ShowDialog() = Windows.Forms.DialogResult.OK Then
               pbStudentImage.Image = Image.FromFile(fileOpener.FileName)
               txtStudentImage.Text = fileOpener.FileName
          End If
     Catch ex As Exception
          MsgBox(ex.ToString())
     End Try
    

    End Sub

    Private Sub btnSaveImage_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSaveImage.Click Dim con As MySqlConnection = New MySqlConnection(ConString) Dim cmd As MySqlCommand Dim fs As FileStream Dim br As BinaryReader

     Try
          If txtFirstName.Text.Length > 0 And txtStudentImage.Text.Length > 0 Then
               Dim FileName As String = txtStudentImage.Text
               Dim ImageData() As Byte
    
               fs = New FileStream(FileName, FileMode.Open, FileAccess.Read)
               br = New BinaryReader(fs)
               ImageData = br.ReadBytes(CType(fs.Length, Integer))
               br.Close()
               fs.Close()
    
               Dim CmdString As String = "INSERT INTO Students(FirstName, LastName, Image, Address) VALUES(@FirstName, @LastName, @Image, @Address)"
               cmd = New MySqlCommand(CmdString, con)
    
               cmd.Parameters.Add("@FirstName", MySqlDbType.VarChar, 45)
               cmd.Parameters.Add("@LastName", MySqlDbType.VarChar, 45)
               cmd.Parameters.Add(";@Image", MySqlDbType.Blob)
               cmd.Parameters.Add("@Address", MySqlDbType.VarChar, 100)
    
               cmd.Parameters("@FirstName").Value = txtFirstName.Text
               cmd.Parameters("@LastName").Value = txtLastName.Text
               cmd.Parameters("@Image").Value = ImageData
               cmd.Parameters("@Address").Value = txtAddress.Text
               con.Open()
               Dim RowsAffected As Integer = cmd.ExecuteNonQuery()
               If (RowsAffected > 0) Then
                    MsgBox("Image saved successfully!")
               End If
               con.Close()
          Else
               MsgBox("Incomplete data!", MsgBoxStyle.Critical, "")
          End If
    
     Catch ex As Exception
          MsgBox(ex.ToString())
     Finally
          If con.State = ConnectionState.Open Then
               con.Close()
          End If
     End Try
    

    End Sub

    Private Sub pbStudentImage_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles pbStudentImage.Click, txtStudentImage.Enter, txtStudentImage.Click Try Dim fileOpener As OpenFileDialog = New OpenFileDialog() fileOpener.Filter = "Image files | *.jpg"

      If fileOpener.ShowDialog() = Windows.Forms.DialogResult.OK Then
           pbStudentImage.Image = Image.FromFile(fileOpener.FileName)
           txtStudentImage.Text = fileOpener.FileName
      End If
    

    Catch ex As Exception MsgBox(ex.ToString()) End Try

    End Sub

    Private Sub pbStudentImage_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles pbStudentImage.Click, txtStudentImage.Enter, txtStudentImage.Click Try Dim fileOpener As OpenFileDialog = New OpenFileDialog() fileOpener.Filter = "Image files | *.jpg"

      If fileOpener.ShowDialog() = Windows.Forms.DialogResult.OK Then
           pbStudentImage.Image = Image.FromFile(fileOpener.FileName)
           txtStudentImage.Text = fileOpener.FileName
      End If
    

    Catch ex As Exception MsgBox(ex.ToString()) End Try

    End Sub

    Private Sub btnSaveImage_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSaveImage.Click Dim con As MySqlConnection = New MySqlConnection(ConString) Dim cmd As MySqlCommand Dim fs As FileStream Dim br As BinaryReader