İçindekilerGirişİndex
YukarıİlkÖncekiSonrakiSon
Geriİleri
Yazdır

ADO Teknolojisi

ADO Genel Bilgiler

Uygulama programcılarının ihtiyaç duyduğu önemli bir araç, uygulamaların geniş bir veri grubuna ulaşıp işlem yapmasını sağlayacak tutarlı ve basit bir programlama arayüzüdür. Bu veri kaynağı basit bir metin dosyası olabileceği gibi çok karmaşık bir veri tabanı yapısında da olabilir. (Tipik bir veri kaynağı ise Open Database Connectivity(ODBC) standardını destekleyen Stuructured Query Language(SQL) komutlarıyla işlenen ilişkisel bir veri tabanıdır.) Kullanılan arayüz bu çeşitli yapıdaki verilere erişirken ve bunlar üzerinde işlem yaparken varsayımlara dayanmamalıdır. Burada ortaya çıkabilecek sorunların aşılması için Microsoft’un önerdiği çözüm OLE DB dir. Bu yapı çeşitli yapıdaki kaynaklara erişmede bir standart sağlar. Fakat OLE DB arayüzü optimum ihityaçlara göre düzenlenmiş olduğundan kullanımı gerekli basitlikte değildir. İşte uygulama programı ile OLE DB arsında köprü vazifesi yaparak bu basitliği sağlayacak olan ADO'dur.

ADO güçlü ve basit bir veri modelidir. ADO, veri tabanı sunucusundaki bilgilere erişmeyi ve üzerinde işlem yapmayı sağlar. Bunu yaparken bir OLE DB veri sağlayıcısı kullanılır.

ADO'nun bu işlemlerde göze çarpan özellikleri; kolay kullanımı, yüksek düzeydeki hızı, düşük bellek ihtiyacıdır.

ADO özellikle istemci-sunucu ve web tabanlı uygulamalarda kullanılmaya uygun temel niteliklere sahiptir.

Bunun yanında ADO, sunucudan istemci uygulamalarına veri taşınması ve işlenen verilerin geri döndürülmesini bir tek döngüde gerçekleştiren RDS(remote data service)’nin gelişimine de yol vermiştir. RDS, ADO programlama modeliyle birleştirilerek istemci tarafından yapılan uzak veri işlemlerinin kolaylaştırılması sağlanmıştır.

Takip eden bölümde ADO ile programlamaya giriş bağlamında ilgili başlıklar altında özelleşmiş bilgiler verilmiştir.

ADO ile Programlama

ADO, bir veri kaynağı üzerinde işlem yapmayı sağlayacak bir dizi işlemden oluşan bir programlama modeli sunmaktadır.

Bu proglamlama modeli nesne tabanlıdır. Bu nesneler, veri üzerinde işlem yapmayı sağlayacak bir grup metot ve veri özelliklerini belirleyecek ya da metotların kontrolünü sağlayacak niteliklerden oluşur. Aynı zamanda nesnelere bağlı olaylar vardır.

örnek 1 - basit ADO modeli

ADO'nun sağladığı temel nitelikleri şöyle sıralıyabiliriz :

Bir Visual Basic veritabanını web üzerinde geliştirmek için ADO en kolay metotlardan birini sunmaktadır.

örnek 2 - web üzerindeki bir veritabanına ADO kullanarak erişim örneği.

ADO Programlama Modeli

Temel Yaklaşım

Burada kaba hatlarıyla ADO programlama modelinin gerçekleştirdiği olaylar anlatılmaya çalışılacaktır:

Bir veri kaynağına bağlanılır. Veri üzerinde yapılan değişikliklerin ya başarılı bir şekilde tamamlanması ya da hiç yapılmaması sağlanabilir.

Veri kaynağı üzerinde işlem yapabilmek için bir komut tanımlanır. Bu komut değişken parametreler içerebileceği gibi performansı optimize etmeye yönelik de olabilir.

Komut çalıştırılır.

Eğer komut veriyi tablo içinde satırlar şeklinde döndürürse, bu satırlar kolayca test edilmek ve işlenebilmek üzere bir ön bellek içersinde saklanır.

Eğer uygunsa veri kaynağı da bu ön bellekteki satırlardan günlenir.

Hataları bulmaya yarayacak genel yöntemler oluşturulur.

Bu aşamalar programlama modelinde genel olarak geçilecek aşamalardir. Fakat ADO'nun esnekligi, nesnelerin birbirinden bağımsız olarak yaratılabilmesi ve sadece modelin belli kısımlarını çalıştırmaya izin vermesidir. Yani kayıtkümesi nesnesi oluşturmak için bağlantı nesnesi oluşturulması gerekli değildir ve veri tabloları direk olarak ön belleğe kopyalanıp, üzerinde işlemler yapılabilir.

Detaylı Yaklaşım (Nesne Modeli)

ADO programlama modelinin temel parçaları aşağıda sıralanmıştır:

ADO, class ve nesne yapılarını kullanarak kabaca şu aktiviteleri gerçekleştirir :

ADO Nesneleri

Bağlantı Nesnesi (connection object) :

Uygulama programından veri kaynağına erişim, veri alışverişi için gerekli ortamı oluşturacak bağlantı üzerinden sağlanır. Bu erişim bazen veri kaynağına direkt olabileceği gibi(iki katlı sistemler) bir aracı(örnek microsoft internet information system) kullanılarak da sağlanabilir(üç katlı sistemler).

Nesne modelinde bağlantı, bağlantı nesnesiyle içerilir. Bağlantı nesnesi veri kaynağına açık bir bağlantıyı temsil eder. Bağlantı nesnesinin biriktirilerini (collections),metotlarını ve özelliklerini kullanarak şunlar yapılabilir:

Bir işlem sırasında veri değişikliklerinin ya başarılı bir şekilde tümden yapılmasını ya da hiç yapılmamasını ADO sağlar. ADO eğer yapılan işlem iptal edilir ya da işlem sırasındaki herhangi bir safhada hata oluşursa, bütün olarak işlemin yapılmamış gibi kabul edilmesine neden olacaktır, veri kaynağı önceki halini koruyacaktır.

Nesne modelinde işlem kavramı açıkça içerilmez. Bu bağlantı nesnesi metotlarıyla ifade edilir.

ADO veri ve servislere OLE DB sağlayıcısından ulaştığından bağlantı nesnesi belli bir sağlayıcıyı belirtmesi için kullanılır.

örnek 3 - bir microsoft veritabanına TimeSheet adlı DSN kullanarak oluşturulan bir bağlantı nesnesi -
`bir ADO nesnesi oluşturulması
Set oDBTime = Server.CreateObject("ADODB.Connection") 

`veritabanının açılması
oDBTime.Open "TimeSheet"

Komut Nesnesi (command object) :

Komutlar kurulan bağlantıda veri kaynağı üzerinde işlem yapmada kullanılır. Tipik olarak bu işlemler ekleme, silme ve günleme veya veriyi veri satırları halinde almaktır. Nesne modelinde komut kavramı komut nesnesiyle içerilir. Bu nesnenin varlığı ADO’ya komut üzerinde işleyişe ilişkin optimizasyonlar yapmayı sağlar. Komut nesnesinin biriktiri (collection), metot ve özellikleriyle yapılabilecekleri şöyle sıralayabiliriz :

Bir komut nesnesini bağımsız olarak oluşturabilmek için ActiveConnection özelliğini geçerli bir bağlantı katarına atarız. ADO bu durumda yine bir bağlantı nesnesi oluşturacak fakat bu nesneyi bir nesne değişkenine atamıyacaktır. Burada dikkat edilecek nokta eğer aynı bağlantıya birden çok komut atıyorsanız bağlantı nesnesini bir bağlantı değişkenine atayacak şekilde açık bir bağlantı oluşturmalısınız; çünkü aksi halde her komut için aynı bağlantı katarı kullanılmış bile olsa farklı bir bağlantı nesnesi oluşturulur.

Bir komutu çalıştırmak için onu bağlantı nesnesi üzerindeki Name özelliğini kullanarak çağırmanız yeterli olacaktır. Komutun ActiveConnection özelliği bağlantıyla ilişkilendirilmiş olmalıdır. Eğer komutun parametreleri varsa bu değerleri metot argümanları olarak iletebilirsiniz.

Parametre Nesnesi (parameter object) :

Genellikle komutlar değişken parçalara, parametrelere ihtiyaç duyarlar. Böylece veri alınışında her seferinde aynı komutu değişik özellikte kullanmak mümkün olur.

Parametreler özellikle fonksiyon gibi çalışan komutların çalıştırılmasında yararlıdır. Böyle durumlarda komutun ne yaptığı bilinir fakat nasıl yaptığı bilinmez. Sadece gerekli parametre değeri gönderilir ve işlem gerçekleştirilir.

Nesne modelinde parametre kavramı parametre nesnesiyle içerilir. Bir parametre nesnesi bir komut nesnesiyle ilişkilendirilmiş bir parametre veya argümandır. Komutlar parametreler yardımıyla değişik şekilde işlev görme yeteneği kazanırlar. Parametre nesnesinin metot, özellik ve biriktirilerini kullanarak yapılabilecekler şöyle sıralanabilir :

Eğer depolanmış bir prosedür ya da parametreli bir sorgu ile ilişkilendirilmiş parametrelerin adları ve özellikleri biliniyorsa CreateParameter metoduyla parametre nesneleri oluşturulabilir ve Append metoduyla bunlar parametreler biriktirisine eklenebilir.

örnek 4 - bir parametre nesnesi oluşturma
Set parameter = command. CreateParameter(Name,Type,Direction,Size,Value) 

Kayıtkümesi Nesnesi (recordset object) :

Eğer veriyi bilgi satırları halinde döndüren bir sorgu komutu kullanılmışsa, bu satırlar yerel bir depoda saklanır. Nesne modelinde bu depo kayıtkümesi nesnesi olarak içerilir. Fakat bu kayıtkümesinin tek bir satırını belirten bir nesne yoktur. Herhangi bir zamanda kayıtkümesi nesnesi bütün kayıtların içinde tek bir kayıdı gösterir. Veri üzerinde yapılan işlemlerin hemen hemen tümü bu nesne kullanılarak yapılır. Kayıtkümesi nesnesi oluşturmak için bağlantı nesnesinin Execute metodu, komut nesnesi veya kayıtkümesi nesnesinin Open metodu kullanılır.

Kayıtkümesi yapısı bize şu imkanlari sunar:

Kayıtkümesi nesnesi kullanılmadan önce bir imleç tipi belirlenmelidir. ADO'da tanımlı dört imleç tipi vardır :

Daha önce komut nesnesinde anlatıldığı üzere kayıtkümesi nesnesi de bağımsız olarak oluşturulabilir. Bir kayıtkümesi nesnesi açıldığında ilk kaydı gösterilir. MoveFirst, MoveLast, MoveNext, MovePrevious ve Move metotları kayıtlar arasında hareketi sağlayan metotlardır. BOF ve EOF özellikleri bu hareket esnasında sınırları kontrol etmeye yarar.

Kayıtkümesi nesneleri iki çeşit kayıt günlemeye izin verir. İlk yöntemde yapılan değişiklikler anında veri kaynağına aktarılır. Update metodu kullanılır. İkinci yöntem toplu halde yapılan değişikliktir. Bu yöntemin kullanılması için veri sağlayıcının desteklemesi gerekir. UpdateBatch metoduyla birden fazla üzerinde değişiklik yapılan kayıt bir kerede veri kaynağına aktarılır.

örnek 5 - bağımsız bir kayıtkümesi nesnesi oluşturma
`ADO kayıtkümesi oluşturulması
set rsTimeSheet = CreateObject("ADODB.Recordset") 
`Kayıtkümesi özelliklerinin belirlenmesi
rsTimeSheet.CursorType = adOpenKeyset 
rsTimeSheet.Source = "Select * From EmpTime"
rsTimeSheet.Open

Alan Nesnesi (field object) :

Kayıtkümesinin bir satırı bir veya daha çok alandan oluşur. Eğer kayıtkümesini iki boyutlu bir yapı olarak düşünürseniz alanlar kolonları oluşururlar. Aynı zamanda bu alanlardan kayıtkümesinin alanlar biriktirisi meydana gelir. Her alanın nitelikleri arasında ismi, veri tipi ve değeri vardır. Veri kaynağından alınan bu değerdir.

Nesne modelinde bu yapı alan nesnesiyle içerilir. Alan nesnesinin biriktiri, metot ve özellikleriyle yapılabilecek işlemler şöyle özetlenebilir :

Veri kaynağındaki veriyi günlemek için önce kayıtkümesi satırlarındaki alanların günlenmesi gerekir. Burada günlemenin başarıyla yapılması bağlantı nesnesinin garantisi altındadır.

Hata Nesnesi (error object) :

Uygulamalarda hataların olması kaçınılmazdır. Genellikle bağlantı kurulamadığında, komut çalıştırılamadığında, veya uygun durumdaki bir nesne üzerinde işlem yapılamadığında hatalar oluşur.

Bu hatalar nesne modelinde hata nesnesi ile içerilir. Hata nesneleri Bağlantı nesnesinin hatalar biriktirisine yerleştirilir. Aslında bu hata nesneleri veri sağlayıcı hatalarıdır; bunun yanında ADO, run-time ortamının exception-handling mekanizmasına kendi hatlarını üretir. Bu hatalar kullanılan dilin hata yakalama mekanizmalarıyla ele alınır. Bu hataları ekte bulabilirsiniz :

hata ismihata numarasıhata tanımı
adErrInvalidArgument3001 0x800A0BB9uygulamanın kullandığı argümanlarda tip, sınır hatası
adErrNoCurrentRecord3021 0x800A0BCDuygulanın itediği işlem mevcut kaydı istiyor fakat bu kayıt silinmiş yada BOF veya EOF değeri doğrulanmış.
adErrIllegalOperation3219 0x800A0C93uygulamanın istediği işleme izin verilmiyor.
adErrInTransaction3246 0x800A0CAEuygulama işlem ortasında bağlantıyı kapatamaz
adErrFeatureNotAvailable3251 0x800A0CB3uygulamanın istediği işlem veri sağlayısı tarafından desteklenmiyor.
adErrItemNotFound3265 0x800A0CC1ADO uygulamanın istediği nesneyi biriktiride bulamıyor.
adErrObjectInCollection3367 0x800A0D27nesne halihazırda biriktiride olduğundan ekleme yapılamıyor.
adErrObjectNotSet3420 0x800A0D5Cuygulamanın işaret ettiği nesne geçerli bir nesne değil.
adErrDataConversion3421 0x800A0D5Duygulama şu anki işlem için geçersiz tipte bir değer kullanıyor.
adErrObjectClosed3704 0x800A0E78uygulamanın istediği işlem kullandığı nesne kapalı iken yapılamıyor.
adErrObjectOpen3705 0x800A0E79uygulamanın istediği işlem kullandığı nesne açık iken yapılamıyor.
adErrProviderNotFound3706 0x800A0E7AAuygulama komut nesnesiyle kaynak olarak kullandığı kayıtkümesi ActiveConnection özelliğini değiştiremiyor.
adErrBoundToCommand3707 0x800A0E7Buygulamanın istediği işlem kullandığı nesne açık iken yapılamıyor.
adErrInvalidParamInfo3708 0x800A0E7Cuygulama uygun olamayan bir parametre nesnesi tanımlıyor.
adErrInvalidConnection3709 0x800A0E7Duygulama kapalı veya geçersiz bir bağlantı üzerinden bir nesneyle işlem istiyor.

Ortaya çıkan bir hata bir veya daha fazla hata nesnesi oluşturur. Ortaya çıkabilecek bir diğer hata önceki hata nesnelerinin ortadan kaldırılmasına sebep olur.

Özellik Nesnesi (property object) :

Her ADO nesnesi bir dizi bağımsız özelliğe sahiptir. Özellikleri bir nesneyi tanımlar yada nesnenin kontrolünü sağlar.

İki tip özellik vardır: Oluşturulmuş ve dinamik: Oluşturulmuş özellikler ADO nesnesinin bir parçasidir ve her zaman hazırdır. Bu özellikler nesnenin özellikler biriktirisine alınmaz ve değerleri değiştirilebilse de karakteristikleri değiştirilemez.

örnek : oluşturulmuş özellik kullanımı - MyObject.Property 

Dinamik özellikler ise ADO nesne özellikleri içine veri sağlayıcısı sayesinde eklenirler ve sadece bu sağlayıcı kullanılırken mevcutturlar. Bu özellik nesneleri ait oldukları nesnenin özellikler biriktirisinde bulunur ve bunlara biriktiri üzerinden ulaşılır.

örnek : dinamik özellik erişimi - MyObject.Properties("Name") - biriktiri kullanıldı. 

Nesne modeli bir özelliği özellik nesnesiyle içerir.

ADO Biriktirisi "collection"

ADO’nun sağladığı biriktiri nesnesi, belli tipte nesneleri içeren bir nesnedir. Biriktirideki nesnelere bir biriktiri metodunu kullanarak ismiyle, katar olarak, ya da sırasıyla, tamsayı değeri olarak, ulaşilabilir.

ADO dört tip biriktiri sağlar :

Bağlantı nesnesi hatalar biriktirisine sahiptir. Bu biriktiride veri sağlayıcısına ilişkin bir hatada oluşturulan bütün hata nesneleri bulunur. Oluşan herhangi başka bir hatada eski hatalar biriktirisi temizlenir ve yeni hata nesneleri biriktiriye konur.

Komut nesnesi parametreler biriktirisine sahiptir. Bu biriktiride komuta uygulanabilecek tüm parametre nesneleri kapsanır. Refresh metoduyla komuta ait depolanmış prosedür ve parametreli sorguların parametre bilgileri komutun parametreler biriktirisinden alınır. CreateParameter metoduyla oluşturulan parametre nesneleri Append metoduyla biriktiriye eklenir. Böylece parametre değerleri üzerinde sağlayıcıyı kullanmadan işlem yapılabilir.

Kayıt kümesi nesnesi alanlar biriktirisine sahiptir. Bu biriktiride kayıtkümesi nesnesinin tüm kolonlarını belirten bütün alan nesneleri içerilir.

Bütün bunlara ek olarak, bağlantı, komut, kayıtkümesi ve alan nesnelerinin hepsinin ortak olarak sahip oldukları bir biriktiri tipi de özellikler biriktirisidir. Bu biriktiride ait oldukları nesneye ilişkin bütün özellik nesneleri bulunur.

ADO Olay Elealıcısı "Event Handler"

ADO 2.0 ile birlikte olay kavramı programlama modeline girmiştir. Olaylar belirli operasyonların oluştuğuna ya da oluşacağına ilişkin belirlemelerdir. Olaylar genelde asenkron görevlerin beraber organize edilmesinde yaralıdırlar.

İşlem başlatılmadan önce çağrılan olay elealıcıları, işlem parmetrelerini inceleme ve değiştirme olanağı sunarken, işlem tamamlandıktan sonra çağrılan olay elealıcıları asenkron bir olayın bitiminden sizi haberdar eder.

Nesne modeli açık olarak olayları içermez ama onları olay elealan rutinlerle temsil eder.

İki çeşit olay ailesi vardir :

Bağlantı olayları: Bu olaylar bağlantı üzerinde işlemler başlatıldığında, veya komutlar işletildiğinde veya bağlantılar başlatılıp bitirildiğinde işlev görürler.

Kayıtkümesi olayları: Bu olaylar veri alışını belirlemek üzere, kayıtkümesi nesnesi satırları üzerinde gezindiğinizde veya bir satır değiştirildiğinde veya satırdaki bir alan değiştirildiğinde veya bütün bir kayıtkümesi üzerinde değişiklik yapıldığında işlev görür.

ADO Uygulaması Örneği

Bu kesimde, ADO ve ASP kullanarak veri tabanında kayıtlara erişen, kayıt ekleyen bir uygulama örneği anlatılanları somutlaştırmak açısından sunulmaktadır.

Burada vereceğimiz örnek bir web üzerinden günlenebilecek bir zaman çizelgesi (timesheet) uygulamasıdır. Web üzerinden yapılan günleme Access veritabanı üzerinde saklanmaktadır. Bu uygulamayı, Microsoft Access veritabanı Times.mdb, ASP dosyaları times.asp, addtime.asp oluşturmaktadır. Uygulamayla ilgili times.asp için scriptleri içeren örnek kodları ekteki ado-ornek.doc dosyasında ve bu dokümanın html formatında bulabilirsiniz. Bu kodlarda HTML liste seçimi için ADO kayıtkümesi yapısının ASP ile kullanımına güzel bir örnek oluşturulmuştur.

örnek 6 - ADO ve ASP kullanılarak hazırlanmış bir zaman çizelgesi (timesheet) uygulaması örneği.görünümü
Göster Gizle Kopar Satır Gizle Satır Göster
<html>
 ADO Kullanımı Örnek Uygulama Kodu

 times.asp dosyası için ASP HTML ve script

<HTML>
<!-- Active Data Objects (ADO) kullanan Active Server Page (ASP) Örneği -->
<!-- programcı: Mark Spenik - 1997 -->
<!--bu örnekte bir combo box doldurmak ve zaman çizelgesinde girilen bilgiyi saklamak için--> 
<!--Active Data Objects kullanılır -->
<!-- bu örnekte aynı zamanda istemci ve sunucu scriptlerini çalıştırmak için ASP kullanılır. -->

<!--                                                                    -->
<HEAD>
<Title>Active Server Page TimeSheet Application</TITLE>
</HEAD>
<BODY BGCOLOR="Tan">
<CENTER>
<H2>Timesheet Application using Active Server Pages and ADO</H2>
</CENTER>
<HR SIZE=2>

<!-- form başlangıcı belirtiliyor -->
<FORM NAME="TimeSheet" METHOD="POST" ACTION="http://www.kscsinc.com/
   Times/addtime.asp">
<B>Employee:</B> <INPUT TYPE="text" NAME="txtEmployee" Size=30 Value="">
<p>
<B>Select the Client</B>
<%  `ADO kayıtkümesi nesnesi örneği yaratılıyor

    set rsClients = CreateObject("ADODB.Recordset")

    `SQL satırına bağlı sonuç kümesi açılıyor.
    rsClients.Open "SELECT ClientName FROM Clients","DSN=TimeSheet"
%>
<!-- ilerleyen kesimde HTML ve sunucu tarafı script karışımı vardır -->
<SELECT NAME="cmbClient">
<% Do While Not rsClients.EOF %>
<OPTION><%=rsClients("ClientName")%>
<%
       rsClients.MoveNext
   Loop
   rsClients.Close
   Set rsClients = Nothing
%>
</SELECT>
<p>
<B>Select the billing code</B>
<SELECT ALIGN=CENTER Name="cmbCode">
<OPTION>Holiday
<OPTION>Vacation
<OPTION>Sick
<OPTION>Client Server Consulting
<OPTION>Work Group Consulting
<OPTION>Internet Consulting Services
</Select>
<p>
<B>Date:</B> <INPUT TYPE="text" NAME="txtWorkDate" Size=15 Value=<% =Date %>>
<p>
<B>Hours:</B> <INPUT TYPE="text" Name="txtHours" Size=4 Value="8.0">
<BR>
<HR>
<INPUT TYPE="Button" Name="cmdAdd" Value="Validate TimeSheet">
<INPUT TYPE=SUBMIT VALUE="Submit Form">
<SCRIPT LANGUAGE="VBScript">
<!--
Sub window_onLoad()
Dim CurrentForm

   `Set the focus to the text box
   Set CurrentForm = Document.TimeSheet

   CurrentForm.txtEmployee.Focus
   Set CurrentForm = Nothing
end sub

Sub cmdAdd_OnClick
Dim vTemp
Dim CurrentForm

    `text box a odaklanılıyor
    Set CurrentForm = Document.TimeSheet

    `somuçları sunucuya öndermeden istemci tarafı onayı yapılıyor
    vTemp = CurrentForm.txtEmployee.Value
    If VTemp = "" Then
        MsgBox "You must enter an Employee Name.",48, "Blank Name"
        Exit Sub
    End If

    `tarih geçerliliği kontrol ediliyor
    vTemp = CurrentForm.txtWorkDate.Value
    If NOT IsDate(vTemp) Then
    MsgBox "You must enter a valid date in the date field.",48, "Invalid Date"
        Exit Sub
    End If

    `en az 8 saat çalışıldığını test ediyor
    vTemp = CurrentForm.txtHours.Value
    If vTemp < 8.0 Then
        MsgBox "You must enter at least 8 hours in the hours field.",
        Â48, "Incorrect Number of Hours"
        Exit Sub
    End If
    
End Sub

-->
</SCRIPT>
</BODY>
</HTML>

Dosya Listesi

İçindekilerGirişİndex
YukarıİlkÖncekiSonrakiSon
Geriİleri
Yazdır