Makale Özeti

Normal bir veriye erişim kodlarının optimize edilmiş halini sunar. Stored procedure’lere erişim ve sql ifadelerini yazarken optimize bir ortamda yardımcı olur. Geriye SqlDataReader, Dataset, XMLReader objelerini gönderir.

Makale

SQL HELPER - Data Access Application Block

  Data Access Application Block, bir .Net bileşenidir ve veriye erişim için yazılan kodlara alternatif olarak kullanılabilir. Normal bir veriye erişim kodlarının optimize edilmiş halini sunar. Stored procedure’lere erişim ve sql ifadelerini yazarken optimize bir ortamda yardımcı olur. Geriye SqlDataReader, Dataset, XMLReader objelerini gönderir. Bu bileşen ile her seferinde aynı veriye erişim kodlarını yazmayız. Buda bir standart sağlar. Ayrıca ciddi bir iş yükünden de kurtulmuş oluruz. Veriye erişim için yazdığımız satırlarca kodu her seferinde yazmaktan bizi kurtarır. Sadece bileşeni tanıtarak, tek satırlık bir kod ile işlemlerimizi yapabiliriz. Bu işlemleri elbette bu bileşen dışında kendimizde gerçekleştirebiliriz. Yeni yazacağımız bir DLL ile, kendi kütüphanemizi oluşturabilir, bu kolaylığı sağlayabiliriz. Ancak SqlHelper gibi genel bileşenlerin kullanımı, eğer ihtiyaçlarınızı karşılıyorsa bence daha avantajlıdır. Çünkü hata riski çok daha aza iner, yazan kişi bağımlılığından kurtarır, teknolojik versiyon artışlarında otomatik olarak yenilememize yardımcı olur.
  Ayrıca Sql Server’a erişim için performans ve kaynak yönetiminin en iyi yöntemlerini kullanır. İhtiyaçlarınıza yönelik olarak bu bileşenin kodlarını değiştirebilir, uygulamanıza göre kişiselleştirebilirsiniz.
  Data Access Application Block ile yapılabilecekler;
-     Stored procedure’lar ve Sql ifadeleri çağrılabilir.
-      Parametre detayları belirtilir.
-      SqlDataReader, DataSet veya XMLReader objelerini gönderir.
  Örnek olarak bir stored procedure çağıralım ve dönen bilgilerini dataset içine dolduralım;

Dim ds As DataSet = SqlHelper.ExecuteDataset( _
connectionString, _
CommandType.StoredProcedure, _
"getProductsByCategory", _
new SqlParameter("@CategoryID", categoryID))

  Kaynak kodu açık olarak geldiği için, öğrenim aşamaları, kullandığınız yöntemlerin testi içinde yararlı bir kaynaktır.
  Bu bileşeni kullanabilmek için, Visual Studio .NET içindeki projenize Microsoft.ApplicationBlocks.Data.dll assembly’sini projenize referans olarak vermeniz gerekmektedir. Veriye erişim işlemleri için bu DLL’i SqlHelper sınıfı olarak çağırırız. Ayrıca ikinci bir sınıf, SqlHelperParameterCache ile de sunduğu parametreler sayesinde ön bellekleme işlemi yapabilmemize olanak sağlar.

  Data Access Application Block 2.0 versiyonu için gerekli sistem gereksinimleri;
•      Microsoft Windows® 2000, Windows XP Professional, veya Windows 2003 işletim sistemi
•      Microsoft .NET Framework Software Development Kit (SDK), 1.1 versiyonu
•   vMicrosoft Visual Studio® 2003 geliştirme ortamı
•      SQL Server 7.0 veya sonrası SQL Server veritabanı
  Data Access Application Block 1.0 versiyonu için gerekli sistem gereksinimleri;
•      Microsoft Windows 2000 veya Windows XP Professional
•      .NET Framework SDK’nın RTM versiyonu
•      Visual Studio .NET’in RTM versiyonu (gerekli değildir ancak tavsiye edilir)
•      SQL Server 7.0 veya sonrası SQL Server veritabanı

  Data Access Application Block’u indirmek için gerekli web sayfası;
  http://www.microsoft.com/downloads/details.aspx?FamilyId=F63D1F0A-9877-4A7B-88EC-0426B48DF275&displaylang=en

  SqlHelper sınıfı statik metotlar sağlar. Sql Server veritabanı üzerinde çeşitli tiplerde sql ifadeleri çalıştırabiliriz.
  SqlHelperParameterCache sınıfı, performans arttırımı için, ön bellekleme fonksiyonelliği sağlayan parametreler sunar.
  SqlHelper sınıfı Visual Basic için 13 shared, C# için 13 static metot sağlar.
Execute* (ByVal connection As SqlConnection, _
ByVal commandType As CommandType, _
ByVal CommandText As String)

Execute* (ByVal connection As SqlConnection, _
ByVal commandType As CommandType, _
ByVal commandText As String, _
ByVal ParamArray commandParameters() As SqlParameter)

Execute* (ByVal connection As SqlConnection, ByVal spName As String, _
ByVal ParamArray parameterValues() As Object)

Execute* (ByVal transaction As SqlTransaction, _
ByVal commandType As CommandType, _
ByVal commandText As String)

Execute* (ByVal transaction As SqlTransaction, _
ByVal commandType As CommandType, _
ByVal commandText As String, _
ByVal ParamArray commandParameters() As SqlParameter)

Execute* (ByVal transaction As SqlTransaction, _
ByVal spName As String, _
ByVal ParamArray parameterValues() As Object)

  Bir örnekle Visual Basic .NET ortamında, SqlHelper sıfının ExecuteDataSet metodunu çalıştıralım ve sonucu bir DataSet’e atalım;

Imports Microsoft.ApplicationBlocks.Data
Dim ds As DataSet = SqlHelper.ExecuteDataset( _
"SERVER=(local);DATABASE=Kitap;INTEGRATED SECURITY=True;", _
CommandType.Text, "SELECT * FROM Kitaplar")

  Burada Kitap veritabanına bağlanıp, kitaplar tablosundaki bilgileri ds isimli DataSet’e aktarıyoruz.

Parametrelerle SqlHelperParameterCache Sınıfının Yönetimi

  Bu sınıf, public shared metotlar sağlar. Bu metotları kullanabilmek için gerekli parametreler;
     CacheParameterSet: SqlParameters’ın tüm dizilerinin ön bellek içinde saklanması için kullanılır.
     GetCachedParameterSet: Önbelleklenmiş parametrelere dizilerin kopyasının çağrılması için kullanılır.
     GetSpParameterSet: Bu overloaded metot, uygun parametreler için tanımlanmış storedprocedure’ı veritabanından bir kere sorgular. Ve sonuçları sonradan yapılacak olan sorgular için önbellekler.

bağlantı ifadesi ve sorgu ifadesi tanımlanıyor.
Const CONN_STRING As String = _
"SERVER=(local); DATABASE=Kitap; INTEGRATED SECURITY=True;" Dim sql As String = _
"SELECT KitapAdi FROM Kitaplar WHERE KitapID=@KID "

ön bellek parametreleri
Dim paramsToStore(1) As SqlParameter
paramsToStore(0) = New SqlParameter("@KID", SqlDbType.Int)
SqlHelperParameterCache.CacheParameterSet(CONN_STRING, sql, _
paramsToStore)

ön bellekten parametreler alınıyor
Dim storedParams(1) As SqlParameter
storedParams = SqlHelperParameterCache.GetCachedParameterSet( CONN_STRING, sql)
storedParams(0).Value = 2

sql ifadesinin parametreleri kullanılıyor
Dim ds As DataSet
ds = SqlHelper.ExecuteDataset(CONN_STRING, CommandType.Text, sql, _
storedParams)

  Ön belleklenmiş bilgileri alabilmek için GetSpParameterSet’i kullanırız. Stored Procedure’den gelen bilgilerin ön belleklenmiş hali çağrılır. Eğer almak istediğimiz bilgi ön belleklenmiş değil ise, ilgili sorgulama .NET CommandBuilder sınıfı ile çalıştırılır ve sonraki kullanımı için ön belleğe eklenir.

Const CONN_STRING As String = _
"SERVER=(local); DATABASE=kitap; INTEGRATED SECURITY=True;" Dim spName As String = "KitapKategorileri"

Dim storedParams(1) As SqlParameter
storedParams =
SqlHelperParameterCache.GetSpParameterSet(CONN_STRING, spName)
storedParams(0).Value = "Bilim - Kurgu"
storedParams(1).Value = "1997"

Dim ds As DataSet
ds = SqlHelper.ExecuteDataset(CONN_STRING, _
CommandType.StoredProcedure, _
spName, storedParams)

  SqlHelper sınıfının önemli metotları;
     ExecuteNonQuery: Bu metot belirtilen sql ifadesini çalıştırır. Geriye herhangi bir kayıt bilgisi göndermez. Bu metot update, delete, insert işlemleri için kullanılır. Ancak eğer bu işlemler bir stored procedure’den yapılıyorsa, stored procedure’den dönen output bilgilerini gönderir.
     ExecuteReader: Bu metot SqlDataReader objesini kullanır ve verilen ifadeden dönen sonuçları gönderir.
     ExecuteScalar: Bu metot tek değer gönderir. Bu değer, belirtilen sql ifadesinden dönen kayıtlar içindeki sadece ilk kaydı gönderir.
     ExecuteXmlReader: FOR XML sorgusundan dönen XML bilgilerini geri gönderir.
     FillDataset: Bu metot ExecuteDataset’e benzer.
     UpdateDataset: Bu metot kullanılan ve varolan DataSet’i günceller.
     CreateCommand: Bu metot var olan bağlantı üzerinde belirtilen sql ifadesini oluşturur.

  Kaynak:
  http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnbda/html/daab-rm.asp

  Yeliz Korkmaz, MVP
  yelizkorkmaz@tnn.net