MS-SQL İdentity Kolonun Boş Sıra Atlaması

Mart 31, 2017 Mustafa BÜKÜLMEZ 0 Yorum


Bu dersimizde tablolardaki identity kolonların aralarda 1, 2 sıra atlamasının sebebini göreceğiz.

Selamlar,
Bu dersimizde MS-SQL de tablolardaki Identity alanların bazen 1 yada 2 sıra atladığını görürüz bunun sebebi nedir onu açıklamaya çalışacağım.
Arkdaşlar sql de tablolarda
SQL
Identity(1,1) 
şeklinde bir kolon tanımladığımızda normal şartlarda bu kolona müdahele ettirmiyor ve otomatik olarak birer birer arttırıyor. Ama bazen bakıyoruz ki kayıt olmadığı halde identity sırası 1 yada 2 sıra atlamış bunun sebebini biraz araştırdım birazda tecrübelerime ve testlerime dayanarak çözdüm.
Bu sorunun sebebi insert hatalarından kaynaklanıyor. (Deneyebilirsiniz.)
Yani şöyle ki bir insert komutunuz var ve bir virgülü eksik yazdınız. Programdan kaydet butonuna tıkladınız ve hata aldınız. 
İnsert hatasız yapılsaydı varsayalım ki ID'si 12569 olacaktı ama hata verdi. Hatayı düzelttiniz ve yeni bir kayıt daha eklediniz bu yeni kaydın ID 12570 oluyor. 12569 kayıp.
Burada benim ulaştığım sonuç şu şekilde:
SQL insert komutu okumaya başladığı anda 12569 ID numarasını hafızasına alıyor. Kayıt başarısız olduğunda o ID yine de kullanılmış olduğundan o ID'yi serbest bırakmıyor. Bu yüzden de son kayıt(12570) ile bir önceki kaydın(12568) arasında olması gereken 12569 ID numarası tabloda bulunmuyor.
Bu olay bazı durumlarda sorun çıkarabilir mi bilmiyorum ama ben daha önce bir sorun yaşamadım. Belki yaşayan birileri vardır yada sebebini merak edenler vardır diye paylaşmak istedim.
Bu dersimizde bu kadar arkadaşlar.
Bol kodlu günler.
    Mustafa BÜKÜLMEZ
    Mustafa BÜKÜLMEZ
    Hazırladığım ve yüklediğim tüm dersleri deneyip çalıştığını onayladıktan sonra ekliyorum. Çalışmayan kodlar deneyimli kişiler için sorun olmayabilir ama yeni başlayanlar için problemdir. Hem yazılıma gönül vermiş sevgili arkadaşlarıma yardımcı olmak hem daha sonra lazım olduğunda arama süremi kısaltmak için paylaşıyorum.. -- *Bilgi paylaştık













    0 Yorum:

    MS-SQL IDENTITY_INSERT is set to ON/OFF Kullanımı ve Hata Çözümü

    Mart 31, 2017 Mustafa BÜKÜLMEZ 0 Yorum


    Bazı durumlarda tablodaki identity alanına müdahele etmemiz gerekebilir. Bu durumda ne yapabiliriz onu görelim

    Selamlar,
    Bu dersimizde insert esnasında identity kolonuna müdahele etmemiz gereken durumlarda ne yapmamız gerekir onu göreceğiz.  Aynı zamanda bu konu karşımızda bir hata olarak da çıkabiliyor. Onunda çözümü olacaktır.
    Eğerki insert komutunda identity kolonuna da manuel veri eklemek isterseniz. Şöyle bir hata alacaksınız.
    SQL
    cannot insert explicit value for identity column in table 'XTablosu' when identity_insert is set to off.
    Bu hatanın anlamı - identity tanımlanmış kolona veri yazamazsınız. İdentity_insert özelliği kapalı.
    Bunun çözümü olarak şu komutu kullanıyoruz.
    SQL
    set identity_insert TabloAdı on
    --identity insert özelliğini açtık
    
    --insert komutu
    
    
    set identity_insert TabloAdı off
    --identity insert özelliğini kapattık
    Diğer bir çözümü ise identity olan kolonu insert komutu içerisinden çıkartıyoruz :) 
    Eğerki bu insert işini benim gibi dinamik olarak yaptırmaya çalışıyorsanız ve identity kolonunuz ilk sırada yani en başta ise kolon adlarını çektiğiniz sorgunun sonuna
    SQL
    and ORDINAL_POSITION > 1
    //yada
    and IS_NULLABLE = 'YES'
    //yada
    and COLUMN_NAME not like '%ID%'
    gibi şartlar ekleyerek id kolonunuzu insertin dışında bırakabilirsiniz.
    Bu dersimizde bu kadar arkadaşlar.
    Bol Kodlu Günler.
    Mustafa BÜKÜLMEZ
    Mustafa BÜKÜLMEZ
    Hazırladığım ve yüklediğim tüm dersleri deneyip çalıştığını onayladıktan sonra ekliyorum. Çalışmayan kodlar deneyimli kişiler için sorun olmayabilir ama yeni başlayanlar için problemdir. Hem yazılıma gönül vermiş sevgili arkadaşlarıma yardımcı olmak hem daha sonra lazım olduğunda arama süremi kısaltmak için paylaşıyorum.. -- *Bilgi paylaştıkça 


















    0 Yorum:

    Windows'da Kolayca Ekran Görüntüsü almak

    Mart 31, 2017 Mustafa BÜKÜLMEZ 0 Yorum


    Bu dersimizde paint kullanmadan nasıl ekran görüntüsü alacağımızı görelim.


    Selamlar,
    Bu dersimizde Windows sistemlerinde paint kullanmadan ekran görüntüsünü nasıl kolayca alacağımızı anlatacağım.
    Windows çalıştır kısmına "ekran alıntısı aracı" yazalım ve enter'a basalım.




























    Enter dediğimizde ekran biraz beyazlaşıyor ve imlec + şeklini alıyor. Ekran bu şekildeyken mause sol tuşu ile görüntüsünü almak istediğimiz alanı seçiyoruz.












    Görüntüsünü almak istediğimiz alanı seçtikten sonra resmi bize gösteriyor. Bu alanda da bazı işlemler yapabiliyoruz. 
    Örn dikkat çekmek istediğimiz bir yeri işaretlemek yada görünmesini istemediğimiz kısımları karalamak gibi...
    Gördüğünüz gibi arkadaşlar bu şekilde bir çok kolaylık ve hız sunuyor bu özellik.
    Tabi bazım alanlarda illaki printscreen tuşu ile paint i kullanmamız gerekiyor.
    Mesela bu dersteki resimleri alırken printscreen tuşu ile paint i de kullandım. Kullandım çünkü açılır menü gibi başka bir yere tıklandığında kaybolan yerleri çekmek istediğinizde işe yaramıyor. çünkü "Yeni" dediğinzde o açılır liste kapanıyor. Bu gibi işlemler haricinde bu özelliği rahatlıkla kullanabilirsiniz.
    Bu dersimizde bu kadar arkadaşlar.
    Mustafa BÜKÜLMEZ
    Mustafa BÜKÜLMEZ
    Hazırladığım ve yüklediğim tüm dersleri deneyip çalıştığını onayladıktan sonra ekliyorum. Çalışmayan kodlar deneyimli kişiler için sorun olmayabilir ama yeni başlayanlar için problemdir. Hem yazılıma gönül vermiş sevgili arkadaşlarıma yardımcı olmak hem daha sonra lazım olduğunda arama süremi kısaltmak için paylaşıyorum.. -- *Bilgi paylaştıkça 






















    0 Yorum:

    MS-SQL Tablolardaki Kolon Bilgilerini Almak

    Mart 31, 2017 Mustafa BÜKÜLMEZ 0 Yorum

    Bu dersimizde MS-SQL de bir tablodaki kolonların adlarını ve diğer bilgilerini nasıl alacağımızı görelim.


    Selamlar,
    Bu dersimizde MS-SQL de bir tablodaki kolonların adlarını ve diğer bilgileriniz nasıl alacağımızı göreceğiz. Dinamik insert ve update denemelerimde gerek olmuştu bu yüzden burada da paylaşmak istedim.
    Tablodaki kolonların tüm bilgilerini almak için;
    SQL
    SELECT * FROM INFORMATION_SCHEMA.Columns WHERE TABLE_NAME = 'Tablo Adı'
    
    Aşağıdaki resimde de alabileceğiniz tüm bilglerin listesi mevcuttur.
    Resimde gördüğünüz gibi bu tüm bilgileri yukarıdaki sorgu ile alabilirsiniz.
    Bu dersimizde bu kadar arkadaşlar. 
    Bugün Kandil olduğu için de Kandiliniz Mübarek olsun.
    Bol kodlu günler.
    Mustafa BÜKÜLMEZ
    Mustafa BÜKÜLMEZ
    Hazırladığım ve yüklediğim tüm dersleri deneyip çalıştığını onayladıktan sonra ekliyorum. Çalışmayan kodlar deneyimli kişiler için sorun olmayabilir ama yeni başlayanlar için problemdir. Hem yazılıma gönül vermiş sevgili arkadaşlarıma yardımcı olmak hem daha... 

























    0 Yorum:

    SQL - AS komutu ile Tek Tablolda İç İçe Select Kullanımı

    Mart 18, 2017 Mustafa BÜKÜLMEZ 0 Yorum


    Selamlar arkadaşlar,
    Bu dersimizde tek tablo üzerinden iç içe select sorgusu yazdığımızda  (yani ana sorgu da Tablo1 üzerinde alt sorgularda Tablo1 üzerinde) şart olarak ID verdiğimizde alt sorguların sonuçlarının null gelmesi sorunun çözümünü anlatmaya çalışacağım. 
    Birbirine bağlı kayıtlar arasında bir analiz yapmamız gerektiğinde bu sorunla karşılaşıyoruz.
    Örn. URETIM_KAYITLARI tablomuzda 5 kaydımız var. 1. kayıt Giriş bilgisi kaydı diğer 4 kayıtta çıkış bilgi kaydı. Çıkış bilgisi kayıtlarının bir stununda da (örn SpecID) giriş kaydının ID bilgisini tutuyoruz diyelim.
    Sorgu şu şekilde;
    SQL
    select 
    
     (select sum(GirisKG)  as  KG  from URETIMKAYITLARI  WHERE SpecID = ID)-- Çıkış bilgisi Kaydı
    ,(select sum(GirisGen) as  GEN from URETIMKAYITLARI  WHERE SpecID = ID)-- Çıkış bilgisi Kaydı
    ,*
    
     from URETIMKAYITLARI 
    Sorgumuzu bu şekilde hazırladığımızda alt sorgulardan gelen sonuç her zaman NULLoluyor. Sebebini tam olarak bende bilmiyorum ama tablo ve stun adları aynı olduğundan karıştırıyor olabilir diye düşünüyorum. Ancak çözümü var. O çözümde stunları isimlendirmemize yarayan " AS " ' da. Daha fazla uzatmadan yukarıdaki sorgunun çalışan halini yazayım. 
    SQL
    select 
    
     (select sum(GirisKG) as  KG  from URETIMKAYITLARI as CikisUretimKaydi  WHERE CikisUretimKaydi.SpecID = GirisUretimKaydi.ID)
    ,(select sum(GirisGen) as GEN from URETIMKAYITLARI as CikisUretimKaydi  WHERE CikisUretimKaydi.SpecID = GirisUretimKaydi.ID)
    ,*
    
     from URETIMKAYITLARI as GirisUretimKaydi
    Örnek kodda gördüğünüz gibi AS kullanarak tablomuzuda isimlendirdik. Bu şekilde alt sorgulardaki tablonun farklı bir tablo gibi görünmesine ve bu şekilde sorgunun sorunsuz bir şekilde çalışmasını sağladık.

    Bu dersimizde bu kadar arkadaşlar.
    Diğer derslerimizde görüşmek üzere.

    0 Yorum:

    C# Kayit Esnasında Dolu/Boş Kontrolü Yapmak

    Mart 07, 2017 Mustafa BÜKÜLMEZ 0 Yorum

    Selamlar,
    Bu dersimizde C# da bir kayıt esnasında boşu boş kontrolü yaparak mecburi alanların boş geçilememesini nasıl sağlarız ona bir bakalım. Bu işi bir if şartı ile basitçe yapabiliriz.


    if (txt_adsoyad.Text == "" || txt_TCno.Text == "" || txt_Adress.Text == "")
                {
                    txt_adsoyad.BackColor = Color.Yellow;
                    txt_TCno.BackColor = Color.Yellow;
                    txt_Adress.BackColor = Color.Yellow;
                    MessageBox.Show("Renkli Alanlar Boş Geçilemez");
    
                }
                else
                {
                     //kayıt yada güncelleme işlemi
                }
    
    
    
    
    
    Örnekte benim her zaman kullandığım yöntemi görüyorsunuz. if şartı içerisinde " || " 
    ifadesi " veya " anlamına gelir. Yani 3 textboxt tan biri bile boş olursa üçününde 
    arkaplan rengini sarı yaparak boş geçilemez olduğununu söyleyen bir mesaj 
    çıkacaktır. En basit şekli ile boş dolu kontrolü bu şekilde yapılabilir.
    
    
    textboxların textchange eventi içerisinde de arkaplan renklerini eski haline
     getirebilirsiniz. Kendi fikirleriniz ve yöntemlerinizle bunu geliştirebilir 
    yada bu işi bir class a çekip otomatikleştirebilirsiniz.
    
    
    Classlar ile ilgili diğer derslerime buradan ulaşabilirsiniz.
    
    

    C# Class'lar ile Çalışmak

    C# Hadi Bir Class Hazırlayalım

    
    
    Bu dersimizde bu kadar arkadaşlar. Sonraki derslerimizde görüşmek üzere.
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    

    0 Yorum:

    C# ile String Üzerinde İşlemler

    Mart 04, 2017 Mustafa BÜKÜLMEZ 1 Yorum

    Bu dersimizde C# string veri türündeki içeriklerle oynayıp bir takım işlemler yapabiliriz. String değerlerindeki boşlukları silmek, baştan yada sondan karakter silmek gibi işlemleri yapabiliriz.
    Bu işlemin nasıl yapıldığını birazdan göreceğiz. Bu gibi temel bilgiler ileride çok işimize yarayacak.

    C#’da string ifadelerde alt satıra geçmek için “/n” ifadesini veya sadece “n” ifadesini kullanabiliriz.

    Programlamada sayılar 0 dan başlar yani 10 karakterli bir ifadenin son karakterin sırası 9 olur.
    0,1,2,3,4,5,6,7,8,9 

    Hemen kodlarımızı inceleyelim.

    1 - Bir karakteri istenen sayı kadar yazdırmak
    1
    2
    string cizgiEkle = new string("-", 50);
    label1.Text = cizgiEkle.ToString();

    Yukarıdaki kodumuzun yapacağı işlem "-" çizgi simgesini 50 kere yan yana yazar.


    2 - Bir yazının kaç karakter olduğunu bulmak (Length)
    1
    2
    string yazi = "csharpiledundenbugune.blogspot.com.tr";
    MessageBox.Show(yazi.Length);

    Yukarıdaki kodumuz yazi ismindeki string değerin kaç karakterden oluştuğunu gösterir. Integer(sayısal) değer döndürür.
    NOT: Programlama boşlukda bir karakter sayılmaktadır. Yani boşluk tuşuna basıp boşluk bıraktığınızda bu da bir karakter olarak sayılır. Programlama da gerçek boşluğu "NULL" ile ifade ederiz.


    3 - Bir yazının içerisinden bir bölümü silmek (Remove)
    1
    2
    3
    string yazi = "csharpiledundenbugune.blogspot.com.tr";
    string KalanYazi = yazi.Remove(0, 6);
    MessageBox.Show(KalanYazi .ToString());

    Yukarıdaki kodumuzda yazi ismindeki string değerin 0. karakterinden başlayarak 6 adet karakteri siler. Sonuç: "iledundenbugune.blogspot.com.tr" olur.

    4 - Bir yazının içerisindeki bir karakteri istediğimiz karakterle değiştirmek (Replace )
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    string kelime = "csharpiledundenbugune.blogspot.com.tr";
    MessageBox.Show(kelime.Replace('c', 'C'));
    string kelime2 = "csharpiledundenbugune.blogspot.com.tr";
    MessageBox.Show(kelime2.Replace('csharp', 'CSrp'));
    string kelime3 = "csharpiledundenbugune.blogspot.com.tr";
    MessageBox.Show(kelime3.Replace('Com', String.Empty));
    string kelime4 = "csharpiledundenbugune.blogspot.com.tr";
    MessageBox.Show(kelime4.Replace('Com', String.Empty).Replace('.', ''));

    Yukarıdaki kodumuzda kelime ismindeki string değerin;
             1 - Yazımızdaki tüm " c " ifadelerini " C " ile değiştirir.
             2 - Yazımızdaki tüm " csharp " ifadelerini " CSrp " ile değiştirir.
             3 - Yazımızdaki tüm " Com " ifadelerini siler (String.Empty silme işine de yarar.)
             4 - Burada diğer örneklerimizden farklı olarak 2 adet Replace kullandık. Bu şekilde de              kullanabiliriz. Yazımızdaki tüm " Com " ve " . " ifadelerini siler.

    5 - Bir yazının içerisinden bir bölümü almak (Substring)
    1
    2
    3
    4
    5
    6
    7
    //Kullanım 1
    string isim = "Mustafa BÜKÜLMEZ"; //Burada "M" 0.karakterdir. Bunu unutmamak gerekiyor
    MessageBox.Show(isim.Substring(0,6)); //Ekran çıktısı olarak "Mustafa" yı verecektir. 0.karakterden başlayarak 6 adet karakteri alır.
    //Kullanım 2
    string isim2 = "Mustafa BÜKÜLMEZ";
    MessageBox.Show(isim2.Substring(7)); //Ekran çıktısı olarak "BÜKÜLMEZ" i verecektir. 7.karakterden başlayarak son karaktere kadar seçim yapar.
    NOT: Yazı 15 karakter olsun. Almak istediğiniz karakter 15'in dışına çıkarsa hata verir.
    6 - Bir yazıyı karakterlerine ayırır. (ToCharArray)
    1
    2
    3
    4
    5
    6
    7
    8
    9
    //Kullanım 1
    char[] karakterler = kelime.ToCharArray(); // Anahtar bölüm işte burası, burada karakterler adında char türünde bir dizi oluşturuluyor ve içerisine atılıyor. Yani aşağıdaki foreach yerine karakterler[sayi] diyerek ulaşabilirsiniz.
     foreach (char karakter in karakterler) // Foreach bu tarz işlemler için tam anlamıyla biçilmiş kaftandır. Örnekte iyi olacağını düşünüyorum
      {
       listBox1.Items.Add(karakter); // Bu bölümde bulunan karakterleri listbox1 a sırayla ekliyor. Yani ekran çıktısı olarak sırasıyla alt alta;M,U,S,T,A,F,A, ,B,Ü,K,Ü,L,M,E,Z dir. Boşluklarında dahil olduğunu unutmayalım. Burada bir if kontrolü ile boşlukları eklemeyebiliriz.
      }
    //Kullanım 2
    char[] karakterler = kelime.ToCharArray(3,5); //SubStringteki mantık ile çalışır yani 3.index numarasından başlar ve daha sonraki 5 karakteri alır.


    7 - Bir yazı içerisindeki boşluklukları silmek (Trim)
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11

    string adSoyad = "   Mustafa BÜKÜLMEZ    ";

    //Kullanımı 1 (Trim)
    MessageBox.Show(adSoyad.Trim()); //Çıktı olarak boşluksuz şekilde "Mustafa BÜKÜLMEZ" yazacaktır. Kısaca ifadede ki boşlukları kaldırır.
    //Kullanım 2 (TrimStart)
    MessageBox.Show(adSoyad.TrimStart()); // TrimStart'da ise string ifadenin başındaki boşluğu kaldırır sonlarındaki boşlukları kaldırmaz. Çıktı olarak "Mustafa BÜKÜLMEZ  " yazacaktır. (Sonunda boşluk olacak şekilde)
    //Kullanım 3 (TrimEnd)
    MessageBox.Show(adSoyad.TrimEnd()); // TrimEnd'da string ifadenin sonundaki boşluğu kaldırır başındaki boşlukları kaldırmaz. Çıktı olarak "  Mustafa BÜKÜLMEZ" yazacaktır. (Başında boşluk olacak şekilde)


    8 - Bir yazının istediğimiz karakterlerle başlayıp başlamadığı yada bitip bittiğini kontrol etmek (StartWidth & EndsWidth)
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    string yazi = "Must";

    //Kullanım 1
    if(textBox1.Text.StartsWith(yazi))
       MessageBox.Show("Cümle Must ile başlıyor.");
    else 
       MessageBox.Show("Cümle Must ile başlamıyor.");


    //Kullanım 2
    if(textBox1.Text.EndsWidth(yazi1)) 
      MessageBox.Show("Cümle Must ile bitiyor.."); 
    else 
      MessageBox.Show("Cümle Must ile bitmiyor.");
    //NOT: If kullanımında yapılacak işlem tek satır ise açma kapama
    //parantezlerini kullanmanıza gerek yoktur. ";" satır sonu anlamına gelir.


    9 - Bir yazının tüm karakterlerini büyük harf yapmak (ToUpper)
    1
    2
    string isim = "Mustafa BÜKÜLMEZ";
    MessageBox.Show(isim.ToUpper()); //Çıktı olarak "MUSTAFA BÜKÜLMEZ" yazar.

    10 - Bir yazının tüm karakterlerini küçük harf yapmak (ToLower)
    1
    2
    string isim = "Mustafa BÜKÜLMEZ";
    MessageBox.Show(isim.ToLower()); //Çıktı olarak "mustafa bükülmez" yazar.


    11 - Bir yazıdaki belirli karakterlere göre yazıyı parçalamak (Split)
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    string adSoyad = "Mustafa BÜKÜLMEZ";
    string[] parclar = adSoyad.Split(' ');
    for (int i = 0; i < parcalar.Count(); i ++)
    {
    MessageBox.Show(parcalar[i]);
    }
    //Her boşluk gördüğünde adSoyad değerini parçalayarak parcalar adlı
    //dizi içerisine ekler. For döngüsü ile sıra numarasına göre ekrana
    //yazdırabiliriz. Genelde bu işlem " - " ile ayrılmış bir serial
    //kodunu sırası ile ilgili textbox lara yazdırmaz için kullanılır.
    // Split ('-') şeklinde kullanırsınız.

    12 - Bir değişkeni string değre dönüştürme (ToString)
    1
    2
    int sayi = "123456";
    MessageBox.Show(sayi.ToString()); //int değişkenini string bir değere dönüştürdük


    13 - Bir yazının sonuna başka yazı eklemek (Insert)
    1
    2
    3
    4
    5
    6
    string yazi1 = "Mustafa",yazi2 = "BÜKÜLMEZ";
    string SonYazi = "";
    SonYazi = yazi1.Insert(yazi1.Lenght, yazi2);
    //bu kodda yazi2 yi yazi1 in ortasına da ekleyebiliriz.
    SonYazi = yazi1 + yazi2 ;
    // bu şekildede iki string'i yan yana ekleyebiliriz.

    SonYazi değişkenine yazi1 in indeks(örnekte son karakter oluyor.). elemanından sonrasına yazi2 stringini yerleştirir ve tutar.


    bu dersimizde bu kadar arkadaşlar diğer derslerimizde görüşmek üzere.







    1 Yorum: