Bu adım adım makalede, bir dosyaya kaydetmek gerek kalmadan Windows Form PictureBox denetime doğrudan veritabanında depolanan resim kopyalama açıklamaktadır.
Microsoft Visual Basic 6. 0'ın, büyük ikili nesne kaydetmenin bir ara adım olmadan PictureBox denetimindeki bir veritabanından bir resim görüntülemek için tek yol, {BLOB) bir dosyaya PictureBox ActiveX Data Objects (ADO) veri denetimi veya Recordset gibi bir veri kaynağına bağlamak için veridir. Programsal olarak kullanılacak bir dosyaya resim LoadPicture beyannamenin kaydetmeden bir BLOB denetime yüklenemedi (veri bağlama) olmadan bir yolu yoktur.
Bu makalede, System.ıo temel sınıf MemoryStream nesneden resim verileri veritabanından PictureBox denetime kopyalamak için çaba göstereceğiz.
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
)
Visual Studio. NET'i açın ve bir yeni Visual C# Windows uygulaması projesi oluşturun.
Form1 varsayılan araç kutusundan, bir PictureBox ve iki Düğme denetimi ekleyin. Metin özelliği Button1, veritabanı dosyasına BUTTON2 PictureBox veritabanına için <a1>Text</a1> özelliğini ayarlayın.
Aşağıdaki ifadeleri kullanarak kod modülü formun üstündeki Ekle:
using System.Data.SqlClient;
using System.IO;
using System.Drawing.Imaging;
Veritabanı bağlantı dizesi aşağıdaki bildirimi yalnızca içinde ekleme Genel sınıf Form1: System.Windows.Forms.Form bildirimi sınıfının ve bağlantı dizesi gerektiği şekilde ayarlayın:
Button1 Tıklat olay yordamını aşağıdaki kodu ekleyin (veritabanı dosyası). Gerektiği gibi kullanılabilir örnek görüntü dosyası için dosya yolunu ayarlama. Bu kod, bir bayt dizisi (bir FileStream nesnesi kullanarak) bir disk görüntü dosyasından okur ve parametreli bir Command 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);}
BUTTON2 Tıklat olay yordamını aşağıdaki kodu ekleyin (PictureBox veritabanına). Bu kod satırları bir DataSet içinde veritabanındaki <a1>BLOBTest</a1> tablosundan alır, en son eklenen kopya bir bayt dizisi ve sonra bir MemoryStream nesneyi ve sonra yükleri MemoryStreamPictureBox denetimin Resim özelliği görüntü.
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);}
Derlemek ve proje çalıştırmak için F5 tuşuna basın.
En az bir örnek resim veritabanına yüklemek için veritabanı dosyasına düğmesini tıklatın.
Kaydedilen görüntü PictureBox Denetimde görüntülenecek PictureBox veritabanına düğmesini tıklatın.
PictureBox denetimden resim doğrudan veritabanına eklemek istediğiniz, üçüncü Düğme denetimi ekleyin ve Tıklat olay yordamında aşağıdaki kodu ekleyin. Bu kod, görüntü verileri PictureBox denetimden bir MemoryStream nesnesine alır, MemoryStreambaytlık bir dizi içine kopyalar ve ardından bayt dizisinin parametreli bir Command nesnesi kullanarak 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);}
Projeyi çalıştırın. PictureBox denetim içinde önceden kaydedilmiş bir resmi görüntülemek için veritabanı PictureBox düğmesini tıklatın. Veritabanına PictureBox kaydetmek için yeni eklenen düğmesini tıklatın. Sonra yeniden görüntü doğru olarak kaydedilmiş onaylamak için PictureBox veritabanına düğmesini tıklatın.
Bu sınama, Access ve SQL Server ile birlikte dağıtılan örnek Northwind veritabanı <a1>Çalışanlar</a1> tablosunda Fotoğraf sütun ile çalışmayacak. Bit eşlem resimler Fotoğraf sütunda depolanan, Visual Basic 6.0 OLE kapsayıcı denetimi tarafından oluşturulan üstbilgi bilgileri alınmış.
Bu kod sınamak için Access veritabanını kullanmak isterseniz, sütun Access tabloya OLE nesnesi türünde oluşturun ve System.Data.OLEDB ad System.Data.SqlClient ad yerine Microsoft Jet 4.0 sağlayıcısı ile gerekecektir.
BLOB verileri Visual C# .NET ile kullanma hakkında ek bilgi için Microsoft Knowledge Base'deki makaleleri görüntülemek üzere aşağıdaki makale numaralarını tıklatın:
309158
(http://support.microsoft.com/kb/309158/
)
NASıL YAPıLıR: Okuma ve Visual C# .NET ile ADO.NET kullanarak BLOB veri yazma
317016
(http://support.microsoft.com/kb/317016/
)
Nasıl okuyup bir dosya veya bir BLOB sütun için ADO.NET ve Visual C#. NET'i kullanarak
ÖNEMLİ: Bu makale, bir kişi tarafından çevrilmek yerine, Microsoft makine-çevirisi yazılımı ile çevrilmiştir. Microsoft size hem kişiler tarafından çevrilmiş, hem de makine-çevrisi ile çevrilmiş makaleler sunar. Böylelikle, bilgi bankamızdaki tüm makalelere, kendi dilinizde ulaşmış olursunuz. Bununla birlikte, makine tarafından çevrilmiş makaleler mükemmel değildir. Bir yabancının sizin dilinizde konuşurken yapabileceği hatalar gibi, makale; kelime dağarcığı, söz dizim kuralları veya dil bilgisi açısından yanlışlar içerebilir. Microsoft, içeriğin yanlış çevrimi veya onun müşteri tarafından kullanımından doğan; kusur, hata veya zarardan sorumlu değildir. Microsoft ayrıca makine çevirisi yazılımını sıkça güncellemektedir.
Makalenin İngilizcesi aşağıdaki gibidir:317701
(http://support.microsoft.com/kb/317701/en-us/
)
Bu makaleyi kullanmak için ne kadar kişisel çaba harcadınız?
Çok az
Az
Orta
Fazla
Çok fazla
Bu bilgiyi geliştirmemiz için nedenleri ve bu konuda neler yapabileceğimizi paylaşın
Teşekkürler! Görüşleriniz, destek içeriğimizi geliştirmemize yardımcı olmak için kullanılmaktadır. Diğer yardım seçenekleri için, lütfen Yardım ve Destek Giriş Sayfasını ziyaret edin.