Ayın Konusu

Ayın Konusu: Ms-SQL Server 2005′de bazı faydalı fonksiyonları ve komutları inceleme!

Ms-Sql Server 2005’de bizlere faydalı olan bazı fonksiyonları sizlere burada açıklamaya çalışacağım daha fazlasını MSDN’den bulabilirsiniz. MSDN için yeri gelmişken birkaç birşey söylemek isterim, Visual Studio IDE’sini yapan ekibi tebrik ederim ama MSDN kütüphanesini hazırlayan ekibde en az onlar kadar saygıyı hak ediyorlar. Gerçek bir kütüphane, neredeyse her problemin çözümü ve bilmediğiniz bir o kadar bilgi MSDN’de mevcut bu zamana kadar girmediyseniz mutlaka o ortamada alışmaya başlayın. Konumuza dönersek bazı birkaç faydalı fonksiyonlardan bahsedeceğiz bunlardan ilki string fonksiyonları

  • len(string) fonksiyonu, hemen hemen her programcının kullandığı string’in karakter sayısını öğrenmeye yarayan faydalı bir fonksiyondur.
  • ltrim(string) fonksiyonu, yazının sol tarafındaki boşlukları silen fonksiyon.
  • rtrim(string) fonksiyonu, yazının sağ tarafındaki boşlukları silen fonksiyon.
  • left(string, karakter sayısı) fonksiyonu, parametre olarak geçilen string’in sol tarafından belirtilen sayıda karakter alan fonksiyon.
  • right(string, karakter sayısı) fonksiyonu, parametre olarak geçilen string’in sağ tarafından belirtilen sayıda karakter alan fonksiyon.
  • substring(string, başlangıç, karakter sayısı) fonksiyonu, parametre olarak geçilen stringin başlangıç indisinden itibaren karakter sayısı kadar karakteri alan fonksiyon.
  • isnumeric(ifade) fonksiyonu, parametre olarak geçilen ifadenin numeric olup olmamasına göre 0 veya 1 döndürüyor.
  • Rand([seed]) fonksiyonu, gerçi dönüş değeri float türünden bir sayı.
  • GetDate() fonksiyonu, size o anki tarih ve saati geri döndürür.

Bunun gibi daha birçok fonksiyona MSDN kütüphanesinden ulaşabilirsiniz, ben sadece sizlere benim en fazla kullandığım fonksiyonları verdim. Umarım faydalı olmuştur.

Kolay gelsin, iyi çalışamar…

Ayın Konusu: Ms-SQL Server 2005′de ‘Trigger’ Hazırlama.

Arkadaşlar Trigger’ı açıklamak gerekirse, siz tablonuza bir değer eklediğiniz, sildiğinizde ya da değiştirdiğinizde yapılmasını istediğiniz işlerin otomatik olarak gerçekleşmesini sağlıyor. Bunu biraz açıklayayım. Diyelim ki siz bir firmaya ürün stok programı yapıyorsunuz, bir üründen 2 adet sattığınızda otomatik olarak stok’dan düşmesi lazım, satan kişi gidip bir daha stok tablosundan 2 tane sattığı üründen düşmesin. İşte bu gibi işlemleri ‘Trigger’lar sayesinde yapabiliyoruz. Şimdi bakalım bu ‘Trigger’ları nasıl kullanıyoruz.

Sentaksı;

create trigger [Trigger Adı] on [Tablo Adı]
for [Delete, Update, Insert]
as
begin
   -- Yapılacak işler
end

Sanırım sentaks’da sadece for olan kısmı açıklamak yeterli olacaktır. for kısmı Trigger’in ne zaman tetikleneceğini söylüyor. Yani tabloya bir veri girildiği zaman mı?, bir satır silindiği zaman mı? yoksa bir satırdaki bilgi değiştirildiği zaman mı? bunu belirtiyor. Diğer kısımlarda anlaşılmayan bir kısım olduğunu zannetmiyorum.

Sentaks’ı uygularsak;

create trigger tr_MusteriSil on Musteri
for Delete
as
begin
   insert SilmeLog
   select Musteri, MusteriNo, getdate() from deleted
end

Uygulamada ki Trigger’ımız tahmin ettiğiniz gibi silme işleminde otomatik olarak SilmeLog isimli tabloya silinen veriyi kopyalıyor. from deleted kısmında ise silinen satırdaki veriler var ve tek satırlık bir veridir. Oradaki verileri select komutuyla çekiyoruz.

Trigger işlemleri çok sık kullanılan ve faydalı bir işlemdir. Umarım sizler için faydalı olmuştur.

Hepinize kolay gelsin, iyi çalışmalar…

Ayın Konusu: Ms-SQL Server 2005′de ‘Backup-Restore’ işlemleri!

Ms-Sql Server’da veritabanınızın yedeğini almak ve yüklemek çok basit bir şekilde yapılıyor. Normal dosya kaydetme, yükleme işlemlerinden farksızdır. Aşağıda adım adım bir veritabanı yedeği nasıl alınır ve yüklenir görelim;

adim1

1. Yedeğini almak istediğimiz veritabanına sağ tıklayıp ‘Backup’ seçeneğini seçiyoruz.

adim2_

2. Çıkan menüden bize veritabanımızı yedekleme türünü söylüyor. Ister ‘Full’ yedeğini alabiliriz isterseniz ‘Differential’ yedeğini alabilirsiniz. Eğer yer probleminiz yoksa ‘Full’ yedek almayı seçebilirsiniz. Yedeği kaydedeceği noktayı aşağıda gösteriyor burayı isterseniz değiştirebilir, isterseniz farklı bir yer ekleyebilirisiniz.

adim1_options

3. Options menüsüne girdiğinizde karşınıza bazı seçenekler çıkacaktır. Veritabının bir kopyasınımı oluştursun yoksa üzerine mi yazılması, media kartlarına mı yoksa sabit bir disk’e mi, yazıldıktan sonra kontrol edilsin mi gibi seçenler sunuluyor ben bu şekilde bırakıp yedekleme işlemimi sonlandırıyorum.

Yükleme kısmına gelirsek;

adim2_yukleme

4. Yine yedek yükleyeceğimiz veritabanında sağ tıklayıp Task->Restore->Database seçeneklerini seçiyoruz.

adim3

5. Karşımıza çıkan ekranda default olarak Backup klasörünün altına bakıyor ve orada gördüğü .bak uzantılı dosyaları bize çıkartıyor. Yüklemek istediğimiz dosyayı seçip OK tuşuna basıp veritabanı yükleme işlemini sonlandırıyoruz.

Gördüğünüz gibi MS-Sql Server’da yedek alma ve yükleme işlemleri o kadar da zor değil. Umarım faydalı olmuştur arkadaşlar…

Hepinize kolay gelsin, iyi çalışmalar…

Ayın Konusu: ‘Sürükle-Bırak Özelliği’

Birçok programda bu özellik mevcuttur, herkesin kullandığı MSN programında bile arkadaşlarımıza dosya göndereceğimiz zaman yazı yazdığımız yere dosyayı sürükleyip bırakırız. Peki biz bunu kendi programımıza nasıl ekleyeceğiz? Mesela formumuzda bir ‘TextBox’ olsa kullanıcı metin dosyasını ‘TextBox’a sürükleyip bıraktığında içindeki yazıları ‘TextBox’da göstersek, ya da en güzeli ana formumuza istediği dosyayı bıraksın biz belirleyelim nerede gözükeceğini :), resim ise ‘PictureBox’da metin dosyası ise ‘TextBox’da, excel dosyası ise ‘DataGrid’de vb. Nasıl olur? (En sonuncusu bence en güzeliydi).

Ilk olarak yapmamız gereken sürükle-bırak özelliğini kullanacağımız kontrol’ün ‘AllowDrop’ özelliğini ‘true’ yapmamız lazım. Bunu yaptığımız zaman kontrolün üzerine bir dosya sürüklediğimizde dosyanın bırakılabileceği anlamına gelen simgeye dönüşecek fare imleçimiz. (Not: ‘AllowDrop’ özelliği bazı kontrollerde mevcut değil. PictureBox, GroupBox vb.) Bu işlemi yaptıktan sonra sıra dosyayı bıraktıktan sonraki işlemleri yapmak kaldı. Bunun için kontrollerin iki tane ‘Event’i mevcut; ‘DragDrop’: Dosya bırakıldıktan sonra tetiklenen fonksiyon. ‘DragEnter’: Dosya bırakılmadan kontrolün üzerindeyken tetiklenen fonksiyon.

private void TextBox1_DragEnter(object sender, DragEventArgs e)
{
   if (e.Data.GetDataPresent(DataFormats.FileDrop, false) == true)
      e.Effect = DragDropEffects.All;
}
 
private void TextBox1_DragDrop(object sender, DragEventArgs e)
{
   string[] dosyalar = (string[])e.Data.GetData(DataFormats.FileDrop);
 
   EepromDosyaYolu = dosyalar[0];
 
   if ((dosyalar[0].EndsWith(".txt") == true) || (dosyalar[0].EndsWith(".TXT") == true) ||
       (dosyalar[0].EndsWith(".rtf") == true) || (dosyalar[0].EndsWith(".RTF") == true)
     )
    {
       dosyaIsim_tb.Text = dosyalar[0].Remove(0, dosyalar[0].LastIndexOf("\\") + 1);
    }
    else
    {
       EepromDosyaYolu = "";
       MessageBox.Show("Yanlış Format, "www.burakozkan.net", MessageBoxButtons.OK, MessageBoxIcon.Error);
       return;
    }
}

‘DragEnter’ ‘Event’inde dosya bırakıldı mı diye kontrol ediliyor eğer dosya bırakıldıysa, kontrolün ‘DragDrop’ ‘Event’i yapılıyor, burada yapılan işlemler, ben bütün bırakılan dosyalarla işlem yapmak istemediğim için sadece ilk dosyanın ismini aldım, eğer siz uygulamanızda birden fazla dosya bırakıldığı zaman hepsini kullanmak istiyorsanız ‘dosyalar’ isimli ‘string’ dizisini kullanabilirsiniz. Dosyanın ismini aldıktan sonra uzantısına baktım eğer metin dosyası formatlarından bir tanesi ise dosya ismini bir ‘TextBox’a yazdırdım, dosyayı okumak için FileStream sınıfı ile okuyup yazdırabilirsiniz. Gelelim son dediğimizi yapmaya; bu işlem için kod yazmayacağım zaten yukarıdaki koddan farklı birşey yapmayacaksınız. Sadece bunu ana formunuza uygulayacaksınız ve ‘DragDrop’ ‘Event’inde dosya formatına göre ayırarak ister bir ‘PictureBox’da gösterebileceksiniz, isterseniz ‘TextBox’da isterseniz ‘DataGrid’de tercih size kalmış. Hatta çoklu dosya bırakıldıysa bunları bir ‘ListBox’da gösterebilirsiniz.

Bir ayın konusunun daha sonuna geldik, umarım sizlere faydalı olur. Hepinize kolay gelsin, Iyi çalışamalar…

Ayın Konusu: ‘C# ile Toplu Mail Gönderme Programı ve Anlatımı!’

Arkadaşlar yeni bir Ayın Konusu ile sizlerleyim. Bu uygulama benim çok hoşuma gitmeye başladı çünkü burada duyurduklarımı yapma zorunluluğu hissediyorum ve eğer bunları yaparsam sitem sizler için daha faydalı olur diye ümit ediyorum. Bildiğiniz gibi ayın konularından biride ‘C# ile Toplu Mail Gönderme Programı ve Anlatımı’, konu başlığını okuyunca ‘Bunun neresi Ayın Konusu olmayı hak ediyor ki?’ diyebilirsiniz. Evet konu başlığına bakınca ‘mailMessage.To.Add(…)’ fonksiyonuna mailleri dizince gönderebilirim. Evet bu fonksiyonu kullanarak göndereceğiz. Ama bu bildiğimiz fonksiyonu kullanarak güzel bir program neden yapmıyoruz? Mesela kullanıcı mail hesapları tanımlasa!, Excel dosyasından veya metin belgesinden mail listesini eklese!, eklediği mailleri bir kişi listesi olarak kaydetse sonra tekrar seçebilse!. Bildiğimiz tek birşey var mailMessage.To.Add(…) fonksiyonu. Bu fonksiyondan yola çıkarak şimdi programımızı inceleyelim;

Programımızın yapabildikleri;

– Çoklu Mail hesabı tanımlama.

– Kişi listesi oluşturma imkanı.

– Excel dosyasındaki mail adreslerini okuyabilme.

– Oluşturduğu kişi listesini ve hesabı kaydebilme.

Ben programda bu bilgileri kaydetmek için XML dosyası kullandım, çok kararsız kaldım Access mi yoksa XML mi kullanayım diye ama sonra XML formatınıda bilmediğim için XML kullandım. Bu dosya formatını öğrenirken Burak Selim Şenyurt hocanın buradaki makalesi bana gerçekten çok yardımcı oldu. Öncelikle programın ‘Hesap Tanımla’ menüsünden bahsetmek istiyorum; Hesap tanımla işlemi için gerekli olan bilgileri kullanıcı ekrandan girmesini istiyoruz, bu bilgiler; -‘Hesap Adı’, -‘Mail Adresi’, -‘Şifresi’, -‘SMTP Server Adresi’, -‘Port Numarası’ ve -‘SSL’ bilgisi, bu bilgileri aldıktan sonra XML dosyamıza Hesap isimli boğum ile kaydediyoruz.

Birde ‘Hızlı Ayar’ kısmı var, burada eğer hotmail, gmail veya yahoo mail hesabını ekleyecekse ve kullanıcı smtp server adresini bilmiyorsa otomatik olarak yazılıyor. Hesap Ekle butonunda yapılacak görevler;

– Giriş Kontrol,

– Hesap Ekle,

– Girilen bilgileri temizle.

Bu işlemler yapıldıktan sonra kullanıcı artık bir mail hesabı tanımlamış oluyor, ana sayfadan mail göndereceği zaman istediği mail hesabını seçerek mailini gönderebilir.

İkinci menümüz ise tanımladığımız hesapları düzenleyecemiz menü;

Daha önceden tanımladığımız hesaplar üzerinde değişiklik yapabildiğimizi menü. Eğer mail adresimizin şifresini değiştirdiysek veya mail adresimizi yanlış yazdığımızı fark ettiysek bu menüden düzenleme yapabileceğiz. Ayrıca artık o mail hesabını kullanmıyorsak yine bu menüden hesabımızı silebiliyoruz. Sol tarafta ise eklemiş olduğumuz hesapları görebiliyoruz, buradan seçtiğimiz hesap bilgilerini sağ tarafta görebiliriz. Programda kullandığım 2 tane sınıf var bunlar; Hesap ve KisiListesi isminde bunları aşağıda detaylı bir biçimde açıklayacağım, birde bu ekleme-silme-güncelleme-bilgileri alma işlemleri için XmlYonetici sınıfı tanımladım bu sınıf Burak Selim Şenyurt hocanın kullandığı sınıfın bizim programımıza göre düzenlenmiş hali. Burak hocanın kullandığı yöntemden yola çıkarak güzel bir Xml veritabanı oluşturduk. İleride bu 3 sınıfı da detaylı bir şekilde anlatacağım;

Bir sonraki menümüz ise kişi listesini oluşturacağımız menü. Bu menüden kişi listemizi ister bir Excel tablosundan istersek dosyadan okuyabiliriz. Excel’den dosyaları okumak için ‘OleDbConnection’ sınıfından faydalandım. Burada takıldığım noktalardan biri mail adresleri hangi çalışma sayfasındaydı. Bu problemi kullanıcıya sorarak geçtim. Excel tablosundan ‘Ekle’ dediği zaman bir form çıkacak ve kullanıcıya maillerin hangi çalışma tablosunda olacağını soracaktı. Bu bilgiyide alarak aşağıdaki kod satırı ile Excel dosyasından mail adreslerini rahatlıkla aldım;

OleDbConnection baglanti = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source= " + openFile.FileName + ";Extended Properties=Excel 8.0;");
baglanti.Open();
string sorgu = "SELECT * FROM [" + frm.tabloAdi + "$]";
OleDbDataAdapter data_adp = new OleDbDataAdapter(sorgu, baglanti);
DataTable mailTablo = new DataTable();
data_adp.Fill(mailTablo);
 
int test = mailTablo.Columns[1].MaxLength;
 
foreach (DataRow row in mailTablo.Rows)
{
   foreach (DataColumn column in mailTablo.Columns)
   {
      if (row[column] != System.DBNull.Value)
      {
         if (mailAdresKontrol((string)row[column]))
         {
            mailList_lb.Items.Add((string)row[column]);
         }
      }
   }
}
baglanti.Close();

Eğer kullanıcı bir txt’den okuma yapacaksa maillerinin arasına bir boşluk bırakması veya her maili ; işareti ile bitirmesi yeterli olacak. Biz dosyadan okuduğumuz yazıyı dizilere böldük, ardından da dizi elemanlarına baktık hangisi bizim mail formatımıza uyuyor. Mail formatımız ise @ işaretinden sonra bir tane . işareti olmak zorunda.

Dosyadan mail adresi almak için;

FileStream fs = new FileStream(openFile.FileName, FileMode.Open, FileAccess.Read);
StreamReader sr = new StreamReader(fs);
 
string[] mailAdres = sr.ReadToEnd().Split(new char[] { ';', ' ', '\r', '\n' });
foreach (string adres in mailAdres)
{
   if (mailAdresKontrol(adres))
   {
      mailList_lb.Items.Add(adres);
   }
}

Kişi listelerini dosyadan okudunktan sonra ‘Kişi Listesini Oluştur’ butonu ile kişi listesini XML dosyamıza kaydediyoruz.

Kişi Listesini Oluştur butonu;

private void kisiListesiKayit_btn_Click(object sender, EventArgs e)
{
   if (!GirisKontrol())
   { return; }
   else
   {
      string[] mailList = new string[mailList_lb.Items.Count];
      for (int i = 0; i < mailList_lb.Items.Count; i++)
      { mailList[i] = (string)mailList_lb.Items[i]; }
      xmlYonetici.KisiListesiEkle(xmlYonetici.KisiListesiEnBuyukId() + 1, kisiListesiAdi_tb.Text, mailList);
   }
   MessageBox.Show("Kişi Listesi Başarıyla Oluşturuldu!", "www.burakozkan.net", MessageBoxButtons.OK, MessageBoxIcon.Information);
   Temizle();
}

Son menümüz oluşturduğumuz kişi listelerini düzenleyeceğimiz menü. Bu menüde oluşturduğumuz kişi listesinin adını değiştirebiliriz, mail listesinden biriniz çıkartıp ekleyebiliriz. Hesap düzenleme menüsüne çok benzer bir yapıya sahip, yine sol tarafta daha önceden tanımlamış olduğumuz kişi listelerinin adları sol taraftaki Listbox’da görebiliyoruz.

Ve ana menü. Ana menüde yapacağımız işlemler şunlar; kullanıcı önceden tanımlamış olduğu kişi listesini veya listelerini ekleyebilir ya da tek tek mail adreslerini ekleyerek de mail gönderebilir. Mailine isterse bir dosya ekleyebilir, kişi listesini belirledikten sonra ‘GÖNDER’ butonunu kullanarak belirlediği adreslere mailini gönderebilir;

Gönder butonu;

private void gonder_btn_Click(object sender, EventArgs e)
{
   MailMessage MailGonder = new MailMessage();
   MailGonder.From = new MailAddress(((Hesap)hesapAdi_cb.SelectedItem).MailAdresi);
 
   for (int i = 0; i < mailList_lb.Items.Count; i++)
   {
      MailGonder.To.Add((string)mailList_lb.Items[i]);
   }
   MailGonder.Subject = konu_tb.Text;
   Attachment data = new Attachment(openFile.FileName);
   MailGonder.Attachments.Add(data);
   MailGonder.Priority = MailPriority.High;
   MailGonder.DeliveryNotificationOptions = DeliveryNotificationOptions.OnFailure;
   MailGonder.Body = mesaj_rtb.Text;
   SmtpClient Yolla = new SmtpClient();
   Yolla.SendCompleted += new SendCompletedEventHandler(Yolla_SendCompleted);
   Yolla.Credentials = new System.Net.NetworkCredential(((Hesap)hesapAdi_cb.SelectedItem).MailAdresi,
                                                        ((Hesap)hesapAdi_cb.SelectedItem).MailSifresi);
   Yolla.Host = ((Hesap)hesapAdi_cb.SelectedItem).ServerAdres;
   Yolla.Timeout = 5000;
   Yolla.DeliveryMethod = SmtpDeliveryMethod.Network;
   Yolla.Port = ((Hesap)hesapAdi_cb.SelectedItem).Port;
   Yolla.EnableSsl = ((Hesap)hesapAdi_cb.SelectedItem).SSL;
   siteAdres_tssl.Text = "Mail Gönderiliyor...";
   siteAdres_tssl.BackColor = Color.Yellow;
   gonder_btn.Enabled = false;
   this.Refresh();
   Yolla.SendAsync(MailGonder, "Mail Gönderiliyor...");
}

Yukarıda söylediğim Hesap ve KisiListesi sınıfını açıklamak istiyorum. Hesap sınıfının yapısı;

class Hesap
{
   #region Alanlar(Fields)
   private int m_id;
   private string m_hesapAdi;
   private string m_mailAdresi;
   private string m_mailSifresi;
   private string m_smtpServer;
   private int m_port;
   private bool m_ssl;
   #endregion
 
   #region Özellikler(Properties)
   public int Id
   {
      get { return m_id; }
      set { m_id = value; }
   }
   public string HesapAdi
   {
      get { return m_hesapAdi; }
      set { m_hesapAdi = value; }
   }
   public string MailAdresi
   {
      get { return m_mailAdresi; }
      set { m_mailAdresi = value; }
   }
   public string MailSifresi
   {
      get { return m_mailSifresi; }
      set { m_mailSifresi = value; }
   }
   public string ServerAdres
   {
      get { return m_smtpServer; }
      set { m_smtpServer = value; }
   }
   public int Port
   {
      get { return m_port; }
      set { m_port = value; }
   }
   public bool SSL
   {
      get { return m_ssl; }
      set { m_ssl = value; }
   }
   #endregion
 
   public Hesap(int id, string hesapAdi, string mailAdres, string mailSifresi, string mailServer, int port, bool ssl)
   {
      Id = id;
      HesapAdi = hesapAdi;
      MailAdresi = mailAdres;
      MailSifresi = mailSifresi;
      ServerAdres = mailServer;
      Port = port;
      SSL = ssl;
   }
 
   public override string ToString()
   { return HesapAdi; }
}

Bir diğer sınıfımızda KisiListesi sınıfı, bu sınıfta yine Hesap sınıfı gibi kullanıcı kişi listesi oluşturmak için gerekli olan bilgileri alan değişkenlere sahip. Sınıfın yapısı;

class KisiListesi
{
   #region Alanlar(Fields)
   private int m_id;
   private string m_kisiListeAdi;
   private string[] m_kisiler;
   #endregion
 
   #region Özellikler(Properties)
   public int Id
   {
      get { return m_id; }
      set { m_id = value; }
   }
   public string KisiListesiAdi
   {
      get { return m_kisiListeAdi; }
      set { m_kisiListeAdi = value; }
   }
   public string[] MailListesi
   {
      get { return m_kisiler; }
      set { m_kisiler = value; }
   }
   #endregion
 
   public KisiListesi(int id, string kisiListesiAdi, string[] mailListesi)
   {
      Id = id;
      KisiListesiAdi = kisiListesiAdi;
      MailListesi = mailListesi;
   }
 
   public override string ToString()
   { return KisiListesiAdi; }
}

Kişi listesi oluşturmak için; -Mail listesi, -Kişi Listesinin Adı ve -ID gereklidir, .ToString() fonksiyonuda aynı Hesap sınıfında olduğu gibi Combobox, Listbox gibi elemanların .Items.Add(…) kısmına yazınca kişi listesinin adının gözükmesi için override edilmiştir.

Programı çok detaylı test etme imkanım olmadı, eksikleri ve hataları varsa şimdiden affınıza sığınıyorum. Programı kendi isteğinize göre güncelleyebilirsiniz. Programı buradan, kaynak kodlarını  ‘Download’ menüsünden indirebilirsiniz. Her türlü fikir ve eleştirilerinizi bekliyorum. Umarım kendinize faydalı birşeyler bulabilirsiniz… Başka bir Ayın Konusunda görüşmek üzere..

Programdan birkaç görüntü;

Hepinize kolay gelsin, Iyi çalışmalar…

Ayın Konusu: C# ile Windows Formuna Login Girişi!’ Makalesinin Programı

Başlık için aslında ayın konusu değil programı demek daha doğru olur ama böyle başladı böyle devam etsin diye düşündüm :).  Ağustos ayının son günü ilan ettiğim ‘Eylül Ayında Sitemde!‘ yazısındaki program ve makalelerin birini daha buraya ekleyerek şuan için sözümü tutduğum için çok mutluyum, umarım bu sistemin devamlılığını sağlayabilirim. Arkadaşlar daha önce yazmış olduğum ‘C# ile Windows Formuna Login Girişi!‘ makalesinin programını sitemin ‘Download’ bölümünden ve buradan indirebilirsiniz. Kodu düzenlerken makalede ufak birkaç değişiklik yaptım, tekrar gözden geçirmenizde fayda var. ‘Kullanıcı Ekle’ formunda ve ‘up_KullaniciEkle’ stored procedure’da değişikliklik oldu. Umarım sizler için faydalı olur..

Kolay gelsin, iyi çalışmarlar…

NOT: Programın Settings kısmından ConnectionString kısmını kendi veritabanınıza göre değiştirmeyi unutmayın!

Ayın Konusu: Programımız Için ‘Live Update’ Programı!

Norton’nun ‘Live Update’ programını ya da Nokia’nın ‘Software Updater’ programını ve birçok programın bu tarz update programlarını görmüşsünüzdür. Bu tür programlar ana programdan bağımsız çalışırlar ve asıl iş yapan programı update ederler. Bizde kendi yaptığımız programa bu tür bir uygulama yapabiliriz. Yeni bir versiyon çıkarttığımızda kullanıcı yaptığımız update programını kullanarak çok rahat bir şekilde internetten update işlemini yapabilir. Şimdi biraz bu işlemi nasıl gerçekleştireceğiz onu konuşalım;

Öncelikle ana programımız internette bizim hazırladığımız bir txt dosyasından güncel versiyonu okuyup karşılaştırma yapması lazım, örnek vermek gerekirse bizim programımız v2.00 ise ve biz yeni versiyon v2.01 çıkartıyorsak bunu algılamamız lazım ana programda. Bunu istersek biz belirli aralıklarla kullanıcı fark etmeden, programımızı anti-virus yazılımı ile engellemediyse gizli olarak da yapabiliriz veya kullanıcı için ‘Güncelleştirme Kontrol’ butonu koyarak kullanıcının insiyatifinede bırakabiliriz. Ana programın yapması gerekenler bunlar. Peki update programı;

Ben adına ‘Live Update’ dediğim programda öncelikle yeni versiyonda indirilmesi gereken dosyaları tespit ediyorum, örneğin uygulamamız bir .jpg, .gif, .mdb, .dll, .txt vb. farklı türlerde dosya içerebilir, bunların hangilerinin değiştiği veya ekleneceğini tespit etmemiz lazım. Dosyaları tespit ettikden sonra sırasıyla hepsini exe’nin yanına bir temp klasörünün içine indiriyoruz, hemen hatırlatalım indirilecek dosyaları tespit ederken nereye kopyalanacağınıda belirtelim ki ileride bir sorun çıkmasın.  Dosyaları tespit edeceğimiz örnek bir .txt dosyası;

[Kopyalanacak Klasor Adı]*[Dosya Adı]*[Internetdeki Klasor] —> [istanbul] [KizKulesi.jpg] [resim]

Burayı açıklamak gerekirse ilk parametre ana programın yanında hangi klasör’e kopyalanacağını temsil ediyor, biz eğer dosyadan okuma işlemi yapıyorsak klasör adı bizim için çok önemli. Ikinci parametre ise dosyanın adı ve son parametre internetdeki klasörün adını veriyoruz yani ‘KizKulesi.jpg’ dosyası; www.burakozkan.net/updateDeneme/resim/KizKulesi.jpg adresinde. Bu dosyanın en sonuna ana programımızı yazıyoruz, tüm ek dosyalar indirildikten sonra ana programı da yazarak update işlemini tamamlamış oluyoruz.

Ben sizler için bir tane update edilebilir ‘Değerlerimiz’ ve ‘Değerlerimiz Live Update’ ismini verdiğim iki program yaptım, buradan indirdiğiniz program update edilebilir bir programdır. Indirdikten sonra ki yenilikleri fark edeceğinizden şüphem yok :), toplam 4 tane yenilik var bakalım hepsini kim fark edecek :).

Programdan Resimler;

Update edilebilir uygulamayı buradan indirebilirsiniz. Programın kaynak kodları ‘Download’ menüsünde mevcutdur.

Herkese kolay gelsin, iyi çalışmalar…

 Scroll to top