2016-10-11 15 views
0

私はここにこのコードを挿入し、画像をデータベースから画像ボックスに表示しようとしました:stackoverflow.com/questions/5624760/store-picture-to-database-retrieve-from-db-into-どのようにmysqlデータベースの画像を更新する

:これは私が使用して挿入構文です

enter image description here

:ピクチャ

とええ、それが働いて、私は同じ構文を使用して更新を行うことを試みたときにそれを挿入するとされるが、このエラーを得ました

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 

と、この私は、データベースから画像ボックスに画像を表示するために使用するコード:

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 

上記の両方を挿入し、取得画像のコードが動作しています! 、その後、私は更新のために、このコードを使用します。

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 

をして、私は上の写真では、他のすべてのデータが正常に絵を除いて保存されているようなエラーを持って、それはいくつかの未知のファイルブロブ8キロバイトの大きさになります。

私はVBでの挿入、更新、削除の写真ではまだ初心者ですが、更新構文のコードで何が間違っているのか教えてください。それは既に当てはまりますが、何か不足していますか?それとも文法に完全に間違っていますか?

更新: 実際にコード "STONEQL"の上に "call konek"があり、 "konek"にはmysql接続を開くためのコードがあります。別のモジュールに入れます私のモジュールでは、ここに完全なコード:

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 

これは、私はその後半を知っているが、これは私のための作業コードであるあなたは簡単に私の問題

+0

あなたのコードは、質問や回答のようなものではなく、[この回答](http://stackoverflow.com/a/31370711/1070452)に記載されている問題は無視されます。 – Plutonix

+0

パラメータの前後に一重引用符@ガンバ。通常のSQLインジェクション攻撃を避けるために、パラメータを使用するようにすべての挿入と更新を変更する方がよい場合があります。 Dapperのようなデータアクセスライブラリは、パラメータの設定に関するすべてのボイラープレートコードの必要性を取り除くのに役立ちます。 –

+0

私は実際には、私はまだこの問題で左または右を知らないと思う。面倒でなければ、新しいvbプロジェクトを作成して挿入し、更新し、それをピクチャボックスに取得してアップロードすることができます。私はそれがちょうどあなたのために数分かかることを知っています。あまりにも面倒であれば、私が使っているコードのどこで何が間違っているのかをもっと詳しく説明できますか?ありがとうございました –

答えて

0

を解決することができます希望:

取得するためのデータベースからの記録写真付きE:

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 

写真でデータベースにレコードを挿入する場合:

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 

写真でデータベースにレコードを更新するために:私はそれらを期待

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      

誰か他の答えが(私のような)ちょっと混乱しているのを見つけたら、この答えを見つけるでしょう役に立った

関連する問題