asp ve ado birlikteliği
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"