C# ilə bazaya şəkil yazmaq və şəkli oxumaq

Xoş gördük.
Bəzən bizə lazım olurki şəkilləri hard diskdə yox bazada saxlamaq.Bunun üçün biz şəkli əvvəlcə bazaya yazmalı və sonra həmin şəkli yenidən oxuyub göstərməliyik.Şəkli bazaya binary şəkiləndə yazırıq oxuyan zaman isə bu binary çəkil formatına çevirib oxuyub və şəkil yaradırıq.Bunun üçün inanıram ki bu məqalə hər kəs üçün çox faydalı olacaq.Proqramın kodları içərisində hərşey izah olunub.

Bu proqramın yazılmasında lazım olan proqramlar aşağıdakılardır.
Microsoft SQL Server 2008 R2.
Yükləmə keçidi: http://www.microsoft.com/sqlserver/2008/tr/tr/R2Downloads.aspx
Microsoft Visual Studio 2010 Ultimate
Yükləmə keçidi: http://www.microsoft.com/download/en/details.aspx?displaylang=en&id=12752

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.SqlClient;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace ImageByte
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

public string seklinyolu;

public SqlDataAdapter empadap1;

public DataSet dset;

static string sqlserver = "";//Sql serverin adi

static string baza = "";//Bazanin adi

public string connstr = @"Data Source=" + sqlserver + ";Initial Catalog=" + baza + ";Integrated Security=SSPI;Trusted_Connection=yes;";

/*

* Aşağıda göstərilən sorğunu sql-də icra edin.

*

CREATE TABLE [test_table](

[adi] [nvarchar](50) NOT NULL,

[image] [image] NULL

)

*/

private void bazayaYaz()
{

try
{

//Burada yoxlayırıq şəkilin yolu seçilib ya yox

if (seklinyolu != "")
{

//filestream object-dən istifadə edib şəkli oxuyuruq.

FileStream fs;

fs = new FileStream(seklinyolu, FileMode.Open, FileAccess.Read);

//Sonra şəkli byte massivə çeviririk

byte[] picbyte = new byte[fs.Length];

fs.Read(picbyte, 0, System.Convert.ToInt32(fs.Length));

fs.Close();

//Database-? qoşulma edirsən.

SqlConnection conn = new SqlConnection(connstr);

conn.Open();

//Şəklin adinin yazilib yazilmadigini yoxlayiriq.

if (textBox1.Text == "")
{

MessageBox.Show("Seklin adini yaz.");

}

else
{

//Burda yerinə yetirəcəyimizi bazaya yazma (insert) sorğusunu yazırıq.

string query;

query = "insert into test_table(adi,image) values(‘" +

textBox1.Text + "‘," + " @sekil)";

//Şəkili byta çevirdikdən sonra SQL Parameter ilə bazaya yazırıq.

SqlParameter sekilparm = new SqlParameter();

sekilparm.SqlDbType = SqlDbType.Image;

//Biz yuxırada şəkli @sekil yeni parameter kimi götürmüşük.

sekilparm.ParameterName = "sekil";

//Valuesin yəni qiymətin əlavə edirik.

sekilparm.Value = picbyte;

//Burda isə sorğumuzu (insert) icra edirik.

SqlCommand cmd = new SqlCommand(query, conn);

//parametrləri əlavə edirik.

cmd.Parameters.Add(sekilparm);

//Sorğumuzu icra edirik.

cmd.ExecuteNonQuery();

//Cmd və conn bağlayırıq.

cmd.Dispose();

conn.Close();

conn.Dispose();

}

MessageBox.Show("Şəkil bazaya əlavə olundu");

//Comboboxa daxil etdiyimiz məlumatlari göndəririk

comboBoxDoldur();

}

}

catch (Exception ex)
{

//Burada çıxa biləcək səhvləri ekrana veririk.

MessageBox.Show(ex.Message);

}

}

private void comboBoxDoldur()
{

try
{

//Sql qoşuluruq.

SqlConnection conn = new SqlConnection(connstr);

conn.Open();

//Data adapter yaradiriq.

empadap1 = new SqlDataAdapter();

//Data adapter ilə bazadan select edirik.

empadap1.SelectCommand = new SqlCommand("SELECT * FROM test_table", conn);

//Yeni dataSet yaradırıq

dset = new DataSet("dset");

//Seçdiklərimizi dataSete əlavə edirik.

empadap1.Fill(dset);

//DataTable yaradırıq.

DataTable dtable;

//DataTable dataSetdə olan cədvəlləri əlavə edirk.

dtable = dset.Tables[0];

//ComboBoxu təmizləyirik.

comboBox1.Items.Clear();

//Foreach ilə rowları oxuyuruq.

foreach (DataRow drow in dtable.Rows)
{

//Oxunan Rowları Comboboxun İtems add edirik.

comboBox1.Items.Add(drow[0].ToString());

//Comboboxun seçili indexin 0 edirik ki birinci olanı seçsin.

comboBox1.SelectedIndex = 0;

}

}

catch (Exception ex)
{

//Burada çıxa biləcək səhvləri ekrana veririk.

MessageBox.Show(ex.Message);

}

}

private void button2_Click(object sender, EventArgs e)
{

try
{

//Fayl dialog yaradırıq istəsəniz bunu komponent kimidə əlvə edə bilərsiniz.

FileDialog sekilsecim = new OpenFileDialog();

//Dialog açılanda ilk göstərəcəyi yeri mən C: kimi təyin etmişəm.

sekilsecim.InitialDirectory = @"C:\";

//İcazə verilən şəkil növlərin qeyd edrik

sekilsecim.Filter = "Şəkillər (*.jpg;*.bmp;*.gif)|*.jpg;*.bmp;*.gif";

//Şəkilin seçilib seçilmədiyin yoxlayırıq.

if (sekilsecim.ShowDialog() == DialogResult.OK)
{

//Əgər şəkil seçilibsə şəklinyolun bərabər edirik faylın yoluna

seklinyolu = sekilsecim.FileName;

Bitmap newimg = new Bitmap(seklinyolu);

pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage;

pictureBox1.Image = (Image)newimg;

}

//Şəkil seçimi sonrakı şəkil seçmək üçün null edilir.

sekilsecim = null;

}

catch (System.ArgumentException ae)
{

seklinyolu = " ";

//Burada çıxa biləcək səhvləri ekrana veririk.

MessageBox.Show(ae.Message.ToString());

}

catch (Exception ex)
{

//Burada çıxa biləcək səhvləri ekrana veririk.

MessageBox.Show(ex.Message.ToString());

}

}

private void button1_Click(object sender, EventArgs e)
{

//Bazaya yazmaq üçün yuxarıda yazmış olduğumuz metodu çağırırıq.

bazayaYaz();

}

private void button3_Click(object sender, EventArgs e)
{

//Yeni datatable yaradıb yuxarıda data sete comboBoxDoldur() ilə əlavə olunan məlumatları əlavə edirik.

DataTable dataTable = dset.Tables[0];

//picturebox-da şəkil varsa onu yoxlayırıq

if (pictureBox2.Image != null)
{

//Əgər şəkil varsa şəkli silirik

pictureBox2.Image.Dispose();

}

//FileStream sekil yaradırıq.

FileStream sekilyarat = new FileStream("image.jpg", FileMode.Create);

//Burda foreach ilə datatable-də olan row-lar yoxlanılır.

foreach (DataRow dataRow in dataTable.Rows)
{

//Əgər dataRow-un seçilən adı comboboxda seçilən ad ilə eynidirsə

//Bunu ona görə ediriy ki biz seçdiyimiz şəkli görək.

if (dataRow[0].ToString() == comboBox1.SelectedItem.ToString())
{

//Burada şəklin bytları oxunur Row-dan

byte[] blob = (byte[])dataRow[1];

//Burada bytlar şəkilə yazılır.

sekilyarat.Write(blob, 0, blob.Length);

//Şəkilin baytları yazıldıqdan sonra şəkil bağlanılır.

sekilyarat.Close();

//Yeni şəkil yaratmaq üçün yeni şəkil yaratmanı null edirik.

sekilyarat = null;

//PictureBox-a şəkli seçirik.

pictureBox2.Image = Image.FromFile("image.jpg");

pictureBox2.SizeMode = PictureBoxSizeMode.StretchImage;

//PictureBox-u yeniləyirik

pictureBox2.Refresh();

}

}

}

private void button4_Click(object sender, EventArgs e)
{

//Bazada olan şəkilləri seçmək

comboBoxDoldur();

}
}
}

Bu məqalə ilə bağlı sizi maraqlandıran sualları öyrənmək istəyirsinizsə suallarınızı yazmağı unutmayın.

Hazırladı Elvin Yusifli

Səs: 0. Bəyənilsin Zəifdir

Müəllif: Elvin Yusifli

Şərhlər ( C# ilə bazaya şəkil yazmaq və şəkli oxumaq )

  1. Təşəkkürlər

Şərh yazın