Tips SistemThis article applies to a different operating system than the one you are using. Article content that may not be relevant to you is disabled.
Artikel ini selangkah demi selangkah menjelaskan bagaimana untuk menyalin gambar yang disimpan dalam database langsung ke PictureBox kontrol pada formulir Windows tanpa perlu menyimpan foto ke sebuah file.
Di Microsoft Visual Basic 6.0, satu-satunya cara untuk menampilkan gambar dari database di PictureBox kontrol, tanpa langkah antara menyelamatkan biner objek besar {GUMPALAN) data ke file, adalah untuk mengikat PictureBox untuk sumber data seperti objek Data ActiveX (ADO) Data Control atau Recordset. Tidak ada cara (tanpa data binding) untuk pemrograman memuat GUMPALAN ke kontrol tanpa menyimpan gambar ke file untuk digunakan oleh pernyataan LoadPicture.
Dalam artikel ini, kita akan menggunakan MemoryStream objek dari System.io dasar kelas untuk menyalin data gambar dari database langsung ke PictureBox kontrol.
Membuat tabel SQL Server atau akses dengan struktur berikut:
CREATE TABLE BLOBTest
(
BLOBID INT IDENTITY NOT NULL,
BLOBData IMAGE NOT NULL
)
Membuka Visual Studio.NET dan menciptakan Visual C# Windows aplikasi proyek baru.
Tambahkan PictureBox dan dua Tombol kontrol ke default Form1 dari toolbox. Menetapkan Teks properti Button1 untuk File Database dan Teks properti Button2 untuk Database untuk PictureBox.
Masukkan berikut ini menggunakan pernyataan di atas kode Formulir modul:
using System.Data.SqlClient;
using System.IO;
using System.Drawing.Imaging;
Tambah deklarasi berikut untuk string koneksi database hanya dalam public class Form1: System.Windows.Forms.Form kelas Deklarasi dan menyesuaikan rangkaian sambungan yang diperlukan:
Masukkan kode berikut dalam prosedur acara klik Button1)File Database). Menyesuaikan path file untuk file gambar sampel tersedia jika diperlukan. Kode ini membaca file gambar dari disk (menggunakan FileStream objek) ke Byte array, dan kemudian memasukkan data ke dalam database dengan menggunakan parameterized Perintah objek.
try
{
SqlConnection cn = new SqlConnection(strCn);
SqlCommand cmd = new SqlCommand("INSERT INTO BLOBTest (BLOBData) VALUES (@BLOBData)", cn);
String strBLOBFilePath = @"C:\blue hills.jpg";//Modify this path as needed.
//Read jpg into file stream, and from there into Byte array.
FileStream fsBLOBFile = new FileStream(strBLOBFilePath,FileMode.Open, FileAccess.Read);
Byte[] bytBLOBData = new Byte[fsBLOBFile.Length];
fsBLOBFile.Read(bytBLOBData, 0, bytBLOBData.Length);
fsBLOBFile.Close();
//Create parameter for insert command and add to SqlCommand object.
SqlParameter prm = new SqlParameter("@BLOBData", SqlDbType.VarBinary, bytBLOBData.Length, ParameterDirection.Input, false,
0, 0, null, DataRowVersion.Current, bytBLOBData);
cmd.Parameters.Add(prm);
//Open connection, execute query, and close connection.
cn.Open();
cmd.ExecuteNonQuery();
cn.Close();
}catch(Exception ex)
{MessageBox.Show(ex.Message);}
Masukkan kode berikut dalam prosedur acara klik 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.
try
{
SqlConnection cn = new SqlConnection(strCn);
cn.Open();
//Retrieve BLOB from database into DataSet.
SqlCommand cmd = new SqlCommand("SELECT BLOBID, BLOBData FROM BLOBTest ORDER BY BLOBID", cn);
SqlDataAdapter da = new SqlDataAdapter(cmd);
DataSet ds = new DataSet();
da.Fill(ds, "BLOBTest");
int c = ds.Tables["BLOBTest"].Rows.Count;
if(c>0)
{ //BLOB is read into Byte array, then used to construct MemoryStream,
//then passed to PictureBox.
Byte[] byteBLOBData = new Byte[0];
byteBLOBData = (Byte[])(ds.Tables["BLOBTest"].Rows[c - 1]["BLOBData"]);
MemoryStream stmBLOBData = new MemoryStream(byteBLOBData);
pictureBox1.Image= Image.FromStream(stmBLOBData);
}
cn.Close();
}
catch(Exception ex)
{MessageBox.Show(ex.Message);}
Tekan F5 untuk mengkompilasi dan menjalankan proyek.
Klik File Database tombol untuk memuat gambar sampel yang satu ke dalam database.
Klik Database untuk PictureBox tombol untuk menampilkan gambar yang disimpan di PictureBox kontrol.
Jika Anda ingin untuk dapat menyisipkan gambar dari PictureBox kontrol langsung ke dalam database, menambahkan ketiga Tombol kontrol dan masukkan kode berikut dalam prosedur acara klik. Kode ini akan mengambil data gambar dari PictureBox kontrol ke MemoryStream objek, salinan MemoryStream ke Byte array, dan kemudian menyimpan Byte array ke database menggunakan parameterized Perintah objek.
try
{
SqlConnection cn = new SqlConnection(strCn);
SqlCommand cmd = new SqlCommand("INSERT INTO BLOBTest (BLOBData) VALUES (@BLOBData)", cn);
//Save image from PictureBox into MemoryStream object.
MemoryStream ms = new MemoryStream();
pictureBox1.Image.Save(ms, ImageFormat.Jpeg);
//Read from MemoryStream into Byte array.
Byte[] bytBLOBData = new Byte[ms.Length];
ms.Position = 0;
ms.Read(bytBLOBData, 0, Convert.ToInt32(ms.Length));
//Create parameter for insert statement that contains image.
SqlParameter prm = new SqlParameter("@BLOBData", SqlDbType.VarBinary, bytBLOBData.Length, ParameterDirection.Input, false,
0, 0,null, DataRowVersion.Current, bytBLOBData);
cmd.Parameters.Add(prm);
cn.Open();
cmd.ExecuteNonQuery();
cn.Close();
}catch(Exception ex)
{MessageBox.Show(ex.Message);}
Menjalankan proyek. Klik Database untuk PictureBox tombol untuk menampilkan gambar yang sebelumnya telah disimpan di PictureBox kontrol. Klik tombol baru ditambahkan untuk menyimpan gambar dari PictureBox ke dalam database. Kemudian klik Database untuk PictureBox tombol lagi untuk mengkonfirmasi bahwa gambar disimpan dengan benar.
Tes ini tidak akan bekerja dengan Foto kolom di Karyawan Tabel sampel Northwind database didistribusikan dengan Access dan SQL Server. Gambar bitmap disimpan dalam Foto kolom dibungkus dengan informasi header yang dibuat oleh kontrol Visual Basic 6.0 OLE wadah.
Jika Anda perlu untuk menggunakan akses database untuk menguji kode ini, Anda akan perlu untuk membuat kolom dalam tabel akses sebagai jenis OLE objek, dan menggunakan System.data.OleDb namespace dengan Microsoft Jet 4.0 penyedia di tempat System.data.SqlClient namespace.
Untuk informasi tambahan tentang penggunaan BLOB data dengan Visual C#.NET, klik nomor artikel di bawah ini untuk melihat artikel di dalam Basis Pengetahuan Microsoft:
309158
(http://support.microsoft.com/kb/309158/
)
Bagaimana: Membaca dan menulis BLOB data dengan menggunakan ADO.NET dengan Visual C#.NET
317016
(http://support.microsoft.com/kb/317016/
)
Bagaimana untuk membaca dan menulis file ke atau dari kolom GUMPALAN dengan menggunakan ADO.NET dan Visual C#.NET
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:317701
(http://support.microsoft.com/kb/317701/en-us/
)
Seberapa besar usaha yang anda keluarkan dalam menggunakan artikel ini?
Sangat kecil
Kecil
Menengah
Besar
Sangat besar
Apa yang dapat kami lakukan untuk meningkatkan informasi ini?
Untuk melindungi privasi Anda, jangan menyertakan informasi kontak dalam umpan balik Anda.
Terima kasih! Umpan balik Anda akan digunakan untuk membantu meningkatkan konten dukungan kami. Untuk opsi-opsi bantuan lebih lanjut, kunjungi Halaman Muka Bantuan dan Dukungan.