SQL Server üzerinde veya herhangi bir veri kaynağında duran veriler, veri sağlayıcıya bağlı connection ve command nesneleri yardımıyla, uygulama ortamına alınabilmektedir.
SqlDataReader Nesnesi
SQL Server üzerinde veya herhangi bir veri kaynağında duran veriler, veri sağlayıcıya bağlı connection ve command nesneleri yardımıyla, uygulama ortamına alınabilmektedir. Ancak veri kaynağından gelen bu veriyi uygulama tarafında kullanabilmek için, bir şekilde o veriyi bellekte tutabilecek ve uygulamada ihtiyaç olduğu anda kullanılmasını sağlayacak başka bir birleşene, nesneye ihtiyaç vardır. Bu ihtiyacı karşılayan, veri sağlayıcıya özel DataReader sınıfları bulunmaktadır. SQL Server .NET Data Provider için bu sınıf, SqlDataReader olarak kullanılmaktadır.
SqlDataReader sınfından oluşturulan değişken, SqlCommand’ın ExecuteReader() metodundan dönen SqlDataReader nesne örneğini yakalar. Bu nesne örneği, uygulamalarda yazılan SQL cümlesine bağlı olarak gelen sonuç kümesini(result set) sadece ileri yönlü(forward only) ve yalnız okunabilir(read only) formatta kullanma şansı verir. Bu durum, verinin daha hızlı bir şekilde uygulama ortamına alınmasını sağlar.
SqlDataReader kullanımında dikkat edilmesi gereken noktalar
Bir SqlDataReader, bir SqlDataConnection nesnesinin kendine bağlar ve kayıtlar üzerindeki işin sonuna gelinmeden bağlantı nesnsini serbest bırakmaz. Ayrıca bir SqlDataReader, üzerinden veri taşıdığı bağlantı nesnesini tamamen kendi kullanımına alır ve kapatılmadan önce bağlantı nesnesini servest bırakmaz. Ancak bu soruna .NET 2.0’dan itibaren, MARS(Multiple Active Result Sets) adı verilen teknoloji ile çözüm bulunmuştur. Ne var ki, bu teknolojinin kullanılabilmesi için ilgili veri tabanı sisteminin MARS’a destek veriyor olması gerekmektedir. Örneğin, MS SQL Server 2005 ve sonraki sürümlerin doğrudan MARS desteği varken; bu durum MS SQL Server 2000 ve önceki sürümleri için geçerli değildir.
SqlDataReader’in En Sık Kullanılan Metotları
Read()
SqlDataReader’in en önemli metodudur. Reader’in bir satır sonrasına konumlanmasını sağlar. Eğer bir sonraki satıra geçebilmişse, true değer döner. Eğer okunacak kayıt yoksa false değeri döner. Bu metod bir while döngüsünde etkin bir şekilde kullanılabilir. Böylece bir sonuç kimesi üzerindeki tüm satırlar tek tek dolaşılıp değerlendirilebilir.
Get()
Get ile başlayan metotlar, reader’in her Read() metodu çağrısı ile okuduğu satırdaki sütünların değerlerini ve aynı zamanda geri dönüş tiplerini dönüştürmeye gerek kalmadan almayı sağlar. Ancak bu metotları kullanarak verilere erişmek bazı durumlarda tehlikeli olabilir. Bu metodlarla, veri tabanı tarafında NULL olan değerleri okurken dikkatli olmak gerekir. Çünkü NULL değerler uygulamaya bu metotlarla alındığında ugyulama tarafında çalışma zamanı istisnaları(run time exceptions) oluşmaktadır. Bu nedenle uygulama tarafına gelen verileri hata olarak oluşmasının önüne geçmeyi sağlar.
1 2 3 4 5 6 7 8 9 10 11 | while(rdr.Read()) { rdr["kolonAdi"].ToString(); } //yada while(rdr.Read()) { rdr[kolonIndexNumarası].ToString(); } |
Close()
DataReader’in close metodu, DataReader’in kullandığı bağlantı nesnesini bırakmasını sağlar. Böylece bu bağlantı nesnesini başka bir DataReader nesne örneği kullanabilir.