CARA: Menyalin gambar dari Database secara langsung ke kontrol PictureBox dengan Visual Basic.NET

Terjemahan Artikel Terjemahan Artikel
ID Artikel: 317670 - Melihat produk di mana artikel ini berlaku.
Perbesar semua | Perkecil semua

Pada Halaman ini

RINGKASAN

Artikel ini selangkah demi selangkah menjelaskan bagaimana untuk menyalin gambar disimpan dalam database langsung ke PictureBox kontrol pada formulir Windows tanpa perlu menyimpan gambar untuk file.

Di Microsoft Visual Basic 6.0, satu-satunya cara untuk menampilkan gambar dari database di PictureBox kontrol, tanpa langkah antara menyelamatkan ganda besar objek {GUMPALAN) data ke file, adalah untuk mengikat PictureBox untuk sumber data seperti ActiveX Data objek (ADO) Data kontrol atau Recordset objek. Ada no way (tanpa data mengikat) pemrograman memuat GUMPALAN ke kontrol tanpa menyimpan gambar ke file untuk digunakan oleh LoadPicture pernyataan.

Artikel ini menggunakan MemoryStream objek dari System.io kelas dasar untuk menyalin data gambar dari database langsung ke The PictureBox kontrol.

Persyaratan

Daftar berikut menguraikan fitur perangkat keras, perangkat lunak, jaringan infrastruktur, dan paket layanan yang akan Anda perlukan:
  • Microsoft Visual Studio.NET diinstal pada kompatibel Sistem operasi Microsoft Windows
  • Contoh tersedia Microsoft SQL Server atau tersedia Microsoft Access database untuk pengujian
Artikel ini mengasumsikan bahwa Anda sudah familiar dengan berikut topik:
  • Visual Basic.Aplikasi NET Windows Forms
  • Objek besar biner (GUMPALAN) penyimpanan dalam database
  • ADO.Mengakses data bersih

Sampel

  1. Membuat tabel SQL Server atau akses dengan berikut struktur:
    CREATE TABLE BLOBTest
    (
    BLOBID INT IDENTITY NOT NULL,
    BLOBData IMAGE NOT NULL
    )
    					
  2. Mulai Visual Studio.NET, dan kemudian membuat Visual baru Aplikasi Windows Forms dasar.
  3. Tarik PictureBox kontrol dan dua Tombol kontrol dari toolbox default Form1. Menetapkan Teks properti Button1 untuk File Database, dan kemudian menetapkan Teks properti Button2 untuk Database untuk PictureBox.
  4. Tambahkan berikut Impor pernyataan di atas kode Formulir modul:
    Imports System.Data
    Imports System.Data.SqlClient
    Imports System.IO
    Imports System.Drawing.Imaging
    					
  5. Tambah deklarasi berikut untuk koneksi database string di bawah ini Publik kelas Form1, dan kemudian memodifikasi rangkaian sambungan yang diperlukan untuk Anda lingkungan:
        Dim strCn As String = "Data Source=<server>;" & _
                "Initial Catalog=<database>;Integrated Security=SSPI"
    					
  6. Tambahkan kode berikut dalam Klik acara prosedur Button1 (File Database). Mengubah path file untuk file gambar sampel yang tersedia yang diperlukan. Kode ini membaca file gambar dari disk (dengan menggunakan FileStream objek) ke Byte array, dan kemudian memasukkan data ke dalam database dengan menggunakan parameterized Perintah objek.
            Dim cn As New SqlConnection(strCn)
            Dim cmd As New SqlCommand("INSERT INTO BLOBTest (BLOBData) " & _
                "VALUES (@BLOBData)", cn)
            Dim strBLOBFilePath As String = _
                "C:\Documents and Settings\All Users\Documents" & _
                "\My Pictures\Sample Pictures\winter.jpg"
            Dim fsBLOBFile As New FileStream(strBLOBFilePath, _
                FileMode.Open, FileAccess.Read)
            Dim bytBLOBData(fsBLOBFile.Length() - 1) As Byte
            fsBLOBFile.Read(bytBLOBData, 0, bytBLOBData.Length)
            fsBLOBFile.Close()
            Dim prm As New SqlParameter("@BLOBData", SqlDbType.VarBinary, _
                bytBLOBData.Length, ParameterDirection.Input, False, _
                0, 0, Nothing, DataRowVersion.Current, bytBLOBData)
            cmd.Parameters.Add(prm)
            cn.Open()
            cmd.ExecuteNonQuery()
            cn.Close()
    					
  7. Tambahkan kode berikut dalam Klik acara prosedur Button2 (Database untuk PictureBox). Kode ini mengambil baris dari BLOBTest tabel dalam database ke dalam DataSet, salinan yang paling baru-baru ini menambahkan gambar ke Byte array dan kemudian ke MemoryStream objek, dan kemudian beban MemoryStream ke Gambar properti PictureBox kontrol.
            Dim cn As New SqlConnection(strCn)
            Dim cmd As New SqlCommand("SELECT BLOBID, " & _
                "BLOBData FROM BLOBTest ORDER BY BLOBID", cn)
            Dim da As New SqlDataAdapter(cmd)
            Dim ds As New DataSet()
            da.Fill(ds, "BLOBTest")
            Dim c As Integer = ds.Tables("BLOBTest").Rows.Count
            If c > 0 Then
                Dim bytBLOBData() As Byte = _
                    ds.Tables("BLOBTest").Rows(c - 1)("BLOBData")
                Dim stmBLOBData As New MemoryStream(bytBLOBData)
                picBLOB.Image = Image.FromStream(stmBLOBData)
            End If
    					
  8. Menjalankan proyek.
  9. Klik File Database untuk me-load setidaknya satu contoh gambar ke dalam database.
  10. Klik Database untuk PictureBox untuk menampilkan gambar yang disimpan dalam PictureBox kontrol.
  11. Jika Anda ingin untuk dapat menyisipkan gambar dari PictureBox kontrol langsung ke dalam database, menambahkan ketiga Tombol kontrol, dan kemudian tambahkan kode berikut dalam yang Klik acara prosedur. Kode ini akan mengambil data gambar dari PictureBox kontrol ke MemoryStream objek, salinan MemoryStream ke Byte array, dan kemudian menyimpan Byte array ke database dengan menggunakan parameterized Perintah objek.
            Dim cn As New SqlConnection(strCn)
            Dim cmd As New SqlCommand("INSERT INTO BLOBTest (BLOBData) " & _
                "VALUES (@BLOBData)", cn)
            Dim ms As MemoryStream = New MemoryStream()
            picBLOB.Image.Save(ms, ImageFormat.Jpeg)
            Dim bytBLOBData(ms.Length - 1) As Byte
            ms.Position = 0
            ms.Read(bytBLOBData, 0, ms.Length)
            Dim prm As New SqlParameter("@BLOBData", SqlDbType.VarBinary, _
                bytBLOBData.Length, ParameterDirection.Input, False, _
                0, 0, Nothing, DataRowVersion.Current, bytBLOBData)
            cmd.Parameters.Add(prm)
            cn.Open()
            cmd.ExecuteNonQuery()
            cn.Close()
    					
  12. Menjalankan proyek. Klik Database untuk PictureBox untuk menampilkan gambar yang sebelumnya telah disimpan di PictureBox kontrol. Klik tombol baru ditambahkan untuk menyimpan gambar dari PictureBox ke database, dan kemudian klik Database untuk PictureBox untuk konfirmasi bahwa gambar yang disimpan dengan benar.

Pemecahan Masalah

  • Tes ini tidak akan bekerja dengan Foto kolom di Karyawan Tabel sampel Northwind database didistribusikan dengan Access dan SQL Server. Bitmap gambar yang disimpan di Foto kolom dibungkus dengan informasi header yang dibuat oleh Visual Basic 6.0 OLE Container kontrol.
  • Jika Anda perlu untuk menggunakan akses database untuk menguji kode ini, Anda harus membuat kolom dalam tabel akses sebagai jenis OLE objek, dan menggunakan System.data.OleDb namespace dengan Microsoft Jet 4.0 penyedia bukan System.data.SqlClient namespace.

REFERENSI

Untuk informasi tambahan tentang penggunaan BLOB data dengan Visual Basic.NET, klik nomor artikel di bawah ini untuk melihat artikel di dalam Basis Pengetahuan Microsoft:
308042 Bagaimana: Membaca dan menulis BLOB Data dengan menggunakan ADO.NET dengan Visual Basic.NET
316887 Bagaimana: Membaca dan menulis File ke dan dari kolom GUMPALAN dengan menggunakan ADO.NET dan Visual Basic.NET

Properti

ID Artikel: 317670 - Kajian Terakhir: 24 September 2011 - Revisi: 2.0
Berlaku bagi:
  • Microsoft ADO.NET 1.1
  • Microsoft Visual Basic .NET 2002 Standard Edition
  • Microsoft Visual Basic .NET 2003 Standard Edition
Kata kunci: 
kbdraw kbgdi kbhowtomaster kbio kbsqlclient kbsystemdata kbmt KB317670 KbMtid
Penerjemahan Mesin
PENTING: Artikel ini diterjemahkan menggunakan perangkat lunak mesin penerjemah Microsoft dan bukan oleh seorang penerjemah. Microsoft menawarkan artikel yang diterjemahkan oleh seorang penerjemah maupun artikel yang diterjemahkan menggunakan mesin sehingga Anda akan memiliki akses ke seluruh artikel baru yang diterbitkan di Pangkalan Pengetahuan (Knowledge Base) dalam bahasa yang Anda gunakan. Namun, artikel yang diterjemahkan menggunakan mesin tidak selalu sempurna. Artikel tersebut mungkin memiliki kesalahan kosa kata, sintaksis, atau tata bahasa, hampir sama seperti orang asing yang berbicara dalam bahasa Anda. Microsoft tidak bertanggung jawab terhadap akurasi, kesalahan atau kerusakan yang disebabkan karena kesalahan penerjemahan konten atau penggunaannya oleh para pelanggan. Microsoft juga sering memperbarui perangkat lunak mesin penerjemah.
Klik disini untuk melihat versi Inggris dari artikel ini:317670

Berikan Masukan

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com