Derinlemesine yazılım eğitimleri için kanalımı takip edebilirsiniz...

ADO.NET Tek SqlCommand Nesnesinde Birden Çok Sorgu Çalıştırmak

Bu yazımda tek SqlCommand nesnesinde birden çok sorguyu nasıl çalıştıracağımızı anlatacağım.SqlCommand nesnemizde birden fazla çalışacak sorgu tanımlayıp,tek seferde sırayla hepsini çalıştırabiliriz.
T-SQL de birden çok sorguyu yan yana çalıştırmak için “;” karakterini kullanıyoruz.SqlCommand nesnemizin CommandText özelliğine sorguları aralarına “;” karakterini koyarak yazabiliriz.
Öncelikle aşağıdaki örnekler de bir tane ListBox kontrolü kullanacağımı şimdiden değinmek isterim.

            SqlConnection baglanti = new SqlConnection("Server=GENÇAY-GENÇAY;database=northwind;trusted_connection=true;");
            baglanti.Open();
            SqlCommand cmd = new SqlCommand("Select Adi,Soyadi from Personeller;Select PersonelId,Sehir from Personeller", baglanti);
            SqlDataReader dr = cmd.ExecuteReader();

Yukarda gördüğünüz gibi SqlCommand nesnemize 2 tane sorgu eklenmiştir.C# ile bu sorguları sırayla okutmamız gerekecektir.Tabi ilk etapta 1. sorguyu okuyor ve SqlDataReader nesnemize verileri cekiyor.Asıl mevzu sisteme SqlCommand’ımızda başka sorgu var mı yok mu ? kontrol ettirmemiz gerekiyor.Eğer varsa onu okutmamız gerekiyor.Bu kontrolü yapmadan bool tipinden bir değişken oluşturuyorum.Bakın şimdi ne yapacam.

bool baskasorguvarmi;
            do
            {
                while (dr.Read())
                {
                    listBox1.Items.Add(dr[0] + " " + dr[1]);
                }
                baskasorguvarmi = dr.NextResult();
            } while (baskasorguvarmi);

            baglanti.Close();

Yukardaki kod bloğunu detaylı anlatmaya çalışıyım.İlk sorgumuzdaki veriler SqlDataReader’a yüklendiğinden ilk etapta ListBox kontrolüne ilk sorgunun “Adi” ve “SoyAdi” kolonları yükleniyor.While döngüsü bittikten sonra SqlDataReader(dr) nesnemizi dr.NextResult() metoduyla kontrol ediyoruz.
NextResult() metodu şu anlama geliyor.Eğer SqlDataReader(dr) içindeki SqlCommand(cmd) içinde “;” karakteriyle ayrılmış başka sorgu var mı?Varsa True,yoksa False dönecektir.VE EĞER TRUE DÖNÜYORSA OTOMATİKMAN DİĞER SORGUYU AKTİF HALE GETİRİR.Ve bu değeri bool tipindeki baskasorguvarmi değişkenine atıyoruz.
Varsayalım True döndü ve otomatikman diğer sorgu aktif hale getirildi.Do while döngüsü yeniden faaliyete geçti.Program akışı Do while döngüsü içinde ki while döngüsüne girdiği zaman bu sefer 2. sorgudaki “PesonelId” ve “Sehir” verileri ListBox’umuza eklenecektir.
Farkındaysanız SqlDataReader(dr)’dan verileri çekerken dr[“KolonAdi”] şeklinde değilde dr[indexNo] şeklinde girdik.Bunun sebebi,diğer sorgudaki kolon isimleriyle ilk sorgudakilerin uyumlu olmama riskidir.İlk dönüşte ilk sorgudaki “Adı” isimli kolon çekilirken,ikinci dönüşte ikinci sorgudaki çekilen kolonun adı “Adı” olmayabilir.Ha birde sorgulardaki kolon sayıları aynı olmasına dikkat edin.İşiniz daha kolay olur.Farklı olursa eğer şartlarla,döngülerle işlemlerimiz gerçekleştirilebilir(dr.FieldCount).Burada anlatmak istediğim çok karışık olmuş olabilir 🙂
Farkındayım bu yazım çok karışık oldu.Ama umarım faydasını görürsünüz 🙂 Sonraki yazılarda görüşmek dileğiyle
İyi çalışmalar…

Bunlar da hoşunuza gidebilir...

1 Cevap

  1. byemko dedi ki:

    asp. net kullanan biri olarak daha basit bir yol var repeater nesnesini kullanın nasıl kullanıldıgına nternetten bakabilirsnz

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir