Makale Özeti

Enterprise Library'nin en çok kullanılan Uygulama Blogu olan DAAB'ın özellikleri, yapısı, DAAB GUI sinin kullanılması, datareader ve dataset ile kullanımı hakkında bilgi verilip, örnek uygulamalar geliştirilecektir.

Makale

 Data Access Application Block:

 

Enterprise Library’nin en çok kullanılan Uygulama Blok’un Data Access Application Block’tur. DAAB daha-- önce Enterprise Library yok iken—bağımsız olarak kullanılan bir Uygulama Blokudur.Bununla alakalı  makale yazgelistir.com’da bulunmaktadır daha sonra, bazı değişikliklerle beraber EL'nin 7 Uygulama Bloğundan biri olmuştur.

Enterprise Library’ye giriş yapan makalemde de berlittiğim gibi, bir database bağlanmak için, birbirlerin tekrarlayan  aynı kodları defalarca yazmamız; (daha doğrusu copy-paste etmemiz:=) gerekiyor.  Enterprise Library’nin DAAB bloğu, bize bunu sağladığı GUI ile, yapmamızı sağlayıp, kodun içerisinde bağlantı, server, database hakkında bir bilginin yazılmamasına olanak sağlar. Bu da bizim kodun farklı durumlara (mesela SQL server’in Oracle server’a dönüşmesi ) kolay adaptasyonunu sağlar.

 

Bu günkü uygulamamızda kodu  database’i datareader’la/datasetle okuyup datagrid’e beraber nasıl atacağımızı göreceğiz. Önce datareader’la yapalım bunu.

 

Gerekenler: Bize bir buton, bir datagrid ve bir tane text box gerekli., Microsoft’un sitesine bağlanıp, NetPassport ile üye olup, Enterpise Library’nin bilgisayarımıza indirilip kurulmuş olması da gerekir.(indirmek için tıklayınız) (Daha detaylı bilgi Enterprise Library’e giriş makalemde bulunmaktadır.)

 

Uygulama Blokları bir birleriyle konjuge halde kullanılabilsinler diye Enterprise Library çatı-yapı ‘sı oluşturuldu. Kimi Uygulama Bloklarının diğer bloklara bağımlılıkları vardır.: DAAB, configurasyon bilgilerini okumak için CoAB’ı kullanır. Default olarak uygulama blokları bilgi saklamak için XML dosyalarını kullanırlar. Bu bilgileri Enterprise Library Configuration Console ile düzenlemek tavsiye edilir.

 

Şimdi amacımız datareader’i kullanarak, istediğimiz CategoryID’deki ürünleri DataGrid’e beraber bağlamak.Adını yazgelitirELDataApp koydugumuz Web Uygulamasını açalım ve  Enterprise Library’inin DAAB’ını ve CoAB’ını  kullanabilmek için gerekli olan .dll’leri Reference dosyasının üzerini ağ tıklayıp, Add Reference’i seçerek ve Browse tuşuna basıp

C: \Program Files\Microsoft Enterprise Library\bin’e  giderek, ekleyelim.

Bu.dll’lerin ismi aşağıdadır:

 

Eklenecek .dll’ler:  

Microsoft.Practices.EnterpriseLibrary.Data.dll  Microsoft.Practices.EnterpriseLibrary.Configuration.dll

 

 

 

Daha sonra da  oluşturduğumuz Form1 isimli formun arka kod bölümünde,

Bunları kullabilmemiz için import etmeliyiz.

 

 

 

 

 

VB.NET de:

Imports Microsoft.Practices.EnterpriseLibrary.Data
Imports Microsoft.Practices.EnterpriseLibrary.Data.Sql

 

 

C#.NET’de:

 

Using Microsoft.Practices.EnterpriseLibrary.Data;
Using Microsoft.Practices.EnterpriseLibrary.Data.Sql;

 

Formumuza datagrid,button ve text ekleyelim.

 

Eklediğimiz dll’leri kullanabilmemiz için import etmemiz gerekiyor.

 

VB.NET’te:

 

 

C#.NET’te:

 

 

 

 

 

Şimdi de kodumuzda gerekli olan veri bağlantısı ve konfigürasyon ayarlarını yapmak için, Start Menu --> Programs --> Microsoft Patterns and Practices --> Enterprise Library-June2005 --> Enterprise Library Configuration’ı açtığımızda karışımza çıkan ekrandan File à Open Application’dan Web Uygulamamızın Web.config dosyasını bularak (Windows uygulamalarında  App.config dosyasını) seçmeliyiz. Configuration Block’ta yaptığımız ayarlar Web.config’de saklı tutulurken (windows uygulamalarında  App.config’de); data bağlantısı ile alakalı ayarlar  dataConfiguration.config’de saklı tutulur.

 

 

 

 

 

Configürasyon dosyamızın adını, web uygulamamızın adı olan, yazgelistirELDataApp yapalım.

 

 

 

 

Daha sonra da sağ tıklayıp  blokları içerisinden  New --> Data Access Application Block’u seçersek iki tane ikincil düğüm eklenir: Configuration Application Block ve Data Access Application Block.

 

 

 

 

Oracle Connection String  oluşturmak istiyorsam: Bir DAAB oluşturduğumuzda  SQL Connection string default olarak oluşur.Oracle Connection String oluşturmak için  düğümlerden Connection StringàNewàOracle Connection String  seçilmelidir.

 

 

 

Sql Connection düğümünün altına gelelim. Burada default olarak 3 tane parametre bulunur.Biz eğer daha fazla parametre eklemek istiyorsak: SQL Connection StringàNew—Parameter’i seçip parametre adını ve değerini girmeliyiz. Connection String’de şifre, network adresi gibi birçok parametreye yer verebiliriz.(Bunları ileriki zamanlarda işleriz.)

 

 

 

 

 

 

Biz bu uygulamada sadece var olan 3 değişkeni kullanacağız. Şimdi var olan değişken isimlerine tıklayığ,sağ taraftaki pencereden

          server:. Localhost veya .

           Database:Northwind

Integrated Security:True yazalim. (default olarak True’dur zaten.).

 

 

 

işlemlerimizi kaydedelim ve yaptığımız ayarların nasıl yansıdığını görmek için de

dataconfiguration.config’i açalım:

 

 

 

 

 

 

 

yukarıdaki ekrandan özellikle parametrelerin olduğu kısmı incelediğimizde  Enterprise Library’deki değişikliklerin XML yapısında  yansıdığı oraya çıkar. Bunları aşağıda  daha rahat görebiliriz.

           

 

<connectionStrings>

        <connectionString name="Sql Connection String">

          <parameters>

            <parameter name="database" value="Northwind" isSensitive="false" />

            <parameter name="Integrated Security" value="True" isSensitive="false" />

            <parameter name="server" value="localhost" isSensitive="false" />

          </parameters>

        </connectionString>

</connectionStrings>

Şimdi de  Button1_Click(…) event’ine aşağıdaki kodları ekleyelim.

 

VB.NET de:

 

 

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

        Dim db As Database

 

        'sql paremetreli bir sql cümlesi tanimlayalim.Bu paremetreyi texten alacagiz.

        Dim sqlstring = "SELECT * FROM Categories WHERE CategoryID = @CategoryID"

 

        ' string ve parametlerini belirlemek için GetSqlStringCommandWrapper'i alalım

        Dim cmd As DBCommandWrapper = db.GetSqlStringCommandWrapper(sqlstring)

        'Parametrenin değerini textten  alalim

        cmd.AddInParameter("CategoryID", DbType.Int32, CInt(TextBox1.Text))

        'Sonucu DataReader'a atalim

        Dim reader As IDataReader = db.ExecuteReader(cmd)

        'datareader'in okudugu sonucu DataGrid'e bağlayalım.

        DataGrid1.DataSource = reader

        DataGrid1.DataBind()

     End Sub

 

 

 

 

 

C#.NET de:

private void Button1_Click(object sender, System.EventArgs e)

            {

           

Database db = DatabaseFactory.CreateDatabase();

 

//sql paremetreli bir sql cümlesi tanimlayalim.Bu paremetreyi texten alacagiz.

      string sqlstring = "SELECT * FROM Categories WHERE CategoryID =@CategoryID";

 

//    string ve parametlerini belirlemek için GetSqlStringCommandWrapper'i alalım

      DBCommandWrapper cmd =db.GetSqlStringCommandWrapper(sqlstring);

 

// Parametrenin değerini textten  alalim

      cmd.AddInParameter("@CategoryID",DbType.Int32,Convert.ToInt32(TextBox1.Text));

 

      // Sonucu DataReader'a atalim

      IDataReader reader = db.ExecuteReader(cmd);

 

// datareader'in okudugu sonucu DataGrid'e bağlayalım.

      DataGrid1.DataSource=reader;

      DataGrid1.DataBind();

        }

 

 

 

 

 

 

Database class, data bağlantısı için ortak bir arayüz sağlar. The SqlDatabase, OracleDatabase ve  Db2Database class’ları Database class’tan derive ederler.

 

 

DatabaseFactory  class’ı, uygun Database objesini tutan bir lojik enkapsüle etmek için CreateDatabase isimli static bir metot sağlar. Böyle yaparak, client kod belirli bir database tipi ile sınırlanmamış olur.DatabaseFactory class’ ı ihtiyaç duyduğu configüsyon bilgilerini Configuration Application Block’tan alır.

 

 

Parametre kullanmak için, ad-hoc SQL cümlesini veya stored procedure’  işaret eden DBCommandWrapper instance’i oluşturmalıyız. Biz burada Sql cümlesi kullandığımız için, GetSqlStringCommandWrapper’i kullandık. Eğer eğer stored procedur kullanmak isteseydik GetStoredProcCommandWrapper’i kullanmalıydık. Aşağıdaki tabloda daha rahat görülebilir.

 

 

string procedureStringName= "StoredProcedureName";
DBCommandWrapper cmd= db.GetStoredProcCommandWrapper(procedureStringName);

 

 

ExecuteReadar()  IDataReader’I implemente eden bir obje döner. Biz burada, SqlDataReader veya OracleDataReader’i değil, IDataReader’I implemente eden class’ları çağırıyoruz. IDataReader tüm DataReader’ların ortak bir arayüzüdür.IDataReader’dan çağırdığımız DataReader’in  --mesela Oracle’mı, SQL’mi— ne olduğu, dataConfiguration.config’ deki configurasyon bilgilerine bağlıdır.Bunu da biz yukarıda belirtmiştik zaten. Biz dataprovider’lara spesifik kod yazmak istemediğimiz için interface’lerle işlemlerimizi yürütüyoruz.

 Şimdi de programımızı derleyip çalıştıralım:

 

 

Peki DataSet nasıl kullanabiliriz ? Aynı Web Uygulamasını DataSet’le nasıl yapacağımızı görelim. Bu sefer Enterprise Library ayarlarını, yukarıdakinın aynısı olacağından dolayı,  burada tekrar göstermeyelim.Yeni bir  Web Uygulaması açmış, Uygulamanın web.config’ini EL ile açıp ayarlarını yapmış ve formu da aynı yapıda düzenlemiş varsayarak devam edelim. Button1_Click(…) altına şu kodları yazıyoruz:

 

VB.NET’de:

 

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

 

   Dim db As Database

   db = DatabaseFactory.CreateDatabase

 

   Dim sqlstring As New String("Select * from Categories where CategoryID=@CategoryID")

 

        Dim dbCmdWrp As DBCommandWrapper = db.GetSqlStringCommandWrapper(sqlstring)

        'Belirlenen kategorideki urunleri alalim

        dbCmdWrp.AddInParameter("@CategoryID", DbType.Int32, CInt(TextBox1.Text))

 

    ' Bir dataset tanimlayip, sonuçları DBCommandWrapper ile datasetimize bağlayalım

        Dim ds As DataSet

        ds = db.ExecuteDataSet(dbCmdWrp)

 

        'sonuçları datasetle datagrid'e aktaralım

        DataGrid1.DataSource = ds

        DataGrid1.DataBind()

End Sub

 

 

 

 

 

 

C#.NET’de:

private void Button1_Click(object sender, System.EventArgs e)

            {

            Database db = DatabaseFactory.CreateDatabase();

      string sqlstring = "Select * from Categories where CategoryID=@CategoryID";

      DBCommandWrapper dbCmdWrp = db.GetSqlStringCommandWrapper(sqlstring);

 

//Belirlenen kategorideki urunleri alalim

dbCmdWrp.AddInParameter("@CategoryID", DbType.Int32, Convert.ToInt32(TextBox1.Text));

 

// Bir dataset tanimlayip, sonuçları DBCommandWrapper ile datasetimize bağlayalım

      DataSet ds;

     ds = db.ExecuteDataSet(dbCmdWrp);

 

  //sonuçları datasetle datagrid'e aktaralım.

      DataGrid1.DataSource=ds;

      DataGrid1.DataBind();

                  }

 

 

 

Burada üstteki uygulamadan farklı olarak, sadece ExecuteDataset()’ı kullanıp, DataGrid’ı dataset’e bağladık. Eğer gene derleyip çalıştırırsak, yukarıdaki gibi bir sonuç alırız.

 

 

 

Sonuç: Enterprise Library’nin DAAB’nı kullarak ne gibi avantajlar elde ettiğimizi görmemiz açısından, bir çalışma yaptık. Kodumuzun içerisinde connection string’le alakalı ve dataprovider’la alakalı hiçbirşey yapmadık. Hepsini EL ile ayarladık. DataReader ve Dataset’in nasıl kullanılabileceğini gördük. EL sağladığı avantajlarda, Uygulama Geliştiricilere kolaylıklar sağlamaktadır.