Jump to content

Mssql Veritabanına Resim Gömmek


wmismail

Recommended Posts

MSSQL VERİTABANINA RESİM GÖMMEK

Bu çalışmamda MSSQL veritabanı içerisine image formda Binary olarak Resim Dosyalarının nasıl gömüleceğini göstereceyim.makaleme başlamadan önce resim dosyalarının veritabanında neden yolunun değilde bizzat neden kendisini tuttuğumuzu anlatmaya çalışacağım

Öncelikle veritabanı üzerinde resim adındaki bir alana varchar tipinde bir alan tanımlayarak ve proje içerisindeki resimleride bir klasor içerisinde tutar ve resimlere ait yol bilgisini veritabanındaki bu varchar alanda tutabilirdik ancak şöle bir problem karşımıza çıkabilirdi.

1-eğer proje dosyası içerisinde bulunan resmin klasorunun path’i değiştiğinde projemiz hata verecektir.

2-eğer veritabanımıza eklenen resimler güvenlik açısından gizlilik arzediyorsa böle bir durumda resimleri herkesin kolayca açabileceği bir klasor içerisinde bulundurmak doğru olmayacaktır.

*İşte bu bahsetmiş olduğum temel iki sebeb den dolayı resim dosyalarının veritabanına gömülmesi sayesinde çözüm elde edilmiş olur.Şimdi projemizi hazırlamaya başlayalım.

1-MSSQL enterprise manager’ı açıyorum ve orda Test adında bir veritabanı oluşturuyorum

Images adındaki tablomuzu da oluşturuyoruz ve içerisine Stream adında bir alan ekliyoruz.tipinide image olarak ayarlıyoruz

d1.JPG

2-VS.net de C#.net Projesi Açıyoruz Burada 2 Form ekliyoruz ilk formu aşağıdaki şekilde iki buton ve bir adet DATAGRID ekliyoruz.

d2.JPG

3-Kullanacağımız veritabanına baglanmak için projemize

using System.Data.SqlClient;// eklememiz gerekiyor.

4-Veritabanına Baglantıyı Sağlamak İçin

protected static string ConnectionString//bağlantı stringi geri döner.

{

get

{

return "Integrated Security=SSPI;Initial Catalog=Test;Data Source=localhost;";

}

}

protected static SqlConnection Connection //veritabanına baglanmayı saglar

{

get

{

return new SqlConnection(ConnectionString);

}

}

5-Gridview’i doldurmak için aşağıdaki fonksiyonu oluşturdum

protected DataTable TABLOM;

protected CurrencyManager cm;

protected void Grid_doldur()

{

SqlConnection con = Connection;

con.Open();

try

{

TABLOM = new DataTable();

SqlCommand cmd = new SqlCommand("select * from Images",con);

SqlDataAdapter adapter = new SqlDataAdapter(cmd);

adapter.Fill(_dataSource);

Grid1.DataSource = TABLOM;//Grid dolduruluyor

cm = (CurrencyManager)BindingContext[TABLOM];

}

finally

{

con.Close();

}

}

6-Form üzerinde OpenFileDialog compenet’i ekleyelim ve Ekle Butonuna Çift Tıklayalım

private void EkleButton_Click(object sender, System.EventArgs e)

{

if (DialogResult.Cancel == OpenFileDialog1.ShowDialog())

{

return;

}

try

{

byte[] resimdizisi = BitmapDizi(OpenFileDialog1.FileName);

/*burada bitmapdizi fonksiyonu sayesinde openfiledialog ileokunan resim dosyası resimdizisi adlı dizi içerisine byte byte gönderilir. */

veritabanınagonder(resimdizisi);/*okunan resim artık resimdizi’si içerisinde binary formdadır.veritabanına gonder fonksiyonu sayesinde bu veri binary olarak veritabanına gonderilir*/

Grid_doldur();

/*son olarak grid uzerinde eklenilenveriyi anında gormemizi saglarız*/

}

catch(Exception ex)

{

MessageBox.Show(ex.Message,APP_TITLE,MessageBoxButtons.OK,MessageBoxIcon.Error);

}

}

7-BitmapDizi fonksiyonunu oluşturalım

protected static byte[] BitmapDizi(string dosyaadi)

{

using(Bitmap image = new Bitmap(dosyaadi))

{

MemoryStream stream = new MemoryStream();

image.Save(stream, System.Drawing.Imaging.ImageFormat.Bmp);

return stream.ToArray();

/*geriye return olarak dizi bir degisken doneriz artık resmimiz binary bir veridir.*/

}

}

8-veritabanınagonder Fonksiyonunu oluşturuyoruz

protected static void veritabanınagonder(byte[] icerik)

{

SqlConnection con = Connection;

con.Open();

try

{

SqlCommand insert = new SqlCommand("insert into Images ([stream]) values (@image)",con);

SqlParameter imageParameter =

insert.Parameters.Add("@image", SqlDbType.Binary);

imageParameter.Value = icerik;

imageParameter.Size = icerik.Length;

insert.ExecuteNonQuery();

}

finally

{

con.Close();

}

}

9-Yukarıdaki İşlemlerden sonra veritabanımıza resmimizi binary olarak gömmüş oluruz.şimdi veritabanı üzerinde bulunan binary formdaki bir resmi nasıl geri resim olarak göstereceğimize bakacağız.

Projemize eklemiş olduğumuz 2. formu resmi göstermek amacıyla kullancağız.ve üzerine bir adet pictureBox koyacağız.

Form1 uzerindeki goster butonuna çift tıklayalım

private void goster_Click(object sender, System.EventArgs e)

{

if (cm == null)

{

return;

}

if(cm.Current.GetType() != typeof(DataRowView))

{

return;

}

try

{

/*DataGrid uzerindeki secili resmi almamı sagladım*/

/*currencyManager nesnesi (cm) dataset uzerindeki konumu tutar*/

DataRowView drv = (DataRowView) cm.Current;

byte[] icerik = (byte[])drv["stream"];

MemoryStream stream = new MemoryStream(icerik);

Bitmap resim = new Bitmap(stream);

Form2 ac = new Form2();

ac.PictureBox1.Image = resim;

f.ShowDialog(this);

}

catch(Exception ex)

{

MessageBox.Show(ex.Message,“HATA”,

MessageBoxButtons.OK,

MessageBoxIcon.Error);

}

}

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...