.Net ailesinde veritabanına herhangi bir dosya veya resim kaydetmek çok kolay bir işlemdir. Bu yazımda size, “Visual C#.Net veya VisualBasic.Net üzerinde veritabanına resim nasıl kayıt edilir ve bu resim tekrardan nasıl çekilir” problemini en kolay yoldan çözmeyi anlatacağım.
Öncelikle bu örneği yapabilmek için, bir veritabanı ve bu veritabanına ait bir tane tablo oluşturuyorum.
- Veritabanımın adı ResimArsivi, tablomun adı ise Resimler.
- Resimler tablosunda id ve veri adlı iki tane sütun ekliyorum.
- Id sütunum için int veri tipini olarak seçiyorum.
- veri adlı sütunum için varbinary(MAX) veritipini seçiyorum. Bu şekilde verilerimi binary şekilde kayıt edebileceğim.
- tablomun identity sütununu ID olarak belirliyorum
Buraya kadarki bölüm veritabanı tasarımıydı. Şimdi kod kısmında bu işlemleri aşama aşama bir dosyayı binary şekline dönüştürmeyi görelim.
- Bu işlemi yapmamız için kullanabileceğimiz bir sınıfımız mevcut. Bu sınıf System.IO içindeki MemoryStream sınıfıdır. Bu sınıf bellek üzerinde verileri ikilik sistemde saklamamıza yardımcı olacak.
- Daha sonra Image sınıfını kullanarak yeni bir değişken oluşturuyorum. Bu değişkenin içine, veritabanına yüklemek istediğim resmi atıyorum.
- Image sınıfını kullanarak oluşturduğum değişkenimin içinde SAVE diye bir fonksiyon yer almaktadır. Bu fonksiyon sayesinde MemoryStream olarak tanımladığım değişkenimin içini doldurmuş olacağım. Şimdi bu karışık gibi görünen adımları kodla gösterelim.
// Öncelikle MemoryStream Sınıfını kullanarak, değişken oluşturuyoruz. // Ardından Image sınıfından bir değişken oluşturuyorum. System.IO.MemoryStream msResim1 = new System.IO.MemoryStream(); Image img = Image.FromFile(oFDResim.FileName); img.Save(msResim1, System.Drawing.Imaging.ImageFormat.Bmp);
- img değişkenimin Save fonksiyonu benden, birinci parametre olarak MemoryStream tarzından bir tür, ikinci parametre olarak da bir resim formatı belirtmemi istiyor.
- Bu işlemden sonra resim msResim1 adlı değişkenimin içinde bellek üzerinde işlenmiş oluyor.
- Daha sonra parametre içinde bu veriyi kullanabiliyoruz.
// Parametre olarak içeriği aktarıyorum.
myParameter = new SqlParameter("@veri", msResim1.ToArray());
// SqlCommand nesneme parametrelerin neler olduğunu gösteriyorum.
myCommand.Parameters.Add(myParameter);
Yani kodumuzun son hali aşağıdaki gibidir.
// Öncelikle MemoryStream Sınıfını kullanarak, değişken oluşturuyoruz.
// Ardından Image sınıfından bir değişken oluşturuyorum.
System.IO.MemoryStream msResim1 = new System.IO.MemoryStream();
Image img = Image.FromFile(oFDResim.FileName);
img.Save(msResim1, System.Drawing.Imaging.ImageFormat.Bmp);
// Parametre olarak içeriği aktarıyorum.
myParameter = new SqlParameter("@veri", msResim1.ToArray());
// SqlCommand nesneme parametrelerin neler olduğunu gösteriyorum.
myCommand.Parameters.Add(myParameter);
try
{
myCommand.Connection.Open();
myCommand.ExecuteNonQuery();
MessageBox.Show("Kayıt Başarıyla Gerçekleşti");
}
catch (SqlException ex)
{
MessageBox.Show(ex.Message);
}
finally
{
myCommand.Connection.Close();
}
- Kayıt okumak bundan daha kolay bir işlem. DataReader üzerinden gelen veriyi byte dizisine casting edip, bu değeri byte değişkene aktarıyoruz.
- Daha sonra MemoryStream adlı bir değişken oluşturup, kurucu parametresi olarak bu byte dizini veriyoruz. Yani elimizde DataReader ile okumuş olduğumuz sütunun MemoryStream‘deki değeri bulunuyor.
- Image sınıfının FromStream adlı fonksiyonundan yararlanarak, bu veriyi herhangi bir Image sınıfından oluşmuş resim değişkeninde kullanabiliyoruz. Bu aşamadan sonra ister PictureBox üzerinde gösterim yapın isterseniz disk üzerine kayıt edip üzerinde işlem yapın.
myCommand= new SqlCommand("Select veri From Resimler Order by id desc",myConnection);
myCommand.Connection.Open();
myReader = myCommand.ExecuteReader();
if (myReader.Read())
{
byte[] myPicByte = (byte[])myReader[0];
System.IO.MemoryStream msResim1 = new System.IO.MemoryStream(myPicByte);
Image img = Image.FromStream(msResim1);
picResim.Image = img;
}
myCommand.Connection.Close();
Ayrıca aşağıda VisualStudio 2010‘da hazırlamış olduğum örnek projeye göz atabilirsiniz.
Tags: C#, Csharp, FromStream Kullanımı, Kayıt Okuma, MemoryStream Kullanımı, Resim Çekmek, Resim Kaydetme, Resim Okuma, Veritabanı Kayıt, Vİsual C#



Cok tesekkur ediyorum
cok yardımci oldunuz:) ellerinize saglik……..
@secilus; yardımcı olabildiysem ne mutlu bana. İyi çalışmalar.
örnek baya bi güzel ancak fotografla beraber diğer verileri okuturken oku butonunun neresine kodu yazacağımı bulamadım yardımcı olursanız sevinirim.
wala pek anlamadım o kodları nerde yazacam ben lütfen yardımcı olur musnuz?