C# İle SqlDataReader Kullanımı

24.10.2012 Hikmet Okumuş 19215 11 C#


Bir ya da birden fazla satırların sonuç olarak döneceği sorgularda SqlCommand' ın ExecuteReader özelliği kullanılmaktadır. ExecuteReader geriye SqlDataReader tipinde veri döndürmektedir.
SqlDataReader, sadece okunabilir olarak kullanılmaktadır. Satır satır okuma işlemi yapılmaktadır. SqlDataReader kullanımı boyunca veritabanı bağlantısı açık olacaktır. Çünkü SqlDataReader veritabanı ile bağlantılı olarak çalışmaktadır. Okuma işlemi sona erdiğinde SqlDataReader bağlantısınında kapatılması gerekmektedir.
        private void btnDataReader_Click(object sender, EventArgs e)
        {
            SqlConnection con = new SqlConnection(BaglantiAdresi);
            SqlCommand cmd = new SqlCommand();
            cmd.Connection = con;
            cmd.CommandText = "SELECT Adi FROM Kisiler";
            con.Open();

            SqlDataReader dr = cmd.ExecuteReader();

            ArrayList Isimler = new ArrayList();

            while (dr.Read())
            {
                Isimler.Add(dr["Adi"]);
            }

            dr.Close();
            con.Close();
        }
Okuma işlemi SqlDataReader nesnesinin Read() metodu ile yapılmaktadır. Read() metodu geriye bool türünde değer döndürmektedir. Okunacak satır var ise true, yoksa false değerini döndürmektedir.
Bildiğiniz üzere while döngüsü koşul true olduğu sürece icra edilmektedir. Burada da Read() metodu true değerini aldığı sürece işlem görmeye devam edecektir. İşlem sonunda ise SqlDataReader nesnesi Close() metodu ile kapatılmaktadır.

Başarılar dilerim.


Kullanıcı Yorumları


hikmet okumuş makale yorum
Gökhan ARSLAN
09.05.2014 01:07:06
Paylaşım için teşekkür ederiz öncelikle. Bir sorum olacak. Kullanıcı kaydı yaptırıyorum. Yeni kayıtta girilen kullanıcı adının veri tabanımda kayıtlı olup olmadığını nasıl kontrol ettirebilirim? Eğer o kullanıcı adı varsa kaydı yapmayacak. yardımcı olabilir misiniz?
hikmet okumuş makale yorum
Hikmet Okumuş
09.05.2014 10:55:40
Merhaba Gökhan ARSLAN, Bu kontrolü yapabilmek için öncelikle kendine tablo üzerinde uygun bir alan belirlemelisin. Örnek olarak KİSİLER tablosunda aynı değere sahip olmayacak alanların birisi TC NUMARASI alanı olmalıdır. Yukarıda bahsettiğin gibi eğer aynı TC Numarası ile sisteme yeni bir kayıt eklenmek istenirse sistem uyarı verecek ya da girilen TC Numarası sisteme daha önce hiç eklenmedi ise yeni bir kayıt oluşacak. Bu uyarlamaya göre aşağıdaki senin için hazırladığım bir metod bulunmakta. Kendine göre revize ederek sorunun cevabını bulabilirsin. *********************************** public void Insert(int TC_NO, string AD, string SOYAD) { OleDbConnection conn = new OleDbConnection(AccessConnString); OleDbCommand cmd = new OleDbCommand("SELECT COUNT(*) FROM KISILER WHERE TC_NO = @TC", conn); cmd.Parameters.AddWithValue("@TC", TC_NO); conn.Open(); int count = (Int32)cmd.ExecuteScalar(); if (count > 0) { MessageBox.Show("Sistemde olan bir TC No girdiniz."); conn.Close(); return; } cmd = new OleDbCommand("INSERT INTO KISILER (TC_NO, AD, SOYAD) VALUES (@TC, @AD, @SOYAD)", conn); cmd.Parameters.AddWithValue("@TC", TC_NO); cmd.Parameters.AddWithValue("@AD", AD); cmd.Parameters.AddWithValue("@SOYAD", SOYAD); cmd.ExecuteScalar(); conn.Close(); MessageBox.Show("Kayıt eklendi."); }
hikmet okumuş makale yorum
Gökhan ARSLAN
11.05.2014 22:20:04
Hay Allah razı olsun kardeş yaptım oldu sağolasın :) Bir başka sorum daha olabilir mi aceba? Sorum şöyle: Benim yapmam gereken projem var bunu da gelir gider otomasyonu olarak belirledim. web uygulamalı olarak yapacağım. isteyen herkes bu sisteme girecek kayıt olabilecek ve kendine ait bir kaydı olacak. gelirini ve giderini kaydedebilecek. bunun için kaydolan her kullanıcıya bir tablo mu açmam gerekir? bilgilerini ayrı ayrı tutmam için.. Bunun cevabını merak ediyorum kardeş şimdiden teşekkür ederim
hikmet okumuş makale yorum
Hikmet Okumuş
11.05.2014 23:08:20
Merhaba Gökhan ARSLAN, Her bir kullanıcı için ayrı tablolar açman çok yanlış bir yöntem olur. Sisteme kayıtlı kullanıcıları tuttuğun "Kullanıcılar" tablosunda her bir kullanıcıya ait "ID" değerlerin olacaktır. Uygulamanda kullanıcı örnek olarak ödeme yapsın ve kayıt atılacak bu tabloyada biz "Odemeler" diyelim. Bir kullanıcı ödeme yaptığı zaman "Odemeler" tablosuna kayıt atacaksın. Ödemeler tablosuna kayıt atarken geriye dönük izleme açısından atmış olduğun kayıt ile kullanıcıyı ilişkilendirmen gerekmekte. Bunun için "Odemeler" tablosunda "KullanıcıId" gibi bir alan olmalı. Bu alanı işlemi yapan kullanıcının "Id" bilgisi ile setlersen sistemde binlerce kullanıcı işlem yapsın hiç sorun olmaz. Tüm kullanıcıların ödemelerini düzenli bir şekilde tek bir tablo üzerinde tutmuş olursun. Burada en önemli nokta böyle bir sistemi yazmadan önce sistemi kurgulamak. Sistemi doğru kurgulamadıktan sonra ne kadar kaliteli kod yazarsak yazalım her zaman bir yerde eksiklikler olaraktır. Kurgu şemanı tam olarak belirlemeni ve ondan sonra yazılıma dökmeni tavsiye ederim. Başarılar.
hikmet okumuş makale yorum
Gökhan ARSLAN
11.05.2014 23:12:55
Haklısınız.. Teşekkür ederim ellerinize sağlık
hikmet okumuş makale yorum
Hikmet Okumuş
11.05.2014 23:13:36
Rica ederim.
hikmet okumuş makale yorum
Caner Can
13.05.2014 07:16:25
Hikmet bey bir sorum olacak; Ben veri tabanı oluşturmuştum. Bu veri tabanında üniversite bölümleri ve enstitüler var. Yukarıdaki kod ile listbox'a sadece bölümleri çektim. İstediğim şu ListBox içerisindeki bölüme tıkladığımda yine veri tabanın enstituler sütunundaki bilgiyi başka bir listbox'a yazdırmak... Bunun için hangi kodu kullanmayım.
hikmet okumuş makale yorum
Hikmet Okumuş
13.05.2014 22:38:27
Merhaba Caner Can, Muhtemelen bire çok ilişki türünde bir kurgu oluşturmak istiyorsun. Şöyle; Bölüm olarak "A Bölümü", Enstitü olarak ise "1. Enstitü", "2. Enstitü" ve "3. Enstitü" olsun. Bu ilişkiyi kurmuş olman gerekmekte. Detay tablosu içerisindeki her satırda ilgili üst satıra ait "Id" bilgisi yer almak zorundadır. 1. ListBox içerisine bölümleri çektin. Seçtiğin bölümün Id değeri ile Enstitü tablosuna select çekmen gerekmekte. "Select * From Enstitü Where BolumId = 1" Bu sorgunun sonucu sana seçtiğin bölümün Enstitü koleksiyonunu döndürecek. Dönen sonucu artık 2. ListBox içerisinde gösterebilirsin.
hikmet okumuş makale yorum
emin
02.04.2015 17:31:27
çok teşekkürler bu değerli yazı için.
hikmet okumuş makale yorum
seda
03.05.2015 15:54:42
merhaba ben bir kullanıcı giriş yaptırmaya çalışıyorum mssql de kodlarım bunlar aldıgım hata ise Cannot open database "db_kullanici" requested by the login. The login failed. Login failed for user 'ultraaslan\Seda'. bunu nasıl çözebilirim ? if (String.IsNullOrWhiteSpace(textBox1.Text) || String.IsNullOrWhiteSpace(textBox2.Text)) { MessageBox.Show("Giriş Başarısız! Eksiksiz Giriniz!", "..:: HATA ::..", MessageBoxButtons.OK, MessageBoxIcon.Warning); } baglanti.Open(); string sql = "SELECT * FROM tbl_kullanici WHERE KAdi=@KAdi AND KSifre=@KSifre"; SqlParameter prms1 = new SqlParameter("@KAdi", textBox1.Text); SqlParameter prms2 = new SqlParameter("@KSifre", textBox2.Text); SqlCommand cmd = new SqlCommand(sql, baglanti); cmd.Parameters.Add(prms1); cmd.Parameters.Add(prms2); DataTable dt = new DataTable(); SqlDataAdapter da = new SqlDataAdapter(cmd); SqlDataReader dr = cmd.ExecuteReader(); da.Fill(dt); baglanti.Close(); if (dt.Rows.Count > 0) { MessageBox.Show("Hoşgeldin"); } else { MessageBox.Show("Veritabanında böyle bir kullanıcı bulunamadı"); } }
hikmet okumuş makale yorum
Hikmet Okumuş
04.05.2015 22:07:20
Merhaba Seda, Almış olduğun hata kodunu Google' da aratırsan görsel sonuçlar bulabilirsin.


Yorum