Listview tüm verileri database kayıt etme

Textbox dan veya başka bir yerden Listview’e girilen değerleri database imize kayıt etmek isteyebiliriz. Şöyle kısa bir senaryo ile anlatalım; kafe adisyon programında, garson masa müşteriden sipariş edilen ürünleri listview de saklayıp müşteri hesabını ödeyeceği zaman satılan ürünlerin adını ve fiyatını hesap kesiminde database’e kayıt ettirebilir. Buna benzer senaryoda kullanma babında bu uygulamayı paylaşmak istedim.

Örnek için resimdeki gibi bir arayüz formu hazırlayabilirsiniz. Buradaki amaç ilk önce textbox lardan girilen değerleri listview e kayıt etmek ardından listviewdeki tüm verileri tek hamle ile database e göndermek.

Burada coder isimli bir veritabanı bir tablo, içerinde id, adi ve soyadi kolonu bulunmakta. İlk önce textbox dan listview’e veri kayıt edelim.

1
2
3
4
5
6
7
8
private void button1_Click(object sender, EventArgs e)
{
ListViewItem lv = new ListViewItem();
lv.Text = textBox1.Text;
lv.SubItems.Add(textBox2.Text);
listView1.Items.Add(lv);

}

[stextbox id=”info”]Listview sınıfı nesneyi tanımladık fieldlarını doldurduk. Ardından listView1.Items.Add(lv) nesnedeki değeri listview e gönderdik. [/stextbox]

Resimdeki listview altında dbkayıt butonu ise listviewdeki değerleri tek seferde database e kayıt etmemizi sağlamakta. Buton clik ile kodlarına dalacak olursak;

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
private void button2_Click(object sender, EventArgs e)
        {

            int etkilenen = 0;

            for (int i = 0; i < listView1.Items.Count; i++ )
            {

                try
                {
                    SqlConnection sql = new SqlConnection("server=.; database=coder; trusted_connection=true;");
                    SqlCommand cmd = new SqlCommand();
                    cmd.Connection = sql;

                    string adi = listView1.Items[i].SubItems[0].Text;
                    string soyadi = listView1.Items[i].SubItems[1].Text;
                   
                    cmd.CommandType = System.Data.CommandType.Text;
                    cmd.CommandText = "insert into tblkisi (adi,soyadi) values (@adi, @soyadi)";

                    cmd.Parameters.AddWithValue("@adi", adi);
                    cmd.Parameters.AddWithValue("@soyadi", soyadi);
                    sql.Open();
                    cmd.ExecuteNonQuery();

                    sql.Close();
                }
                catch (Exception)
                {
                    MessageBox.Show("Kayıt edilmedi");
                }
                                         
            }
            if (etkilenen != 0) // Açıklama 11 :
            {
                MessageBox.Show("Kayıt edilmedi !!!");
            }
            else
            {
                MessageBox.Show("Kayıt edildi...");
               
            }

        }

For döngüsü ile listview eklenmiş satır sayısı kadar döngü kurduk. Döngünün içinde değerleri okuması için listView1.Items[i] kaçıncı satırda ise o satırdaki veriyi stirng değişkenlerine atadık. Programın kopma noktası da burası oluyor zaten. Geriye kalan kısım Ado.net den başkası değil…

Programda bazı şeyler eksik biliyorum ama hatasız çalışmakta. Burada aktarmak istediğim bilgi listview içinde for ile dönmeden başka bir şey değil…

Csharp ile registry ekleme silme işlemleri

Registry, Windows’un çalışması ve çalıştırması gereken veritabanı diyebiliriz. Neredeyse tüm programlar registry ile çalıştığını az çok tahmin edebiliyorsunuzdur. Hikayeyi fazla derinleştirmeden asıl mevzumuza geçersek, kayıt gerektiren bir masaüstü uygulaması geliştirdiğimizde; şifre işlemleri, son giriş tarihi gibi vs. kayıt gerektiren işlemleri daha güvenli bir yerde saklamamız için registry’i kullanırız.

İnternet de bir çok registry işlemleri örnekleri görmüşsünüzdür. Alternatif olarak daha basit, mantığını aktarmak için küçük bir uygulama yapmak istedim(Uygulama herhani bir işe yaramıyor). Altta gördüğünüz uygulamanın amacı, HKEL_CURRENT_USER altındaki Software anahtarı altına istediğimiz isimde anahtar oluşturarak, onun içerisine istediğimiz değerlerde anahtar oluşturmak.

Resimdeki gibi basit form oluşturarak konuyu daha iyi anlayabilirsiniz. 3 tane buton ve ve bir label koyarak yapabilirsiniz. Oluşturduk tan sonra kod kısmına geçebiliriz;

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
private void button1_Click(object sender, EventArgs e)
{
RegistryKey anahtar = Registry.CurrentUser;
try
{
anahtar = anahtar.CreateSubKey("Software\\coder.digitaldunyam.net");
label1.Text = "Anahtar oluşturuldu";
}
catch (Exception)
{

}

}

private void button2_Click(object sender, EventArgs e)
{
RegistryKey anahtar = Registry.CurrentUser;
anahtar = anahtar.OpenSubKey(@"Software\coder.digitaldunyam.net", true);
try
{
anahtar.SetValue("Coder",3, RegistryValueKind.DWord);
anahtar.SetValue("String deger", RegistryValueKind.String);
label1.Text = "Alt Anahtar oluşturuldu";
}
catch (Exception)
{

label1.Text = "Hata !";

}

}

private void button3_Click(object sender, EventArgs e)
{
RegistryKey anahtar = Registry.CurrentUser;
anahtar = anahtar.OpenSubKey(@"Software\coder.digitaldunyam.net",true);
try
{
anahtar.DeleteValue("Coder");
label1.Text = "İlgili anahtar silindi";
}
catch (Exception)
{

label1.Text ="Anahtar bulunamadı";
}

}

Açıklamaları kafa karıştırdığı için kod içinde vermiyorum. Anahtar oluşturma, silme işlemlerini anlamladırmak için Label ve mesajlar ile süsledim. Yapılanları görebilmek için Başlat-Çalıştır “Regedit” yazarak görebilirsiniz.

[stextbox id=”alert”]Dikkat etmeniz gereklerden bir tanesi using Microsoft.Win32; referansı ekleyip anahtar yollarını doğru yazmanız. CreateSubKey(“Software\\coder.digitaldunyam.net”) ile OpenSubKey(@”Software\coder.digitaldunyam.net”,true) arasındaki farkları göz ardı etmenizde fayda olacaktır. [/stextbox]

Asp.net smtp mail gönderimi

Daha çok iletişim, parola, görüş öneri formu gibi işlemlerde işimize yarayan, database i teğet geçen smtp servisinin sağladığı bu sistemi Asp.net de de kullanılabilmekteyiz. Günlük 200 adet(tahmini değer) smtp mail gönderim limti olan gmail bu servisi kullananlar için rağbet görmekte.


Bir kaç satır kod ile Asp.net ile de gönderebileceğiniz smtp mail sistemini küçük bir örnekle uygulayalım. Resimdeki gibi bir form ekranı hazırlayarak smtp mail işlemine başlayabiliriz. Bunu yapmadan önce elinizin altında fazla kullanmadığınız gmail hesabınız olması gerekmekte.

3 label, iki textbox ve bir buton yeterli olacaktır. 3. labelı hata mesajı göstermek için kullanmalıyız. Gerekli form tasarımını hazırladıktan sonra gönder butonuna çift tıklayıp kod kısmına atlayabiliriz.

SmtpClient ve NetworkCredential için ;

1
2
using System.Net.Mail;
using System.Net;

eklemeniz gerekmekte.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
 protected void Button1_Click(object sender, EventArgs e)
        {
            try
            {
                SmtpClient baglanti = new SmtpClient();
                MailMessage mesaj = new MailMessage();
                mesaj.To.Add("alici@hotmail.com"); //mail göndermek istediğiniz herhangi bir hesap, hotmail, isim@alanadi.com  vs hesap farketmez
                mesaj.From = new MailAddress("deneme@gmail.com"); //buradaki hesap üzerinde gönderi yapılacak, gmail hesabı
                mesaj.Subject = "Asp Net Smtp Mail Gönderim Denemesi";
                mesaj.IsBodyHtml = true;
                mesaj.Body = "<b>Adı</b> : " + TextBox1.Text + "<br>" + "<b>Soyadı :</b> " + TextBox2.Text; //daha fazla parametre için form tasarımı buradan yapılabilir, gidecek olan içerik burada hazırlanmakta

                NetworkCredential guvenligonderi = new NetworkCredential("deneme@gmail.com", "12345"); //gmail kullanıcı adı ve şifreniz

                baglanti.Credentials = guvenligonderi;

                baglanti.Port = 587; //gmail port nurası Türkiye için 587

                baglanti.Host = "smtp.gmail.com";

                baglanti.EnableSsl = true;
                baglanti.Send(mesaj);
                Response.Redirect("mesaj.aspx"); //gönderi yapıldıktan sonra otomatik yönelecek sayfayı buraya yazabilirsiniz
            }
            catch (Exception)
            {

                Label1.Text = "Lütfen Tekrar Gönderin"; //gönderide hata olursa buradaki mesaj devreye girmekte
            }
           
        }

Button1_Click olayına yukarıdaki gibi kodları uygulayıp gereken yerlere kendi gmail hesap ve şifrenizi girip deneme amaçlı alıcı kısmına diğer e posta adresinizi girerek Asp.net smtp mail gönderimini deneyebilirsiniz. Gereken açıklama kodlar içinde mevcut. mesaj.Subject alanı mailin başlık alanı, mesaj.Body gövde yani mailin içerik alanını teşkil etmekte.

Not: Buradaki hesap deneme amaçlı yazılmıştır. Bu yüzden çalışamayabilir, kendi gmail hesap ve şifre bilgileriniz girmeniz gerekir.

Csharp ile taksitli ödeme hesaplama

Taksitli alış veriş yapılan iş yerlerine uygun bir program ile merhaba. Uygulamada girilen tutarı aylık taksitler şeklinde listeleyen, taksitin ödeme zamanını da gösteren mini bir muhasebe programı.(Cumartesi ve Pazar günü hafta tatili olduğundan dolayı bu günlere denk gelen ödemeyi bir gün sonraya veya önceye atıyoruz)

Taksitli ödeme hesaplama programında kullanılacak materyaller; TextBox, ListView, ComboBox(Edit Items’dan uygun 2,3,4..12 şeklinde sayıları gir) ve iki adet buton.
Metot kullanarak yapılan bu uygulamada zaman fonsiyonları kullandık.

Hesapla butonuna çift tıklayarak kodlama geçebilirsiniz ;

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
private void button1_Click(object sender, EventArgs e)
        {
            listView1.Items.Clear(); // ikinci kez hesapla butonuna tıklandığında yeni ödeme planı göster
            try  // try cath ile olası hatalar engellendi...
                  {
                               
                double para = Convert.ToDouble(textBox1.Text); //bölme işlemi olduğundan dolayı double kullanıldı
                double vade = Convert.ToDouble(comboBox1.SelectedItem);
                hesaplama(para, vade); // hesaplama metodu
            }
            catch
            {
                MessageBox.Show("Hata !!! Lütfen geçerli veri gir");
            }
        }

        private void hesaplama(double mpara, double mvade) // hesaplama metodu içeriği double kullanarak...
        {
            double odenecek = mpara / mvade; // tutar bölü seçilen taksit sayısı

            DateTime bugun = DateTime.Now; // şimdiki zamanı baz alarak bugun değişkeni tanımlandı
            DateTime odemegunu; // ödeme günü birincil olarak secildi

            for (int i = 0; i < mvade; i++)
            {
                odemegunu = bugun.AddMonths(i + 1); // taksitlendirme bir sonraki ay başlıyor... Ör: Ocak'da satın alınan ürün taksidi Şubat ayından itibaren başlamakta
                if (odemegunu.DayOfWeek.ToString() == "Saturday") // Ödeme günü Cumartesi 'ne denk gelirse bir önceki günü göster ödemeyi yaptır
                {
                    odemegunu = odemegunu.AddDays(-1);
                }
                else if (odemegunu.DayOfWeek.ToString() == "Sunday") // Ödeme günü Pazar'a denk gelirse bir sonraki günü göster ödemeyi yaptır
                {
                    odemegunu = odemegunu.AddDays(1);
                }

                ListViewItem list = new ListViewItem(); // listeleme olayı burada yapılmakta
                list.Text = odemegunu.ToLongDateString();
                list.SubItems.Add(odenecek.ToString("C"));
                listView1.Items.Add(list);
            }

        }

        private void button2_Click(object sender, EventArgs e)
        {
            listView1.Items.Clear(); // temizle
        }

elimden geldiği kadar kodlar içinde açıklama yaptım. Bir sonraki uygulama ile görüşmek dileği ile…

Kaynak : Cemal Can AKGÜL (Bilge Adam Yazılım Eğitmeni)

Hata bulma komutu Try Catch

C#‘da yapılan bir uygulamada, örneğin kullanıcıdan alınan bilgileri toplamak için yapılan işlemde, kullanıcı int yani sayısal değer girmesi zorundadır. Sayısal değer girmediği zaman veya hiç değer girmediği zaman uygulama çalışmayıp programı çökertecektir. Bu gibi kullanıcı hatalarını önlemek, yazılımcının işini kolaylaştırmak için try, catch hata bulma blokları kullanılmaktadır.

try içine yazılan kodlar normal çalışırken, anormal durumlarda yani kullanıcı hatalı giriş yaptığında catch(sözcük anlamı yakalamak) blogu çalışmaktadır. Resimdeki gibi bir form ekranı oluşturduktan sonra alttaki kodlar ile uygulamayı deneyebilirsiniz.

try catch ile birlikte sadece denetleme yapan hata olsa da olmasa da kontrol eden finally blogunuda kullanabilirsiniz.

Topla butonuna çift tıklatarak

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
 try
            {

                int sayi = Convert.ToInt32(txtb1.Text);
                int sayi2 = Convert.ToInt32(txtb2.Text);
                int sonuc = sayi + sayi2;


                MessageBox.Show(Convert.ToString(sonuc));

                txtb1.Text = "";
                txtb2.Text = "";
            }

            catch
            {
                MessageBox.Show("giriş hatalı!!!!!!");
            }

            finally
            {
                MessageBox.Show("hata yok uygulama çalışmakta");
            }