• Anasayfa
  • Hakkımızda
  • Etkinlikler
  • Destek Verin
  • Site Haritası
  • Giriş Yap
  • Üye Ol
  • Facebook
  • Twitter
  • RSS
Yazılım Dilleri
  • Soru - Cevap
  • EĞİTİM SETİ
  • KATEGORİ
  • DUYURU
  • TEKNOLOJİ HABERLERİ

Son Sorular

  • 23.04.2016 00:55:33C programlama 2 oyun
  • 20.04.2016 16:34:41Local Database
  • 15.04.2016 14:26:15Fatura kayıt işlemi
  • 21.03.2016 01:55:30C# problem

Popüler Sorular

  • 27.05.2012 05:49:50Asp.Net ile Date time alana veri ekleyemiiyorum ?
  • 2.04.2012 00:45:18.exe uzantılı dosya için dijital imza nerde nasıl alınır.
  • 12.05.2012 08:44:49Acil Yardım
  • 27.05.2012 13:46:51veri tabanı bağlantısı
  • .Net Framework
  • 8085 Assembly
  • Active Directory
  • ADO.NET
  • Android
  • Apple IOS
  • Arduino
  • ASP.NET
  • ASP.NET MVC
  • Blackberry
  • C#.Net
  • C++
  • CCG Framework
  • CISCO
  • CSS
  • Diğer
  • Dreamweaver
  • Entity Framework
  • Exchange Server
  • Gömülü Sistemler
  • GSM Programlama
  • Güncel
  • Güvenlik
  • HTML5
  • Java
  • Javascript / JQuery
  • Jira
  • Kariyer ve İş Yaşamı
  • LINQ
  • LibreOffice
  • Linux
  • Matlab
  • Microsoft Dynamics CRM
  • Mobil Uygulama Geliştirme
  • MySQL
  • NoSQL
  • Oracle
  • OWIN
  • PFSense
  • PHP
  • Powershell
  • Python
  • Sanallastirma
  • SAP-ABAP
  • SCOM 2012
  • SEO
  • Sharepoint 2010
  • Sharepoint 2013
  • Silverlight
  • Sistem Analiz ve Tasarımı
  • SQL Server
  • Symantec
  • TFS
  • T-SQL
  • Ubuntu
  • VB.NET
  • Veritabanı Yönetim Sistemleri
  • Visual Studio
  • VMware
  • WCF
  • Web Hosting
  • Windows 8
  • Windows Azure
  • Windows Phone 7.1
  • Windows Phone 8
  • Windows Server
  • Wordpress
  • WPF
  • Xamarin
  • XNA
  • Yazılım Mühendisliği
  • Yöneylem Araştırması
  • ASP.NET MVC
  • Entity Framework
  • Javascript / JQuery
  • LINQ
  • PHP

Son Duyurular

IPhone 6 ve IPhone 6 Plus Teknik Özellikleri ve Fiyatı

IPhone 6 ve IPhone 6 Plus Teknik Özellikleri ve Fiyatı

DELL'in Yeni Projesi: USB Bilgisayar (Project Ophelia)

DELL'in Yeni Projesi: USB Bilgisayar (Project Ophelia)

Windows Phone Youtube Uygulaması Google ve Microsoft ile Yeniden Yapılıyor

Windows Phone Youtube Uygulaması Google ve Microsoft ile Yeniden Yapılıyor

Android ve Apple IOS Telefonlar için Blackberry Messenger (BBM)

Android ve Apple IOS Telefonlar için Blackberry Messenger (BBM)

Nokia Lumia 925 Teknik Özellikleri, Lumia 928 ve 920 ile Karşılaştırması

Nokia Lumia 925 Teknik Özellikleri, Lumia 928 ve 920 ile Karşılaştırması

LG Optimus G Pro Özellikleri ve Gözle Video Oynatma Teknolojisi

LG Optimus G Pro Özellikleri ve Gözle Video Oynatma Teknolojisi

ADO.NET & Erişim Sınıflarından DataReader ve DataAdapter Sınıfları

Merhaba değerli yazılımcı / programcı arkadaşlar; Bir önceki yazımızda ADO. NET ile veri erişim sınıflarından Command Sınıfı ve bu sınıfa ait yapılandırıcıları (constructor) , metotları ve CommandTyp

26.06.2012

Yazar: Muhammed ÖNAL (Google+)

Kategori: ADO.NET

11996

 ADO.NET & DATA ACCESS CLASS (Veri Erişim Sınıfları )

DataReader ve DataAdapter Sınıfı

Merhaba değerli yazılımcı / programcı arkadaşlar;

Bir önceki yazımızda ADO. NET ile veri erişim sınıflarından Command Sınıfı ve bu sınıfa ait yapılandırıcıları (constructor) , metotları ve CommandType özelliğini , Command nesnesinden geriye tek değer döndürebilmeyi bir uygulama dahilinde hem Vb.NET hem de C#.Net kod geliştirme ortamlarında göstermiştik. Bu yazımızda ise yine Veri Erişim sınıflarından DataReader  ve DataAdapter Sınıflarını detaylarıyla ele alacağız.

 

Bir önceki Command sınıfına dair yazımızda komutların birden fazla satırlık veri döndürebileceği durumlarda Command.ExecuteReader() metodunu kullanacağımızı söylemiş ve  bu kullanımın DataReader nesnesini geriye kayıt döndürdüğünü belirtmiştik.ExecuteReader ile dönen kayıtlar DataReader nesnelerine aktarılır.

Projelerimizde çalıştırdığımız SQL yada Stored Procedure cümlemiz, geriye birden çok değer veya kayıt kümesi döndürebilir. İşte bu tür durumlar için DataAdapter veya DataReader nesnelerini kullanarak verilerimizi satır satır okutabilir, buradan elde ettiğimiz sonuçları başka kontrollerde kullanabiliriz.

Buraya kadar okuduğunuzda noktayla sonuçlanan cümlemizin sonunda aklınızda eminim ki şöyle bir soru oluşmuştur. Peki, biz hangi metodu kullanarak DataReader nesnesi ile verilerimizi satır satır okutabiliriz?

Cevap:  Elbetteki cevabımız; DataReader.Read() metodu olacaktır. Buradaki Read() metodu her defasında tek bir satırı okumak için tekrar tekrar çağrılmış olacaktır.

Hemen ardından şu soruyu sormamız gerekir:

>> Verimizi satır satır okuttuk, Read() metodu satırı yakaladığı anda ne olacaktır?

       Read() metodu satırı yakaladığı anda true değerini döndürürmüş olacaktır.

       Aksi durumda, satırı yakalayamazsa false değerini döndürecektir.

Evet, değerli dostlarımız DataReader nesnesinin görevini açıklamış olduk. Peki, ya DataAdapter?
Hemen sorularımıza bir soru daha katarak , sorumuza cevap arayalım
J

Soru:  DataReader ile DataAdapter arasındaki genel fark nedir?

Cevap: ikisi arasındaki genel fark; DataReader nesnesi Bağlantılı (Connected), DataAdapter nesnesi ise Bağlantısız (Disconnected) veri ortamları için kullanılır.

Makalemizi ilk defa okumakta olan değerli arkadaşlar ( Bağlantılı ve Bağlantısız veri ortamları için ADO.Net ile ilgili önceki yazılarımızı okuyabilirler.

Dilerseniz, değerli yazılım üstadlarımız , DataReader nesnesini biraz daha beynimizde görselleştirerek somut hale getirelim. Olur mu? J olur olur. neden olmasın J

DataReader nesnesinin kullanım senaryolarına baktığımızda şunları diyebiliriz:

-          Tablodan tek kayıt döndürmek.(Musteri tablosundan MusteriID’ye göre kayıt döndürmek)

 

-          Sadece okunur sonuçlar döndürmek. (Web Form üzerinde aranan ürünlerin, sonuçlarını döndürmek )

 

NOT :

 

-       DataReader nesnesi kolonların içinde değer olup olmadığını kontrol edebilecek özelliği de sahiptir.

 

-       Kolonların şema bilgilerini okur. (ColumnName, ColumnOrdinal, ColumnSize, NumericPrecision, NumericScale, DataType, ProviderType, Islong, AllowDBNull)

 

DataReader nesnesinin en büyük avantaklarından biri de hiç kuşkusuz : “Verilere tek yönlü (forward-only) ve okunabilir (read-only) eriştiği için oldukça hızlıdır”  Söyleyebiliriz.

 

SQL Server için DataReader :   >> SqlDataReader

Diğer seçenekler için ise       :   >> OleDbDataReader

 

NOT:  DataReader bağlantılı (connected ) veri ortamlarında kullanıldığı için, veri kaynağına sürekli bağlıd olduğundan dolayı  veri alış işlemi bittikten sonra Connection ya da DataReader nesnesi kapatılarak, memory’nin daha etkin kullanılması sağlanır.

 

 

Şimdi sizlere Bazı Önemli DataReader Metotları’nı tablo halinde göstermek istersek:



Metot

Açıklaması

Close

DataReader nesnesini kapatılır ve hafızadan kaldırır.

GetBoolean

Belirli bir kolonun değerini boolean olarak geri döndürür.

GetChar

Belirli bir kolonun değerini char olarak geri döndürür.

GetDateTime

Belirli bir kolonun değerini DateTime olarak geri döndürür.

GetFloat

Belirli bir kolonun değerini Float olarak geri döndürür.

GetInt16

Belirli bir kolonun değerini 16-bit tamsayı (Short) olarak geri döndürür.

GetInt32

Belirli bir kolonun değerini 32-bit tamsayı (Integer) olarak geri döndürür.

GetInt64

Belirli bir kolonun değerini 64-bit tamsayı (Long) olarak geri döndürür.

GetName

Belirli bir kolonun ismini geri döndürür.

GetString

Belirli bir kolonun değerini string olarak geri döndürür.

GetValue

Belirli bir kolonun değerini geri döndürür.


NextResult

Komut metninde birden fazla SELECT ifade varsa, sonuçlar

bu metot kullanõlarak farklõ veri kümeleri gibi alõnabilir.


Read

DataReader nesnesinde okunacak kayıt olduğu sürece okuma yapar. Kayıt varsa True, yoksa False değeri geri döndürür.

Şeklinde gösterebiliriz.

Siz değerli dostlarımız için En önemli DataReader Properties (özellikleri) yine bir tablo ile verecek olursam:

 

Property

Açıklaması


FieldCount

 


DataReader içinde tutulan sütun sayısını belirtir.


IsClosed


DataReader bağlantının durumunu belirtir. Bağlantı açık ise FALSE, kapalı ise TRUE döndürür.


Item

 

DataReader ile gelen verilere erişim sağlar.


RecordAffected


DataReader ile gelen kayıt sayısını verir.

 

 

ADIM ADIM DataReader Nesnesini gerçekleştirmek için;

 

DataReader kullanarak kayıt çekmek için aşağıdaki adımları sırasıyla takip edersek:

 

-          Bağlantı yapacağımız veritabanına göre Connection nesnesi eklenir.

-          Bağlantı yapacağımız veritabanına göre OleDbCommand veya SqlCommand nesnesi eklenir ve gerekli özellikleri ayarlamalar yapılır.

-          Veritabanı bağlantısı açılır.

-          DataReader tanımlanır. Command nesnesinin ExecuteReader metodu ile çağrılan kayıtlar DataReader nesnesine atanır.

-          DataReader nesnesinin Read metodu False oluncaya kadar, kayıtlar Döngü ile okunur ve form kontrollerine aktarılır.

-          DataReader kapatılır.

 

Örnek Uygulama:  ASP.NET web uygulaması ile hem Vb.NET hemde C#.Net dillerinde geliştireceğimiz bir uygulamamızı yazalım. Categories adlı bir tablomuzu veritabanından çekeceğiz. Ve sonuçlarımızı web sayfamızda göstereceğiz.

 

 

.aspx

 

 Önceki makalelerimizden de hatırlayacağımız üzere System.Data.SqlClient; namespace ‘i isim alanına eklemeyi unutmuyoruz. Ve C#.Net kodlarımız aşağıdaki gibidir.

 

dtReader.aspx.cs

 

 

Bir de VB.Net tarafındaki kodlarımızı inceleyelim:

 

.aspx


 

 

dtReader.aspx.vb

 

 

Vb.net ait kodlarımızda yukarıdaki gibidir değerli dostlar.

Hemen aklınıza bu şekilde bir soru geldiğini tahmin edebiliyorum: Peki, bu işlemler nasıl gerçekleşti?

 

İşlemlerimizin gerçekleşme sıranı inceleyelim sevgili arkadaşlar.

 

1.Adım:

Bağlantımızı Connection Nesnesi ile gerçekleştirdik ve C# ile Vb.net ait kodlar aşağıdaki gibiydi:

 

C#.Net

SqlConnection baglanti = new SqlConnection("Data Source=.; Initial Catalog=myDataAccess; Integrated Security=True");

 

Vb.Net

Dim baglanti As SqlConnection = New SqlConnection("Data Source=.; Initial Catalog=myDataAccess; Integrated Security=True")

 

 

2.Adım:

 

İkinci adımımızda bağlantımızın durumunu kontrol ettik. Yani kapalı ise bağlantımızı open() metodu ile açtık.

C#.net

if (baglanti.State == ConnectionState.Closed)

{

  baglanti.Open();

}

 

Vb.net

If baglanti.State = ConnectionState.Closed Then

   baglanti.Open()

End If

 

3.Adım:

 

Bu adımımızda ise bağlantı kurduğumuz veritabanımıza gerekli Sql sorgu cümlesini bildirmek için Command nesnesinin nimetlerinden faydalandık J

 

C#.Net


SqlCommand sorgu = new SqlCommand("select * from Categories", baglanti);

 

Vb.Net

Dim sorgu As SqlCommand = New SqlCommand("select * from Categories", baglanti)

 

 

4.Adım:


Bu adımımızda geri döndürdüğümüz değerlerimiz birden fazla satır olduğundan ExecuteReader gereksiniminden dolayı DataReader nesnesini kullandık.

 

C#.Net


SqlDataReader dr = sorgu.ExecuteReader();

 

Vb.Net

Dim dr As SqlDataReader = sorgu.ExecuteReader()

 

 

5.Adım:

 

While döngümüz ile DataReader.Read() metodumuzu çağırdık.

Yukarıda da bahsetmiştik. DataReader.Read() metodu döngünün her aşamasında bize bir veriyi getirecek ve ta ki Read() metodu son kayıttan sonraki veriyi yakalayamayacağı anda false değerini döndürerek while döngüsünü sonlandırana kadar.

 

C#.Net

while (dr.Read())

{

  Response.Write(dr["CategoryName"] + "</br>");

}

 

Vb.Net

While dr.Read()

  Response.Write(dr("CategoryName") + "</br>")

End While

 

 

6.Adım : ve son adımımızda da bağlantımızı ve DataReader nesnemizi kapatıyoruz.

 

C#.net

dr.Close();

 

baglanti.Close();

 

Vb.Net

dr.Close()

 

baglanti.Close()

 

 

 

 

Şimdi az önceki vermiş olduğumuz örneğimizi farklı bir kullanım biçimi ile gerçekleştirelim.

 

SqlDataReader. HasRows özelliği ile sorgu sonrasında dönecek değerde satır olup olmadığını kontrol edebiliyoruz. Verilerde ki bir sonra ki sonuç kümesine ise NextResult() metodu ile gerçekleştirebilme olanağına sahibiz. ( Try, Catch,finally metodunu kullanarak )

 

C#.net için kodlarımız aşağıdaki gibi olacaktır:

 

 

Vb.Net ait kodlarımız ise aşağıdaki gibi olacaktır.

 

 

 

Son olarak değineceğimiz metot ise SqlDataReader. GetValue() metodu ve IsDbNull() metodudur.

Yukarıda metotlar tablosunda verdiğimiz bu metodlarımızı şu şekilde de kullanabiliriz.

 

Örneğin ; GetValue() metodumuzla object formatında değerler alabiliriz.

 

object deger = dr.GetValue();

 


Vb.Net için ise;

 

Dim deger As Object =  dr.GetValue()

 

 

Bu işlemi bizler genelde indexleyiciler, daha az kod yazıldığı için tercih ederiz.

 

object deger = dr[1];

 

veya

 

Vb.Net için:  

 

Dim deger As Object =  dr(1)

 

Index’de ki sütunun bir null değere sahip olmadığı bilgisi SqlDataReader.IsDbNull() metodu ile sağlanır. Bool türünde bir değer döndürerek geriye dönen değern true olması durumunda belirtilen alanın null değer içerdiği sağlanır.

 

C#.net

int? degerNo;

 

if (reader ["DegerNo"] ==DBNull.Value)

{

  degerNo = null;

}

else{

   degerNo = (int?)reader["DegerNo"];

}

 

 

Ve

 

Vb.net

Dim degerNo As int?

 

If reader("DegerNo") =DBNull.Value Then

  degerNo = Nothing

Else

   degerNo = CType(reader("DegerNo"), int?)

 

End If

 

 

Şeklindedir.

 

Bugünlükte bizden bu kadar diyor ve makalemizin sonuna gelmiş bulunuyoruz. Kafanıza takılan soru işaretleri var ise mail yoluyla sorularınızı iletebilirsiniz.

Yazılım ve Programlama aşkı ile tutuştuğumuz bir sonraki yazımızda görüşmek dileğiyle.

NOT:
Bu makalemizde de gerek yerli gerek yabancı kaynakları tarayarak ve gerek kendi bilgi ve tecrübelerimizden kattığımız Programlama dünyasında ADO. NET ile veri erişim sınıflarından DataReader ve DataAdapter Sınıfı ve bu sınıflara ait metotları değer döndürebilmeyi bir uygulama dahilinde hem Vb.NET hem de C#.Net kod geliştirme ortamlarında göstermiş olduk. Bir sonraki makalemizde ADO.NET’ e ait temel Veri tabanı işlemleri geliştirerek veri tabanı tasarımı yapacağız.Programlama dünyasının bu büyülü dünyasına adım atan arkadaşlara yol gösterici olması amacıyla faydalı olması dileğiyle. Bir sonraki makalemizde görüşmek dileğiyle şimdilik hoşça kalın.

Saygılarımla;


Muhammed ÖNAL
Bilgisayar Mühendisi
RFID Sistemleri Uzmanı
BT Yönetişimcisi

Blog:  http://www.muhammedonal.com
Web : http://www.yazilimdilleri.net


Copyright © Muhammed ÖNAL , 2012


 

 

Yazar Hakkında

Muhammed ÖNAL

Muhammed ÖNAL

www.muhammedonal.com

Bilgisayar Mühendisi | RFID Sistemleri Uzmanı | BT Yönetişimcisi | Strateji Planlama ve İş Geliştirme 2015 itibariyle sağlık sektöründe Bilgi Sistemleri Yöneticisi ve Üst yönetim Stratejik Planlama ve İş Geliştirme Koordinatörü pozisyonunda çalışmaktadır.

Sosyal Medya

ORANLAR

  • 11996izleme

Arkadaşlarınla Paylaş

  • Tweet

0 Yorum

Yorum Yaz / Soru Sor

Lütfen yorum yazmak veya soru sormak için üye girişi yapınız.

Son Yorumlar

  • Hocam Link başka sayfaya yönlendiriyor.
  • merhaba benim merak ettiğim bir konu var y...
  • Merhaba download linki çalışmıyor. Rica et...
  • Nevzat Bey selamlar, Açıkçası bizler a...
  • Parametreleri Cache İşleminden Yalıtma kon...

En Güncel Sorular

  • Bilgilendirme maili (C#.Net)
  • Power Pivot (Sharepoint 2010)
  • BigInteger, BigDecimal (Asp.Net ve Asp.Net MVC)
  • visual C# ile asp nette veritabanı islemleri (Asp.Net ve Asp.Net MVC)
  • Share Point ile Dosya Arşiv Yönetim Sistemi yapılabilir mi ? (Sharepoint 2010)

En Son Cevap Verilen Sorular

  • Bilgilendirme maili
  • BigInteger, BigDecimal
  • visual C# ile asp nette veritabanı islemleri
  • Share Point ile Dosya Arşiv Yönetim Sistemi yapılabilir mi ?
  • txt dosyasına veri yazma

Twitter

Takip et: @yazilim_dilleri

En Çok Okunanlar

Elif BAYRAKDAR

C# ile SQL Server Bağlantısı, Insert, Update ve Delete Sorguları

23.05.2013

  • 120031
  • 0
Hakan Keskin

C# ile Windows Service Projesi Oluşturma, Debug Etme ve Setup Hazırlama

17.12.2013

  • 65116
  • 0
batuhan avlayan

Php - Mail Gönderme (İletişim Formu)

02.09.2013

  • 48278
  • 0

Sponsorlar

KODLAB
Pluralsight
Exchange server is
Office 365
YAZILIM DİLLERİ
Yukarı Çık
  • Hakkımızda
  • Facebook
  • Twitter
  • RSS

© Yazılım Dillerinin Buluşma Noktası | Kaynak belirtildiği sürece makaleler kopyalanabilir.
YazilimDilleri.Net sitesinde yer alan kullanıcıların oluşturduğu tüm içeriklerin yayınlanması ile ilgili yasal yükümlülükler içeriği oluşturan kullanıcıya aittir, YazilimDilleri.Net hiçbir şekilde sorumlu değildir.

Kapat

Giriş Yap

Kullanıcı Adı

Şifre

Şifremi Unuttum

KULLANICI GİRİŞİ