2016-10-11 1 views
0

Ich habe diesen Code hier versucht, Bild aus der Datenbank in Bildbox einzufügen und anzuzeigen: stackoverflow.com/questions/5624760/store-picture-to-database-retrieve-from-db-into- pictureboxWie aktualisiere ich Bild in Mysql-Datenbank

und ja, es funktioniert, aber wenn ich ein Update mit der gleichen Syntax zu tun versucht, so einzufügen hätte es diesen Fehler:

enter image description here

dies ist der Einsatz Syntax i verwenden:

Dim FileSize As UInt32 
Dim mstream As New System.IO.MemoryStream() 
gambar.Image.Save(mstream, System.Drawing.Imaging.ImageFormat.Jpeg) 
Dim arrImage() As Byte = mstream.GetBuffer() 

FileSize = mstream.Length 

mstream.Close() 

call konek 
strSQL = "insert into tbmahasiswa VALUES ('" & _ 
        txtNIM.Text & "','" & _ 
        txtNama.Text & "','" & _ 
        Format(dtpTanggal.Value, "yyyy-MM-dd") & "','" & _ 
        txtAlamat.Text & "','" & _ 
        cboJurusan.Text & "',@gambar)" 
com = New MySql.Data.MySqlClient.MySqlCommand(strSQL, conn) 

With com 
    .Parameters.AddWithValue("@gambar", arrImage) 
    .ExecuteNonQuery() 
End With 

und dies der Code i Bild aus der Datenbank zu zeigen, verwenden Feld Bild:

Dim imgData As Byte() 

call konek 
strSQL = "select * from tbMahasiswa where NIM ='" & txtNIM.Text & "'" 
com = New MySql.Data.MySqlClient.MySqlCommand(strSQL, conn) 
Using rd = com.ExecuteReader 

    rd.Read() 
    If rd.HasRows Then 
      txtNama.Text = rd.Item(1) 
      dtpTanggal.Value = rd.Item(2) 
      txtAlamat.Text = rd.Item(3) 

      imgData = TryCast(rd.Item(5), Byte()) 

      If imgData IsNot Nothing Then 

       Using ms As New MemoryStream(imgData) 

        gambar.Image = CType(Image.FromStream(ms), Image) 

       End Using 
      End If 

     End If 

    End Using 

Beide Einfügen und Abrufen von Bild oben Code funktioniert! Und dann verwende ich diesen Code für Updates:

Dim FileSize As UInt32 
Dim mstream As New System.IO.MemoryStream() 
gambar.Image.Save(mstream, System.Drawing.Imaging.ImageFormat.Jpeg) 
Dim arrImage() As Byte = mstream.GetBuffer() 

FileSize = mstream.Length 

mstream.Close() 

call konek 
strSQL = "update tbmahasiswa set Nama ='" & txtNama.Text & _ 
        "', TglLahir ='" & Format(dtpTanggal.Value, "yyyy-MM-dd") & _ 
        "', Alamat ='" & txtAlamat.Text & _ 
        "', Jurusan ='" & cboJurusan.Text & _ 
        "', gambar =' @gambar" & _ 
        "' where NIM ='" & txtNIM.Text & "'" 
      com = New MySql.Data.MySqlClient.MySqlCommand(strSQL, conn) 

With com 
    .Parameters.AddWithValue("@gambar", arrImage) 
    .ExecuteNonQuery() 
End With 

und dann bekam ich die Fehler wie im Bild oben, alle anderen Daten außer dem Bild korrekt gespeichert, werden sie eine unbekannte Datei Blob 8 KB Größe.

ich bin immer noch Neuling bei einfügen, aktualisieren, Bild in VB löschen, bitte können Sie mir sagen, was ist falsch mit dem Update-Syntax-Code, ist es schon wahr, aber mir fehlt etwas? oder stimmt es überhaupt nicht mit der Syntax? bitte ich brauche Ihren Leitfaden hier ...

UPDATE: tatsächlich gibt es "Call Konek" über "STRSQL" im Code, "Konek" haben den Code für die Mysql-Verbindung zu öffnen, legte ich es in das separate Modul hier der vollständige Code in meinem Modul:

Module modKoneksi 

Public conn As New MySql.Data.MySqlClient.MySqlConnection 
Public rd As MySql.Data.MySqlClient.MySqlDataReader 
Public com As MySql.Data.MySqlClient.MySqlCommand 

Public strSQL As String 

Public Sub konek() 
    conn.Close() 
    strSQL = "server='localhost';user='root';pwd='';database='dbsekolah';" 
    Try 
     conn.ConnectionString = strSQL 
     conn.Open() 

    Catch ex As MySql.Data.MySqlClient.MySqlException 
     MsgBox(ex.Message) 
     End 
    End Try 
End Sub 
End Module 

Hoffnung das macht Sie leichter mein Problem

+0

Ähm, Ihr Code ist nichts von dem der Frage oder Antwort und ignoriert die in [diese Antwort] beschriebenen Probleme (http://stackoverflow.com/a/31370711/1070452) – Plutonix

+0

Sie haben auch einfache Anführungszeichen um den Parameter @ Gambar. Sie sollten besser alle Einfügungen und Aktualisierungen ändern, um Parameter zu verwenden, um die üblichen SQL-Injection-Angriffe zu vermeiden. Eine Datenzugriffsbibliothek wie Dapper kann dazu beitragen, dass der gesamte Kesselblechcode um die Konfigurationsparameter herum entfernt werden muss. –

+0

ich sehe, eigentlich weiß ich immer noch nicht links oder rechts mit diesem probleme. Wenn es für Sie nicht lästig ist, können Sie ein neues vb-Projekt zum Einfügen erstellen, aktualisieren und in der Picturebox abrufen und dann hochladen.Ich weiß, es dauert nur ein paar Minuten für dich. gut, wenn es zu mühsam ist, können Sie genauer erklären, wo und was ist falsch in dem Code, den ich verwende? danke –

Antwort

0

ich weiß, seine spät, aber das ist der Arbeits Code zu lösen für mich: die

zum Abrufen Aufzeichnung von Datenbanken e mit Bildern:

Call konek() 'Call the connection module' 
    strSQL = "select * from tbMahasiswa where ID ='" & txtID.Text & "'" 
    com = New MySql.Data.MySqlClient.MySqlCommand(strSQL, conn) 
    Using rd = com.ExecuteReader 

     rd.Read() 
     If rd.HasRows Then 
      txtNIM.Text = rd.Item(1) 
      txtNama.Text = rd.Item(2) 
      dtpTanggal.Value = rd.Item(3) 
      txtAlamat.Text = rd.Item(4) 


      imgData = TryCast(rd.Item(6), Byte()) 

      If imgData IsNot Nothing Then 


       Using ms As New MemoryStream(imgData) 

        gambar.Image = CType(Image.FromStream(ms), Image) 

       End Using 
      End If 
      cboJurusan.SelectedIndex = cboJurusan.FindStringExact(rd.Item(5)) 
     End If 

    End Using 

Für mit Bildern Datensatz Datenbank einfügen:

Call konek() 

strSQL = "Insert Into tbmahasiswa Values ('" & txtID.Text & _ 
    "','" & txtNIM.Text & _ 
    "','" & txtNama.Text & _ 
    "','" & Format(dtpTanggal.Value, "yyyy-MM-dd") & _ 
    "','" & txtAlamat.Text & _ 
    "','" & cboJurusan.Text & _ 
    "',@gambar)" 
com = New MySql.Data.MySqlClient.MySqlCommand(strSQL, conn) 

With com 
    If opdGambar.FileName = Nothing Then 'opdGambar is a PictureBox name' 
     .Parameters.Add(New MySql.Data.MySqlClient.MySqlParameter("@gambar", MySql.Data.MySqlClient.MySqlDbType.LongBlob)).Value = IO.File.ReadAllBytes("man-icon.png") 'Insert field gambar using an existing file in debug folder if file does not exist in PictureBox' 
    Else 
     .Parameters.Add(New MySql.Data.MySqlClient.MySqlParameter("@gambar", MySql.Data.MySqlClient.MySqlDbType.LongBlob)).Value = IO.File.ReadAllBytes(opdGambar.FileName) 'Insert field gambar using an existing file in PictureBox' 
    End If 

    com.ExecuteNonQuery() 
End With 

Für mit Bildern Datensatz zur Datenbank zu aktualisieren:

Call konek() 
Dim adapter As New MySql.Data.MySqlClient.MySqlDataAdapter("select gambar from tbmahasiswa where ID='" & txtID.Text & "'", conn) 

Dim dt As New DataTable("gambar") 
adapter.Fill(dt) 

strSQL = "update tbmahasiswa set NIM='" & txtNIM.Text & _ 
     "',Nama='" & txtNama.Text & _ 
     "',TglLahir='" & Format(dtpTanggal.Value, "yyyy-MM-dd") & _ 
     "',Alamat='" & txtAlamat.Text & _ 
     "',Jurusan='" & cboJurusan.Text & _ 
     "' ,[email protected] where id='" & txtID.Text & "'" 
com = New MySql.Data.MySqlClient.MySqlCommand(strSQL, conn) 

With com 

    If opdGambar.FileName = Nothing Then 
     Dim row As DataRow = dt.Rows(0) 
     Using ms As New IO.MemoryStream(CType(row(0), Byte())) 
      Dim img As Image = Image.FromStream(ms) 
      gambar.Image = img 

      .Parameters.Add(New MySql.Data.MySqlClient.MySqlParameter("@gambar", MySql.Data.MySqlClient.MySqlDbType.LongBlob)).Value = (CType(row(0), Byte())) 'field gambar will use the current existing file in database if PictureBox does not have a file' 

     End Using 
    Else 
     .Parameters.Add(New MySql.Data.MySqlClient.MySqlParameter("@gambar", MySql.Data.MySqlClient.MySqlDbType.LongBlob)).Value = IO.File.ReadAllBytes(opdGambar.FileName) 
    End If 

    com.ExecuteNonQuery() 

End With      

i für die Hoffnung Wer die andere Antwort ein wenig verwirrend findet (wie ich), wird diese Antwort finden hilfreich.