C# ‘ta veritabanını buton aracılığı ile nasıl yedekleriz? Bugün bu konuyu anlatacağım.

Bu konunun amacı: Diyelim ki Personel kayıtlarını tutan bir Windows Masaüstü Uygulaması yazdınız. Kullanıcınında binlerce girmiş olduğu personel kaydı var bu yüzden veritabanını yedeklemek isteyecektir. Bunu yapmak istemesinin sebebi de eskiyen bilgisayarını çöpe atıp, yeni bir bilgisayara geçiş yapacak olmasıdır. Personel Kayıt Projesine yeni bilgisayarına kuran kullanıcı yedeklediği veritabanını bu bilgisayara da yüklemek istemesidir. İşte tam da bu noktada bizim yazdığımız Personel Kayıt projemize bir veritabanı yedekleme butonu ekleme ihtiyacımız doğmuş oluyor. O zaman ne yapıyoruz, hemen işe koyuluyoruz.

Bir Windows Form açarak Tools menüsünden bir adet buton ekleyelim ve butonun Text kısmına Yedekle yazalım.

Sıra geldi butonun kodlarını yazmaya.

 

using System.Data.OleDb;
using System.IO; 
namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1() { InitializeComponent(); }
        OleDbConnection bag = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=Data.accdb");
        //BURASI VERİTABANI BAĞLANTISI
        private void button1_Click(object sender, EventArgs e)
        {
            try
            {
                if (MessageBox.Show("Bu İşlemi Gerçekleştirmek İstiyor Musunuz?""Dikkat", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
                {
                    string klasorYeri = "C:";  //Klasör yerini belirtiyoruz.
                    string klasorAdi = "Yedek";  //Klasör adını belirtiyoruz. 
                    string klasorolustur = klasorYeri + @"" + klasorAdi;
                    Directory.CreateDirectory(klasorolustur);  //yedek veritabanının yerini oluşturuyor.
                    System.IO.File.Copy("Data.accdb""C:Yedek" + "DataYedek" + ".accdb");
                    MessageBox.Show("Veritabanı ( C: Yedek ) klasörüne kaydedilmiştir""Dikkat",
                    MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
            }
            catch
            {
                MessageBox.Show("Veritabanı Zaten Kayıtlı!!!  
               C://Yedek Klasörüne Gidiniz,Önceki Yedek Veritabanını Siliniz veya İsmini Değiştiriniz.""YEDEKLEME İŞLEMİ", MessageBoxButtons.OK, MessageBoxIcon.Stop);}
}
 
        }
    }

Hemen kodlarımı açıklamaya başlayayım. En üst kısımda System.IO kütüphanesini ekledik bunun işlevi metin dosyalarını okumak içindir. Sonra hemen global olarak her zaman ki gibi Access Veritabanı bağlantı cümlemizi yazdık. Daha sonra butonun klik olayına veritabanını yedeklemek için gerekli kodları yazdık.

Burada ilk önce kullanıcıya Messagebox yardımı ile soru sorduk “Bu işlemi gerçekleştirmek istiyor musunuz ? ” diye. Kullanıcı hayır derse herhangi bir işlem yapmayacaktır. Çünkü else komutunu yazmadık onun için boş değer döndürecektir. Kullanıcı evet der ise yedekleme işlemi daha önce yapılmamış veya yapılmış ise kaydedilen veritabanının klasör adı aynı olmadığını program tespit edecek ve yedekleme işlemini gerçekleştirecektir. Biraz aklınız karışmış olabilirim. Şöyle açıklayayım.

Buton kodlarımızda bir try catch (hata yakalama) ifadesi kullandık. Bunun amacı Kullanıcı daha önce veritabanını yedeklemiş ise tekrar yedeklemek istediğinde, program eski kaydedilen veritabanının klasör ismini inceleyecek aynı ise yedekleme başarısız olacak. Değil ise yedekleme başarılı olacaktır.

Eğer kullanıcı ilk defa yedekleme işlemi yapıyorsa zaten yedek klasörü oluşturulmamış olduğundan direk yedekleme işlemini gerçekleştirecektir. 3 string ifade tanımladık. Bunlara klasör adı, klasör yeri ve klasör oluştur diye isimler verdik. Verdiğimiz adlardan da anlaşılacağı gibi ne demek istediğimi anlamışsınızdır.

System.IO.File.Copy

İfadesi ile veritabanımızı C:yedek klasör altına kaydetmiş oluyoruz. Daha sonra ise yine messagebox ile kullanıcıya bilgi mesajı vererek veritabanını yedekleme işleminin gerçekleştiğini ve dosya yerinin neresi olduğunu yazıyoruz. Projemizi çalıştırıyoruz Debug işlemi (F5) test ediyoruz. Kodların çalıştığını gözlemleyebilirsiniz.