ASP.Net 2.0 – ADO.Net 2 yenilikleri

Yağız Gönüler tarafından yayınlanmıştır 13. Ağustos 2008 12:15

Öncelikle Asp.Net 2,0’daki veri erişim kontrollerinden ve Ado.Net’ten biraz bahsedeyim. Asp.Net 2 ile birlikte tanımlanan birçok DataSource kontrolü vardır. Bu kontroller sayesinde de verilerimizin iletişimini sağlayabilir. Ancak verilerimizin yönetimi konusunda Ado. Net’in bizlere sağladığı avantajlardan yararlanmamız gerekmektedir. DataSource nesneleri her ne kadar bize verilerle tümleşik olarak çalışma imkânı verse de, Asp.Net içerisinden direkt olarak verilerimizi kullanmak için Ado.Net nesnelerini kullanmamız gerekecektir. Ado.Net 2, geçmiş sürümüne göre bize çok daha gelişmiş imkânlar sunuyor. Özellikle verilerle uğraşmak bir keyif haline geliyor ve çok daha başarılı, hatasız ve performansı yüksek uygulamalar yapılabiliniyor.

 

Ado.Net geliştiricileri, yeni sürümünün diğer sürüme göre tam bir devrim olmadığını ancak işlevselliğini arttıracak birçok yeni özellik eklendiğini belirtiyorlar. (tech-ed 2004 ado.net 2 presentation) Bu yeni sürümün geçmişe olan uyumunun elbette %100 olduğu belirtiliyor ve eski tarzda yazılan kodlara aynen devam edilebildiği gibi, yeni sürümün işlevsellik kazandıracak kontrolleri de eklenebiliniyor.

 

Ado.Net, Asp.Net’in tekelinde bulunan bir teknoloji değildir. Başlı başına bir makale ya da kitap gerektiren büyük ve önemli bir teknolojidir. İşin en güzel tarafı Ado.Net, birçok uygulmada(web ya da windows gibi) tek satır değiştirmeden bile kullanılabilinen bir teknolojidir. Daha öncede söylediğim gibi, Asp.Net 2,0’da, Ado.Net’in hiçbir sınıfına başvurmadan DataSource nesneleri ile verilere ulaşabiliyorduk. Ancak makalemizin genel konusu olan yeni Ado.Net sürümünde kullanabileceğimiz nesneleri, önce eski kontrollerden feyz alarak küçük bir uygulamayla beraber öğrenmeye başlayalım.

 

Bu makalemde visual studio.net 2005 ve sql server 2005 kullandım. VB.Net ile kodlarımı yazdım...
Tüm kodlarımın açıklamaları, kod aralıklarında bulunmaktadır.


Veritabanımın ismi aspnet2. 2 adet tablo bulunmakta bunlar SICIL ve Departman isimlerine sahip.
Üstteki resim SICIL tablosuna, alttaki resim ise Departman tablosuna ait.

 

 

 

 

 

 

 

Bu tabloların kullanacağı içerikleri de şu şekilde belirledim.
Kişilerin bilgileri tamamen düzmecedir. Yazarın hayal gücünün en iyi belirtisidir. İzinsiz kullanılabilinir...

Üstteki resim SICIL tablosunun verilerini, alttaki resim Departman tablosunun verilerini gösterir.

 

 

 

 



Ado.Net Temel Kavramları

 

Uygulamamızda öncelikle Ado.Net’in temel kavramlarını kısaca inceleyelim. Dataset.aspx isimli bir sayfamız var.
Sayfamızın design kısmındaki kodları şu şekilde;


<%@ Page Language="VB" AutoEventWireup="false" CodeFile="DataSet.aspx.vb" Inherits="_DataSet" %>

 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

 

<html xmlns="http://www.w3.org/1999/xhtml" >

<head runat="server">

<title>Asp.Net2 & Ado.Net2</title>

</head>

<body bgcolor=LightCyan>

<form id="form1" runat="server">

<div>

&nbsp;<asp:GridView ID="GridView1" runat="server">

</asp:GridView>&nbsp;

</div>

</form>

</body>

</html>


Sayfamızın code-behind bölümünde ise şu kodları kullanıyoruz.


'veri islemleri yapacagimiz icin

Imports System.Data

Imports System.Data.SqlClient

'cesitli web ayarlarimiz olacagi icin

Imports System.Web.Configuration

 

Partial Class _DataSet

Inherits System.Web.UI.Page

 

Private Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

'web.config dosyamızdaki baglantı satırımızı tanımlıyoruz

Dim con As String = WebConfigurationManager.ConnectionStrings("AppConnectionString1").ConnectionString

'SICIL isimli tablomuza ulasıyoruz

Dim da As New SqlDataAdapter("SELECT * FROM SICIL", con)

'datasetimizi tanımlıyoruz

Dim ds As New DataSet

 

'data adapter yardımıyla cektigimiz verileri datasetimize dolduruyoruz

da.Fill(ds, "metin")

'gridview'imizin veri kaynagını dataset olarak gosterıyoruz

GridView1.DataSource = ds

'gridview'imize verileri dolduruyoruz

GridView1.DataBind()

 

End Sub

End Class

 

 

web.config dosyamızdaki kodlarımızda bağlantımızı tanımladık.


<connectionStrings>

<add name="AppConnectionString1" connectionString="Data Source=Yagiz;Initial Catalog=aspnet2;Integrated Security=True" providerName="System.Data.SqlClient"/>

</connectionStrings>

 

 

Projemizi çalıştırdığımızda görüntü şu şekilde oluşacaktır.

 


 

 

 

 

Buraya kadar kullandığımız terimleri kısaca açıklayacak olursam;
ConnectionString, bağlantı satırımızı oluşturmaktadır.
SqlDataAdapter, uygulamamızla veri kaynağımız arasında aracılık görevi yapar.
DataSet, veritabanımızı temsil eder.


Şimdi command nesnesini, kullandığımız uygulama üzerinde küçük bir deneme yapıp tanıyalım.


Imports System.Data

Imports System.Data.SqlClient

Imports System.Web.Configuration

 

Partial Class command

Inherits System.Web.UI.Page

 

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

 

'yine bir baglantı tanımlıyoruz, bu baglantımız web.config dosyamızdaki aynı baglantı yolu

Dim con As String = WebConfigurationManager.ConnectionStrings("AppConnectionString1").ConnectionString

'conn isminde bir baglantı tanımladık ve yol olarak con degiskenını kullanacagini belirttik

Dim conn As New SqlConnection(con)

'baglantimizi actik

conn.Open()

'bir komut tanımladık

Dim komut As New SqlCommand("SELECT * FROM SICIL", conn)

'sayfamızdaki gridview'in verikaynaginin komutumuz yoluyla olusacagini belirttik

GridView1.DataSource = komut.ExecuteReader()

'gridview'imize verilerimizi doldurduk

GridView1.DataBind()

'baglantimizi kapattik

conn.Close()

 

End Sub

End Class



Projemizi çalıştırdığımızda gördüğünüz gibi daha önceki yaptığımız işlemle hiçbir farkı yoktur. Komutumuz sadece bir ifadedir. Tek başına hiçbirşey ifade etmez. Harekete geçmesi için çeşitli metodlar kullanılır. Eğer veritabanından veriler getiriyorsak SqlCommand’in ExecuteReader() metodunu kullanırız. Eğer veritabanına birşeyler gönderiyorsak ExecuteNonQuery kullanırız. Bu çalıştırmada Update, Delete, Insert gibi SQL deyimleri için geçerlidir.

 

Şimdi ise eski kontrollerimizde sonuncusu olan SqlDataReader’ı yine aynı örneğimiz üzerinde inceleyelim.

Projeme Datareader.aspx isminde bir sayfa daha ekliyorum. Sayfama bir gridview koyuyorum ve şu kodları yazıyorum;

 

 

Imports System.Data

Imports System.Data.SqlClient

Imports System.Web.Configuration

 

Partial Class Datareader

Inherits System.Web.UI.Page

 

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

 

'baglanti cumlemizi webconfig dosyamızla butunlestırıyoruz

Dim con As String = WebConfigurationManager.ConnectionStrings("AppConnectionString1").ConnectionString

'baglanti nesnemizi, baglanti cumlemıze atıyoruz

Dim conn As New SqlConnection(con)

'baglantimizi acıyoruz

conn.Open()

'bir komut nesnesi olusturuyoruz

Dim komut As New SqlCommand("SELECT * FROM SICIL", conn)

 

'bir datareader nesnesi olusturuyoruz

Dim dr As SqlDataReader

'komutnesnemizin vericekme metoduyla datareaderimizi butunlestırıyoruz

dr = komut.ExecuteReader()

 

'datareaderımız her veriyi okuyusunda

While dr.Read()

'sayfamıza sadece ADI ve SOYADI alanını getırıyoruz

Response.Write(dr("ADI").ToString + " " + dr("SOYADI").ToString + "<br>")

End While

'baglantımızı kapıyoruz

conn.Close()

 

End Sub

End Class

 

 

 

Çalıştırdığınızda şunu göreceksiniz;

 


 

 


Kayıtları elde etmek için datareader’ımızın read() metodu kullanılır. Read metodu, datareader nesnesindeki ilk kaydı getirir. Dr(“ADI”) diyerek getirmek istediğimiz kaydın alan ismini yazdık, istersek alan numarasını da verebilirdik dr(1) gibi. DataReader nesnemizle verileri istediğimiz formatta getirebilir ve gösterebiliriz. Böylelikle Connection, Command, DataAdapter, DataSet ve DataReader nesnelerini tekrardan tanımış olduk. Artık Ado.Net 2 ile gelen yeni özellikleri tanımaya başlayalım. İşte mevcut Ado.Net yapımızı zenginleştirmeye yönelik yeni özellikler ve işleyişleri...

 

Ado.Net 2 Yenilikleri

 

DataTable: Ado.Net’in eski sürümünde de bulunan DataTable nesnesi, bu sürümde daha farklı olarak kullanılabiliniyor. Buna “doğrudan kullanım” tekniği denilmiş. Bu teknikle, DataSet olmadan verileri kaynağımızdan çekip DataTable’a aktarabiliyoruz. Böylece elimizdeki verileri doldurduğumuz bir tablomuz oluşmuş bulunuyor. Yine var olan projemizde tablom.aspx isimli bir sayfa oluşturuyoruz(Neden her sayfamızı command, datareader vs isimleriyle ekledikte buna farklı bir isim verdik diye düşünüyorsunuzdur sanırım, eğer datatable.aspx ismi verirsek datatable classından yararlanamayız. Bu yüzden isim verirken aynı isme sahip bir class olmadığından emin olmamız gerekmektedir. Ayrıca system.data ve system.data.sqlclient sınıflarını import etmeyi unutmuyoruz.), bir gridview ekliyoruz ve code-behind kısmına şu kodları yazıyoruz;


Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

'herzamanki gibi baglantimizin web.config kaynaklı oldugunu belırtıyoruz

Dim con As String = WebConfigurationManager.ConnectionStrings("AppConnectionString1").ConnectionString

'bir datatable tanımlıyoruz

Dim veritablom As New DataTable("Tablo")

'baglanti nesnesi tanımlayıp baglantımı acıyorum

Dim conn As New SqlConnection(con)

conn.Open()

'bir command nesnesi olusturup datareader ile verileri cekip gridview'e dolduruyorum

Dim com As New SqlCommand("SELECT * FROM SICIL", conn)

Dim dr As SqlDataReader = com.ExecuteReader

veritablom.Load(dr)

GridView1.DataSource = veritablom

GridView1.DataBind()

conn.Close()

End Sub

 


Projemizi çalıştırıyoruz ve diğer uygulamalarımızdan farksız bir şekilde çalıştığını görüyoruz. Yukarıdaki ilk görüntü resmimizden farksız bir sonuç vericektir. Tekrar tekrar aynı resmi koyup vakit kaybetmek ve görüntü kalabalığı yapmak istemiyorum, yeni özelliklerle devam ediyorum J

 

DataTable WriteXml ve ReadXml: .Net ortamında veriyle ilişkisi olan hernesnenin XML ile de ilişkilerini geliştirmek zorundadır. Doğal olarak bu kural, yenilenen DataTable nesnesi içinde geçerlidir. DataTable’ın XML ile ilişkilendirilmesi, DataSet’inki gibidir. DataTable’a ait WriteXml, WriteXmlSchema, ReadXmlSchema, ReadXml gibi yeni metotlar Ado.Net 2’de kazandırılmıştır. Şimdi projemize datatable_xml.aspx isminde bir sayfa ekliyoruz, sayfamıza iki adet button yerleştiriyoruz. Birinin text özelliği “oku”, diğerinin ise “yaz” olacak. “Oku” yazılı buttona tıkladığımızda verileri okuyacak, “Yaz” yazılı buttona tıkladığımızda ise verileri bizlere gösterecek. Tabiki bunun için de sayfamıza gridview eklememiz gerekiyor. Code-behind sayfamıza şunları yazıyoruz;


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

Dim con As String = WebConfigurationManager.ConnectionStrings("AppConnectionString1").ConnectionString

Dim veritablom As New DataTable("tablo")

Dim conn As New SqlConnection(con)

conn.Open()

Dim com As New SqlCommand("SELECT * FROM SICIL", conn)

Dim dr As SqlDataReader = com.ExecuteReader

veritablom.Load(dr)

'datatable'ımızın xmlyazma metoduyla yenı bır xml dokumanı olusturuyoruz

veritablom.WriteXml("c:\veriler\deneme.xml")

'datatable'ımızın xmlşema metoduyla şemamızı da belirliyoruz

veritablom.WriteXmlSchema("c:\veriler\deneme.xsd")

conn.Close()

End Sub

 

Protected Sub Button2_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button2.Click

Dim veritablom As New DataTable("tablo")

'yukarıdakının tam tersını yapıp once semamızı okuyoruz

veritablom.ReadXmlSchema("c:\veriler\deneme.xsd")

'daha sonrada yazdıgımız veriyi okuyoruz

veritablom.ReadXml("c:\veriler\deneme.xml")

'okudugumuz veriyi gridview'de gosterıyoruz

GridView1.DataSource = veritablom

GridView1.DataBind()

End Sub

 



Eğer C:’nin içerisinde veriler isimli bir klasör oluşturduysak, oku buttonuna bastığımızdaki işlemler, önce o klasöre veriler.xml ve veriler.xsd isimli 2 dosya oluşturacak. Daha sonra yaz buttonuna basıldığında gridview yardımıyla verilerimiz bize gösterilecektir. Buraya yine görüntü resmini koymuyorum çünkü yukarıda yaptığımız işlemlerden farksız olarak görünecektir uygulama sonucumuz. Dilerseniz deneme.xml’e bakarak xml dosyamızın içeriğini görebilirsiniz. Tıpkı veritabanımızdaki gibi ad,soyad,giriş,çıkış,departman ve semt etiketleriyle oluşan bir xml dosyası göreceksiniz. Bu etiketlerin tekrarlamaları, veri kaynağından gelen verilerin kendilerini ve alan isimlerinin sayısı yani kayıt sayısı kadar devam etmektedir. Böylece xml bilgimizide pekiştirmiş olduk J

 

Binary Serialization: Serialize’nin kelime anlamı “dizileme, dizilemek, dizi haline getirmek”tir. Serialization ise yazılım terminolojisine göre “nesnelerin verileriyle birlikte saklanması”dır. Tüm nesneler dosya haline saklanır ve bildiğimiz gibi nesneler, class yani sınıflardan türetilir. Burada saklanan yaratılmış nesnenin kendisidir. Peki sınıftan nesne üretilirken, serialization işlemine neden başvuralım diye düşünüyorsunuzdur. Nesneler verileri ile birlikte saklanmaktadır. Eğer bir kullanıcımızın bilgilerini saklamak istiyorsak bu tip bir yöntem kullanabiliriz. Serialization’ı, bir nesneyi firewall’dan geçirmek için bile kullanabiliriz. XML Serialization bu işlemi yapmamızda bize yardımcı olur. Kısaca şöyle söyleyeyim; bir nesneyi içindeki verilerle bir yerden başka bir yere taşımak istiyorsak serialization’ı kullanabiliriz. Özellikle database uygulamalarında son derece kullanışlıdır bu yöntem. Ado.Net’in eski sürümlerinde dataset sayesinde serialization yapabiliyorduk ancak bu xml serialization’du. Yani nesne ve verileri xml formatında saklıyorduk. Ancak bu, fazla dosya boyutu demekti. Yeni sürüm ile birlikte en başta dediğimiz gibi performansı arttırmaya yönelik gelişmelerden biri de, dataset’in serialization seçeneğini belirtebilmesidir.

 

Şimdi yine küçük bir örnekle bu sistemi tanıyalım. Serialization.aspx isimli bir sayfa ekleyelim projemize. Bu sayfamıza bir button ve bir gridview ekliyoruz. Ekleyeceğim kodların bir kısmı yukarıdaki diğer uygulamalarda defalarca açıkladığım kodlar. Artık neredeyse ezberledik J Code-behind kısmına şu kodları ekliyoruz. Bize farklı gelecek kodların açıklamaları elbette satırların aralıklarında J


Imports System.Data

Imports System.Data.SqlClient

Imports System.Web.Configuration

'binary kullanacagımız ıcın

Imports System.Runtime.Serialization.Formatters.Binary

'dosya kullanacagımız ıcın

Imports System.IO

Partial Class serialization

Inherits System.Web.UI.Page

 

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

Dim con As String = WebConfigurationManager.ConnectionStrings("AppConnectionStrings1").ConnectionString

Dim da As New SqlDataAdapter("SELECT * FROM SICIL", con)

Dim ds As New DataSet

da.Fill(ds, "metin")

GridView1.DataSource = ds

GridView1.DataBind()

 

End Sub

 

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

'gridview'e eklenen verileri tur degisimi yaparak datasete aktarıyoruz

Dim ds As DataSet = CType(GridView1.DataSource, DataSet)

'binary sınıfını kullanarak bir nesne olusturuyoruz

Dim binfor As New BinaryFormatter

'IO sınıfını kullanarak, c'nin icinde serialize isimli klasorun ıcıne serialveri isimli bir dosya olustuyoruz

Dim str As New FileStream("c:\serialize\serialveri.bin", FileMode.CreateNew)

'burada str ismindeki dosyamızı datasetten gelen verilerle beraber serialize edip dolduruyoruz

binfor.Serialize(str, ds)

End Sub

End Class

 

Çıkan sonucumuza c’nin içindeki serialize klasörünün içinde bulunan serialveri.bin’i notepad ile açarak ulaşabiliriz.
Sonuç aşağıdaki gibi olup, xml formatındadır ve 5 KB’dır. (Benim verilerimi kullandığınızı varsayıyorum. J)

 

 

 

 

 

 

Şimdi ise bu işlemi Ado.Net 2 terminolojisine göre yapalım. Sadece bir satır ekliyoruz.

Buttona’a tıkladığımızda tanımladığımız dataset satırının altına şu kodu ekliyoruz;

ds.RemotingFormat = SerializationFormat.Binary


Ayrıca yolumuzu da şu şekilde değiştirebiliriz, böylece sonucu ayrı bir dosya olarak inceleyebiliriz.

Dim str As New FileStream("c:\serialize\serialveri_binary.bin", FileMode.CreateNew)

Böylece ne tür bir serialization yapacağımızı belirtiyoruz. 2 seçeneğimiz var. Biri yaptığımız binary, diğeri ise XML’dir. Hiçbirşey belirtmezsek default olarak XML’i kabul eder. Bu şekilde uygulamamızı çalıştırırsak serialization klasörümüzüm içine serialveri_binary.bin isminde yeni bir dosyanın geldiğini görürüz. Dosyamızı notepad ile açtığımızda ise çok farklı semboller ve ifadelerle karşılaşırız. Bunlar verilerimizin binary formatına çevrilmiş halidir. Veritabanımızdaki verileri daha fazla şişirerek aradaki performans farkını daha detaylı inceleyebilirsiniz J

 

 

 

 

 

Deserialization: Serialize edilen nesneleri tekrar kullanabilir hale getirmeye denir. İşlem oldukça basit işler; burda dikkat etmemiz gereken tek şey nesne nasıl serialize edildiyse o şekilde deserialize etmemiz gerektiğidir. Yani binary ile serialize ettiysek binary ile, XML ile serialize ettiysek XML ile deserialize etmemiz gerekir. Projemize deserialization.aspx isimli bir sayfa ekliyoruz. Gridview ve bir button eklemekten kaçınmıyoruz J Kodlarımız şöyle;

 

Imports System.Data

Imports System.Data.SqlClient

Imports System.Runtime.Serialization.Formatters.Binary

Imports System.IO

Partial Class deserialization

Inherits System.Web.UI.Page

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

'bir dataset ve binaryformatter tanımlıyoruz

'filestream nesnemiz ile serialize edilmis olan dosyamızı,

'deserialize edip datasete yukluyoruz

'remotingformat ozellıgıne binary ozellıgını atıyoruz cunku verimiz bu formatte serialize edilmisti

Dim ds As New DataSet

Dim binfor As New BinaryFormatter

ds.RemotingFormat = SerializationFormat.Binary

Dim str As New FileStream("c:\serialize\serialveri_binary.bin", FileMode.Open)

'datasetimizi bir gridview sayesinde goruntuluyoruz

ds = CType(binfor.Deserialize(str), DataSet)

GridView1.DataSource = ds

GridView1.DataBind()

str.Close()

End Sub

End Class

 

Projemizi çalıştırdığımızda gridview’imizin verileri nasıl yedeklediysek o şekilde gösterdiğini görüyoruz.

Gridview’imiz, deserialize edilmiş dataset nesnemizi verileri ile birlikte tanıyor.

 

Böylece makalemizin de sonuna geldik. Umarım eski nesneleri pekiştirip yeni nesneleri şöyle basitte olsa öğrenime kolay bir hale getirmişimdir.
Faydalı olacağına inanıyorum. Sorularınızı mail adresime iletebilir, çok kısa sürede yanıt alabilirsiniz :)

2 kişi tarafından 4.5 olarak değerlendirildi

  • Currently 4,5/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Etiketler: ,

Makaleler | Yazılım Geliştirme | Web



Bu site BlogEngine.NET 1.4.5.0 ile oluşturulmuştur. Türkçe çevirisi BlogEngine TR ekibi tarafından yapılmıştır.
Sitedeki kod ve tasarım değişiklikleri ise Yağız Gönüler tarafından geliştirilmiştir.
2008 © www.yagizgonuler.com

Paslaş

       

Anket

Mesleğinizden arta kalan zamanınızı nelere harcıyorsunuz?







Sonuçlar

Calendar

<<  Şubat 2012  >>
PaSaÇaPeCuCuPa
303112345
6789101112
13141516171819
20212223242526
2728291234
567891011

Yazıları geniş takvimde göster

Ne(ler) Okuyorum?


Ne Dinliyorum?

Zeki Müren - Dediler Zamanla Hep (3 saat önce)
Şükrü Tunar - Rast Taksim (3 saat önce)
Şükrü Tunar - Aydın Zeybeği (3 saat önce)
Şükrü Tunar - Uşşak Çiftetelli (3 saat önce)
Şükrü Tunar - Uşşak Taksim (3 saat önce)
Şükrü Tunar - Anadolu Oyun Havası (3 saat önce)
Şükrü Tunar - Hüzzam Taksim (3 saat önce)
Şükrü Tunar - Hovarda Zeybeği (3 saat önce)
Şükrü Tunar - Uşşak Çiftetelli (3 saat önce)
Şükrü Tunar - Uşşak Taksim (3 saat önce)

İstanbul'da Hava

ISTANBUL

Ziyaretçi Sayısı