Şu anda çevrimdışısınız; İnternet'in yeniden bağlanması bekleniyor

NASIL yapılır: bir resim doğrudan Visual C# ile PictureBox denetimi için bir veritabanından kopyalama

ÖNEMLİ: Bu makale, Microsoft Makine Çevirisi Düzenleme yazılımı tarafından tercüme edilmiş olup, yüksek olasılıkla profesyonel bir çevirmen yerine CTF teknolojisi kullanılarak, Microsoft Topluluğu tarafından düzenlenmiştir. Microsoft, Bilgi Bankamız içindeki tüm makaleleri kendi dilinizde okuyabilmeniz için size hem profesyonel çevirmenler tarafından tercüme edilen hem de makine tarafından tercüme edildikten sonra Topluluk tarafından kontrol edilen makaleler sunar. Bununla birlikte, makine tarafından tercüme edilen, hatta Topluluk tarafından kontrol edilen bir makale bile her zaman mükemmel dil kalitesinde olmayabilir. Makalede dilinizi konuşan yabancı birisinin yapabileceği türden sözcük, söz dizimi veya dilbilgisi hataları bulunabilir. Microsoft, içeriğin hatalı tercümesinin veya müşterilerimiz tarafından kullanımının doğurabileceği olası yanlış anlamalar, hatalar veya zararlardan sorumlu değildir. Öte yandan Microsoft, Makine Çevirisi Düzenleme işlemini geliştirmek amacıyla Makine Çevirisi Düzenleme yazılımını ve araçlarını sık sık güncelleştirmektedir.

Makalenin İngilizcesi aşağıdaki gibidir: 317701
Bu makalenin Microsoft Visual Basic .NET sürümü için bkz: 317670.

BU GÖREVDE

Özet
Bu adım adım makalede, bir dosyaya kaydetmek gerek kalmadan Windows Form PictureBox denetime doğrudan veritabanında depolanan bir resim kopyalamak nasıl açıklar.

Microsoft Visual Basic 6.0, resim veritabanından ikili büyük nesne kaydetme ara adım olmadan PictureBox denetiminde görüntülemek için tek yol {BLOB) verileri bir dosyaya olan PictureBox bir veri denetimi ActiveX Data Objects (ADO) veya Recordset gibi bir veri kaynağına bağlamak için. LoadPicture deyimi ile kullanılmak üzere bir dosyaya görüntüyü kaydetmeden bir BLOB denetime program aracılığıyla yüklemek için (veri bağlama) olmadan bir yolu yoktur.

Bu makalede, görüntü verilerini veritabanından PictureBox denetime doğrudan kopyalamak için System.IO temel sınıftan MemoryStream nesnesini kullanacağız.


Gereksinimleri

Aşağıdaki listede önerilen donanım, yazılım, ağ altyapısı ve gereken hizmet paketleri önerilmektedir:
  • Microsoft Visual Studio .NET uyumlu bir Microsoft Windows işletim sisteminde yüklü
  • Kullanılabilir Microsoft SQL Server veya test etmek için kullanılabilir bir Microsoft Access veritabanı örneği
Bu makalede şu konularda bilgi sahibi olduğunuz varsayılmaktadır:
  • Visual C# .NET Windows Forms uygulamaları
  • Bir büyük ikili nesne (BLOB) depolama veritabanlarında
  • ADO.NET veri erişimi

Örnek

  1. Aşağıdaki yapıda bir SQL Server veya Access tablo oluşturun:
    CREATE TABLE BLOBTest(BLOBID INT IDENTITY NOT NULL,BLOBData IMAGE NOT NULL)					
  2. Visual Studio .NET açın ve yeni Visual C# Windows Application projesi oluşturun.
  3. PictureBox bir ve iki Button denetimi Toolbox'tan varsayılan Form1 ekleyin. Veritabanı dosyasına ve Text özelliðine Button2 PictureBox içinveritabanına Button1'in Text özelliğini ayarlayın.
  4. Kod modülü formun üst kısmındaki kullanarak aşağıdaki ifadeleri ekleyin:
    using System.Data.SqlClient;using System.IO;using System.Drawing.Imaging;					
  5. Veritabanı bağlantı dizesi aşağıdaki bildirimi yalnızca içinde eklemek public class Form1: System.Windows.Forms.Form'dan sınıf bildiriminin ve bağlantı dizesi gerektiği şekilde ayarlayın:
        String strCn = "Data Source=localhost;integrated security=sspi;initial catalog=mydata";					
  6. Button1 Tıklat olay yordamını aşağıdaki kodu ekleyin (veritabanı dosyasına). Dosya yolu kullanılabilir örnek görüntü dosyasını gerektiği gibi ayarlayın. Bu kod, bayt dizisine ( FileStream nesnesi kullanarak) disk görüntü dosyasından okur ve sonra parametreleştirilmiş bir komut nesnesi kullanarak veri veritabanına ekler.
    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);}					
  7. Button2 Tıklat olay yordamını aşağıdaki kodu ekleyin (PictureBox veritabanına). Bu kod bir DataSetnesnesine veritabanındaki BLOBTest tablo satırları alır, en son eklenen görüntünün bir bayt dizisi ve sonra MemoryStream nesnesi içine kopyalar ve MemoryStreamPictureBox denetiminin Resim özelliğini yükler.
    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);}					
  8. Derlemek ve proje çalıştırmak için F5 tuşuna basın.
  9. En az bir örnek resmi veritabanına yüklemek için veritabanı dosyasına düğmesini tıklatın.
  10. Kaydedilen görüntüyü PictureBox denetiminde görüntülemek için veritabanına PictureBox düğmesini tıklatın.
  11. PictureBox denetiminden resmi doğrudan veritabanına eklemeye kullanabilmek istiyorsanız, üçüncü bir Button denetimi ekleyin ve onun Click olayı yordamına aşağıdaki kodu ekleyin. Bu kod MemoryStream nesnesine PictureBox denetimden resim verisi alır, MemoryStreambayt dizisine kopyalar ve ardından bayt dizisi kullanarak parametreleştirilmiş bir komut nesnesi veritabanına kaydeder.
    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);}					
  12. Projeyi çalıştırın. PictureBox veritabanınaPictureBox denetimde önceden kaydedilmiş bir resmi görüntülemek için düğmeyi tıklatın. PictureBox ' veritabanına kaydetmek için yeni eklenen düğmesini tıklatın. Sonra tekrar görüntü düzgün kaydedildiğini onaylamak için PictureBox veritabanına düğmesini tıklatın.

Tuzaklar

  • Örnek Northwind veritabanının Access ve SQL Server ile dağıtılmış Çalışanlar tablosundaki Fotoğraf sütunu bu test çalışmaz. Bitmap görüntülerini Fotoğraf sütunda depolanan Visual Basic 6.0 OLE kapsayıcı denetimi tarafından oluşturulan üstbilgi bilgileriyle sarılır.
  • Bu kodu test etmek için bir Access veritabanı kullanmanız gerekiyorsa, OLE nesnesitürü olarak Access tablosunda sütunu oluşturun ve System.Data.SqlClient ad yerine Microsoft Jet 4.0 sağlayıcısı ile System.Data.OleDb ad kullanmak gerekecektir.
Referanslar
BLOB verileri Visual C# .NET ile birlikte kullanma hakkında ek bilgi için Microsoft Bilgi Bankası'ndaki makaleleri görüntülemek üzere aşağıdaki makale numaralarını tıklatın:
309158 NASIL yapılır: Okumak ve BLOB verileri Visual C# .NET ile ADO.NET kullanarak yazma
317016 Bir dosya veya bir BLOB sütun için ADO.NET ve Visual C# .NET kullanarak yazmak ve okumak nasıl
BLOB

Uyarı: Bu makalenin çevirisi otomatik olarak yapılmıştır

Özellikler

Makale No: 317701 - Son İnceleme: 07/25/2015 16:27:00 - Düzeltme: 3.0

Microsoft ADO.NET 1.1, Microsoft Visual C# .NET 2002 Standard Edition, Microsoft Visual C# .NET 2003 Standard Edition

  • kbdatabinding kbhowtomaster kbmt KB317701 KbMttr
Geri bildirim