DERS 6: ASP ve ADO BİRLİKTELİĞİ

 

Ders sonunda yapabilecekleriniz:

 

-ASP sayfalarında ADO nesnelerini kullanmayı açıklamak.

 

 

I. ADO NESNELERİ

Microsoft ActiveX Data Objects (ADO), Visual Basic ya da bir ASP kodu aracılığıyla veritabanlarına bağlantı kurmak ve veriler üzerinde işlem yapmak için geliştirilmiş bir arabirimdir.

 

ASP uygulamalarının çoğunun amacı veritabanlarına erişmek ya da veritabanı üzerinde işlem yapmaktır. ADO, bir veri sağlayıcı (data provider-OLE DB) aracılığıyla yerel ya da uzak veritabanlarına erişmeyi sağlayan bir veri erişim yöntemidir. ADO hiyerarşik olmayan ve bağımsız olarak kullanılan nesneleriyle verilere kolayca ulaşmayı sağlar. ADO'nun bellek gereksinimi daha azdır. Hızlı bir biçimde çalışarak veritabanı uygulamalarının daha etkin bir biçimde veritabanlarına erişim yapmasına olanak sağlar. DAO ve RDO veri erişim yöntemlerinin yerine geçen gelişmiş bir teknoloji olan ADO, daha kolay ve anlaşılabilir nesnelerle veritabanı işlemlerini sadeleştirir:

 

A. ADO'YU YÜKLEMEK

ADO, tek başına satılan ve yüklenen bir yardımcı program değildir. ADO, Microsoft Data Access Components (MDAC) adı verilen program grubunun bir parçasıdır. Bilgisayara IIS gibi Web server yazılımı yüklendiğinde ADO'da yüklenmiş olur. Bunun dışında veritabanı uygulamaları ve programlama dillerinin yüklenmesi ADO'yu yükler ya da var olan bileşenleri güncelleştirir.

 

İPUCU: MDAC'ın en güncel şeklini indirmek için www.microsoft.com/data adresinden yararlanabilir.

 

B. ADO NESNE MODELİ

ADO veri erişim sistemi oldukça basit bir nesne modeline sahiptir. Bu modelde birçok nesne seçimli olarak (birlikte) ya da bağımsız olarak kullanılabilir.

 

ADO nesneleri RDO nesnelerine benzer ancak oldukça farklıdır. Yalnızca nesne olarak üç nesneye sahip olan nesne modelinde tam olarak yedi nesne ve collection (koleksiyon, topluluk) vardır.

 

En üst düzey ADO nesnesi Connection'dır. Bu nesne veri kaynağıyla ilgili her türlü iletişimi yerine getirir. Bağlantı nesnesi olan Connection, diğer nesnelerde de olduğu gibi önce tanımlanır ve ardından açılarak kullanılır.

 

Tablo: ADO modelinde yer alan nesneler

Nesne              Amacı

Command        Bir veri kaynağı üzerinde bir query ya da deyimi işletir.

Connection       Bir veri kaynağına doğrudan bağlantı yaratır.

Error                Veri kaynağından bir hatayı döndürür.

Field                 Bir kayıt içindeki bir alan (kolon).

Parameter         Bir komut için parametre tutar.

Recordset         Bir komut tarafından üretilen (dönen) verileri içerir.

 

C. ADO SABİTLERİ

ADO nesne modelindeki nesneleri kullanmak için bazı sabitlerin kullanılması gerekir. Bu sabitler her seferinde tanımlanmaktansa kodun içinde tanımlanarak var olan bir dosyadan yüklenir.

 

Bu sabitler connection, recordset, adOpenDynamic gibi ADO nesnelerinin ve bileşenlerinin tanımladır.

NOT: Bu dokümanlar Faruk Çubukçu tarafından hazırlanmıştır. Burada adı geçen ticari ünvanlar ve markalar bilgi amaçlı kullanılmışlardır ve kendi imtiyazlarına sahiptirler. Bu dokümanlar ticari amaçlı olarak kullanılmaz. Daha fazla bilgi için www.farukcubukcu.com adresine bakınız.

 

ASP kodlarında yer alan ADO sabitleri, ADOvbs.inc gibi bir dosyanın ASP sayfalarına eklenmesiyle sağlanır.

 

<!--#include file="ADOvbs.inc"-->

 

Örnek: ASP'de ADO sabitlerinin yüklenmesi.

 

<% @Language = VBScript Codepage= 1254 %>

<HTML>

<!-- Kirtasiye Istek formu doldurmak ve veritabanina yazmak-->

 

<HEAD>

<meta http-equiv="content-type" content="text/html; charset=ISO-8859-9">

<meta http-equiv="Content-Type" content="text/html; charset=windows-1254">

<!-- yukaridaki iki satir türkçe çikti saglamak için -->

 

<TITLE> Kirtasiye istek Formu </TITLE>

</HEAD>

 

<BODY>

<!--#include file="ADOvbs.inc"-->

<%

Dim varMusteriKodu

varMusteriKodu=Request.Form("txtkodu")

 

Dim Rs

StrSql = "SELECT * FROM MUSTERI"

StrProvider="Provider=Microsoft.Jet.OLEDB.4.0 ; Data Source=c:\data\musteriler.mdb"

Set Rs = Server.CreateObject("ADODB.recordset")

Rs.Open StrSql, StrProvider, adOpenDynamic, adLockOptimistic

 

Rs.Find "kodu = " & varMusteriKodu

If Rs.EOF Then

  Response.Write "Girilen kod bulunamadi"

Else

  Rs.Delete adAffectCurrent

  Response.Write "kayit silinmistir."

End If

 

Rs.Close

Set Rs=Nothing

%>

</BODY>

</HTML>

 

 

D. VERİTABANI BAĞLANTILARI İÇİN HAZIRLIK YAPMAK

ASP uygulamalarında genellikle bir veritabanı dosyasına erişim yapılır. Bu veritabanı dosyası Microsoft Access ya da Microsoft SQL Server üzerinde olabilir. Veritabanlarına bağlanmak için değişik yöntemler vardır. Bunların başında DSN tanımı kullanmak, veritabanının kendi sürücüsünü kullanmak ya da Native OLEDB denen teknik gelir.

 

DSN Tanımı Yapmak

DSN tanımı ODBC veritabanları için yapılır. ODBC veritabanlarına erişim için bir ODBC DSN (Data Source Name) tanımlanır.

 

Bir DSN bilgisi şunları içerir:

 

-DSN adı.

-Başvurduğu (işaret ettiği) dosya.

-Veritabanına erişim için kullanıcı adı ve parola.

-Özel veritabanlarına erişmek için diğer bilgiler.

 

1. WİNDOWS İŞLETİM SİSTEMLERİNDE ODBC-DSN TANIMI

Visual Basic ile bir veri erişim yöntemi ile ODBC üzerinden bir veritabanına bağlantı kurulması için gerekli DSN (Data Source Name) tanımının yapılması gerekir.

 

Bu işlem için:

Windows işletim sistemlerinde Control Panel'de yer alan ODBC simgesi kullanılır:

 

Bu ekranda Add düğmesine tıklanarak yeni bir veritabanı kaynağı seçilir. Ardından hangi tür bir veritabanı için bağlantı yapılacağı ve veritabanının seçimi yapılır. 

 

SQL Server tanımlanmasında Server kutusunda network üzerindeki SQL server seçilir. Name kutusuna ise DSN tanımına bir ad verilir. Bu genellikle erişilecek veritabanın adı ya da konuyla ilgili bir ad olabilir. Örneğin Musteri veritabanına bağlanılacaksa Musteri adlı bir DSN adı verilebilir.

 

Microsoft Access için ise Select düğmesine tıklanarak veritabanı dosyası seçilir. Örneğin musteri.mdb gibi.

 

DSN İle Microsoft Access'e ya da SQL Server'a Erişmek:

 

Set Rs=Server.CreateObject("ADODB.Recordset")

Rs.Open "kirtasiye", "DSN=sirket"

 

Veritabanı Sürücüsüyle Microsoft Access'e Erişmek:

 

Set Con = Server.CreateObject("ADODB.connection")

Set Rs = Server.CreateObject("ADODB.recordset")

Con.Open "Driver={Microsoft Access Driver (*.mdb)};DBQ=c:\data\sirket.mdb"

Rs.Open "SELECT * FROM musteriler", Con

 

Native OLEDB İle Microsoft Access'e Erişmek:

 

OLE DB'nin kullanıldığı erişimlerde DSN gibi, istemci bilgisayarda bir düzenleme yapmaya gerek yok. Microsoft veri erişim bileşenlerinin bulunması yeterlidir.

 

Set Con = Server.CreateObject("ADODB.connection")

Set Rs = Server.CreateObject("ADODB.recordset")

Con.Open="Provider=Microsoft.Jet.OLEDB.4.0 ; Data Source=c:\data\sirket.mdb"

Rs.Open "SELECT * FROM musteriler", Con

 

Native OLEDB İle Microsoft SQL Server'a Erişmek:

 

Set Con = Server.CreateObject("ADODB.connection")

Set Rs = Server.CreateObject("ADODB.recordset")

con.Open "Provider=SQLOLEDB;Data Source=LAB1-2;Database=SiparisYonetim;User Id=USER1;Password=USER1;"

StrSQL = "Select * FROM SIPARIS"

Rs.Open StrSQL, Con

 

Örnekteki tanımlamalar:

 

Bağlanılan SQL Server: LAB1-2

Veritabanı: siparisyonetim

Kullanıcı adı: USER1

Parolası: USER1

 

İPUCU: Yukarıdaki tanımlamalar sizin çalışmanıza göre farklı olabilir. Bir de bu bağlantılar verileri okumak içindir. Verileri yazmak için "adOpenDynamic, adLockPessimistic" imleç ve kilitleme tanımlarının da yapılması gerekir.

 

E. DATA PROVİDER’I BELİRTMEK

Bağlantıda OLE DB kullanılacaksa, Connection nesnesi başlatıldığında bir OLE DB sağlayıcısının (data provider) belirtilmesi gerekir. Bunu yapmak için Provider özelliği kullanılır.

 

bağlantı.Provider = "SQLOLEDB"  

 

Tanımlaması SQL SERVER için bir bağlantının tanımlanmasını sağlar.

 

Tablo : Veri Sağlayıcılar.

OLE DB Provider        Açıklama

SQLOLEDB    SQL Server için OLE DB sağlayıcısı

MSDASQL     ODBC için OLE DB sağlayıcısı

Microsoft.Jet.OLEDB.3.51      Jet (Access) için OLE DB sağlayıcısı

Microsoft.Jet.OLEDB.4.0        Jet (Access) için OLE DB sağlayıcısı

MSIDXS         Index Server için OLE DB sağlayıcısı

ADSDSOObject          Active Directory Service için OLE DB sağlayıcısı

MSDAORA     Oracle için OLE DB sağlayıcısı

 

Örnek bağlantılar:

 

Access'e erişmek:

 

Set Con = Server.CreateObject("ADODB.connection")

Set Rs = Server.CreateObject("ADODB.recordset")

 

Con.Open="Provider=Microsoft.Jet.OLEDB.4.0 ; Data Source=c:\data\sirket.mdb"

Rs.Open "kirtasiye", Con

 

Access'e yazmak:

 

Set Con = Server.CreateObject("ADODB.connection")

Set Rs = Server.CreateObject("ADODB.recordset")

 

Con.Open="Provider=Microsoft.Jet.OLEDB.4.0 ; Data Source=c:\data\sirket.mdb"

Rs.Open "kirtasiye", Con, adOpenKeyset, adLockOptimistic

 

 

SQL Server'a erişmek:

 

con.Open "Provider=SQLOLEDB;Data Source=LAB1-2;Database=SiparisYonetim;User Id=sa;Password=;"

StrSQL = "Select * FROM SIPARIS"

Rs.Open StrSQL, Con

 

SQL Server'a yazmak:

 

con.Open "Provider=SQLOLEDB;Data Source=LAB1-2;Database=SiparisYonetim;User Id=sa;Password=;"

StrSQL = "Select * FROM SIPARIS"

Rs.Open StrSQL, Con, adOpenKeyset, adLockOptimistic

 

Örnekteki tanımlamalar:

 

Bağlanılan SQL Server: LAB1-2

Veritabanı: siparisyonetim

Kullanıcı adı: sa

Parola: yok

 

Örnek : Veritabanındaki Verileri Listelemek

Aşağıdaki örnekte bir Access veritabanındaki veriler tablo halinde listelenmektedir:

 

<% @Language = VBScript Codepage= 1254 %>

<HTML>

<!-- tablodan bütün kayitlari okumak ve tablo yaparak ekrana getirmek-->

<HEAD>

<meta http-equiv="content-type" content="text/html; charset=ISO-8859-9">

<meta http-equiv="Content-Type" content="text/html; charset=windows-1254">

<!-- yukaridaki iki satir türkçe çikti saglamak için -->

<TITLE> Listeleme </TITLE>

</HEAD>

<H1> MALZEME DURUM LISTESI </H1>

<BR>

<BODY>

<%

Set Con = Server.CreateObject("ADODB.connection")

Set Rs = Server.CreateObject("ADODB.recordset")

Con.Open="Provider=Microsoft.Jet.OLEDB.4.0 ; Data Source=c:\data\malzemeyonetim.mdb"

Rs.Open "SELECT * FROM MALZEME", Con

 

Response.Write "<TABLE BORDER= '1'>"

Response.Write "<TR> <TD>" & "<B>" & "MKODU" & "</B>" & "</TD> <TD>" & "MADI" & "</TD> <TD>" & "MGRUBU" & "</TD> </TR>"

 

Do While Not Rs.Eof

Response.Write "<TR> <TD>" & Rs("MKODU") & "</TD> <TD>" & Rs("MADI") & "</TD> <TD>" & Rs("MGRUBU") & "</TD> </TR>"  

Rs.MoveNext

Loop

Response.Write "</TABLE>"

Rs.Close

%>

</BODY>

</HTML>

 

 

II. UYGULAMALAR

1. Microsoft Access kullanarak bir şirket veritabanı yaratın. Bu veritabanında bir müşteri tablosu yaratın. Alanları: kodu, adisoyadi, adresi, ili, borcu vb. olsun.

 

2. Müşterileri alfabetik olarak listeleyen bir sayfa hazırlayın.

 

İpucu:

 

Set Rs = Server.CreateObject("ADODB.Recordset")

StrSQL ="SELECT * FROM MUSTERI ORDER BY adisoyadi"

Rs.Open StrSQL, "DSN=musteriler"

...

 

 

3. İstenilen müşterilerin siparişlerini listeleyen bir form (HTML formu dosyası) ve karşılığını (Reponse dosyası) hazırlayın. Müşteri kodu bir açılan kutudan seçilsin. Ardından düğmeye basılarak karşılık sayfasına geçilerek orada tablo olarak müşterinin siparişleri listelensin.

 

VarMusteri=Request.Form("txtMusterisec")

Set Rs = Server.CreateObject("ADODB.Recordset")

StrSQL ="SELECT * FROM SIPARIS WHERE kodu = " & VarMusteri & ";"

Rs.Open StrSQL, "DSN=musteriler"

...

 

III. GÖZDEN GEÇİRME

 

1. ASP ve ADO, hangi tarayıcılarla uyumludur.

2. ASP ve ADO çözümünde hangi veritabanları kullanılır?

3. Command nesnesinin kullanım alanlarını sayınız?

4. ADOvbs.inc dosyasının işlevi nedir? Nasıl Yüklenir?