Bagaimana menampilkan gambar dari Database dalam bentuk Windows PictureBox dengan menggunakan Visual Basic.NET

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

Pada Halaman ini

RINGKASAN

Artikel ini selangkah demi selangkah menjelaskan cara untuk menampilkan gambar yang disimpan dalam database di PictureBox kontrol pada Windows formulir.

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 data objek Data ActiveX (ADO) kontrol atau Recordset objek. Tanpa data binding, Anda tidak dapat pemrograman memuat GUMPALAN di kontrol tanpa menyimpan gambar ke file untuk LoadPicture pernyataan untuk menggunakan.

Contoh dalam artikel ini menggunakan Byte array dan MemoryStream objek dari System.io kelas dasar untuk menyalin data gambar dari database secara langsung dari ADO.NET DataSet atau Hexadecimal keberatan PictureBox kontrol.

Persyaratan

Daftar berikut menguraikan fitur perangkat keras, perangkat lunak, jaringan infrastruktur, dan paket layanan yang diperlukan:
  • Microsoft Visual Studio.NET diinstal pada kompatibel Sistem operasi Microsoft Windows
  • Contoh tersedia dari 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
  • ADO.Mengakses data bersih
  • Objek besar biner (GUMPALAN) penyimpanan dalam database

Menciptakan Visual Basic.NET sampel

  1. Membuat tabel SQL Server atau akses tabel dengan struktur berikut:
    CREATE TABLE BLOBTest
    (
    BLOBID INT IDENTITY NOT NULL,
    BLOBData IMAGE NOT NULL
    )
    					
  2. Ikuti langkah berikut untuk membuat baru Visual Basic Windows Formulir aplikasi:
    1. Mulai Visual Studio.NET.
    2. Pada Berkas menu, titik Baru, lalu klik Project.
    3. Dalam Proyek baru kotak dialog, klik Proyek-proyek Visual Basic di bawah Jenis proyek, lalu klik Aplikasi Windows di bawah Pola acu.
  3. Tarik PictureBox kontrol dan dua Tombol kontrol dari toolbox untuk membentuk default, Form1. Perubahan Nama properti PictureBox untuk picBlob. 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 Form1 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, dan kemudian mengubah path file untuk file gambar sampel tersedia yang diperlukan:
            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()
    						
    Kode ini menggunakan FileStream objek untuk membaca file gambar dari disk Byte array dan kemudian menggunakan parameterized Perintah objek untuk memasukkan data dalam database.
  7. Tambahkan kode berikut dalam Klik acara prosedur Button2:
            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
    						
    Kode ini mengambil baris dari BLOBTest tabel dalam database ke dalam DataSet objek, salinan gambar yang paling baru-baru ini ditambahkan ke Byte array dan kemudian ke MemoryStream objek, dan kemudian beban MemoryStream ke Gambar properti PictureBox kontrol.
  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 Anda disimpan di PictureBox kontrol.
  11. Untuk mengambil gambar di Hexadecimal objek bukan DataSet objek, memodifikasi kode dalam Klik acara prosedur Button2 sebagai berikut:
            Dim cn As New SqlConnection(strCn)
            Dim cmd As New SqlCommand("SELECT BLOBID, " & _
                "BLOBData FROM BLOBTest ORDER BY BLOBID", cn)
            Dim dr As SqlDataReader
            cn.Open()
            dr = cmd.ExecuteReader(CommandBehavior.CloseConnection)
            If dr.Read Then
                Dim bytBLOBData(dr.GetBytes(1, 0, Nothing, 0, Integer.MaxValue) - 1) As Byte
                dr.GetBytes(1, 0, bytBLOBData, 0, bytBLOBData.Length)
                Dim stmBLOBData As New MemoryStream(bytBLOBData)
                picBLOB.Image = Image.FromStream(stmBLOBData)
            End If
            dr.Close()
    					
  12. Untuk menyisipkan gambar dari PictureBox kontrol langsung ke dalam database, menambahkan ketiga Tombol kontrol)Button3) untuk membentuk Anda. Menetapkan Teks properti Button3 untuk PictureBox ke Database, dan kemudian tambahkan Berikut kode di Klik acara prosedur Button3:
            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()
    						
    Kode ini akan mengambil data gambar dari PictureBox kontrol di MemoryStream objek, salinan MemoryStream ke Byte array, dan kemudian menggunakan parameterized Perintah objek untuk menyimpan Byte array ke database.
  13. Menjalankan proyek. Klik Database untuk PictureBox untuk menampilkan gambar yang Anda sebelumnya disimpan dalam PictureBox kontrol.
  14. Klik PictureBox ke Database 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 bekerja dengan foto kolom di Karyawan Tabel sampel Northwind database yang disertakan dengan Access dan SQL Server. Bitmap gambar yang disimpan di kolom foto yang dibungkus dengan header informasi yang Visual Basic 6.0 OLE Wadah kontrol menciptakan.
  • Untuk menggunakan akses database untuk menguji kode ini, Anda harus membuat kolom dalam tabel akses sebagai jenis OLE objek kemudian gunakan System.data.OleDb namespace dengan Microsoft Jet 4.0 penyedia bukan System.data.SqlClient namespace.
  • Anda mengkonsumsi banyak memori overhead jika Anda mengambil semua gambar dari meja ke Anda DataSet. Untuk mengkonsumsi kurang di atas kepalamu, meninggalkan gambar dalam database Anda, dan mengambil mereka salah satu pada satu waktu saat Anda bergerak melalui Anda DataSet. Untuk melakukannya, mengeksekusi query parameterized untuk mengambil gambar yang Anda inginkan ke dalam Hexadecimal, dan kemudian load gambar dari Hexadecimal ke PictureBox.

REFERENSI

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

Properti

ID Artikel: 321900 - Kajian Terakhir: 26 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: 
kbhowtomaster kbsqlclient kbsystemdata kbmt KB321900 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:321900

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