DERS 6: ASP ve ADO
BİRLİKTELİĞİ
Ders sonunda
yapabilecekleriniz:
-ASP sayfalarında
I.
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.
A. ADO'YU YÜKLEMEK
İPUCU: MDAC'ın en güncel
şeklini indirmek için www.microsoft.com/data adresinden yararlanabilir.
B.
En üst düzey
Tablo:
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
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
<!--#include file="ADOvbs.inc"-->
Örnek: ASP'de
<% @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
2. ASP ve
3. Command nesnesinin
kullanım alanlarını sayınız?
4. ADOvbs.inc dosyasının
işlevi nedir? Nasıl Yüklenir?