ActiveX Data Objects (ADO), Web sayfalarınızda veri tabanı erişimini sağlamada kullanılan kolay kullanılır bir teknolojidir. ADO’yu Open Database Connectivity (ODBC) veri tabanına ve OLE DB veri kaynaklarına bağlantı kurmak için özlü ve ölçümsel betikler yazmak için kullanılabilir.
ODBC’de DSN (Data Source Name_Veri Kaynağı İsmi) Oluşturmak
Veri tabanı betiklerini tanımlamadan önce, ADO’yu yerleştirmeli, tanımlamalı ve veri tabanınızla iletişimini sağlamalısınız. Web uygulamanızdan veri tabanına veri ileten veri tabanı sürücüleri, ODBC veri tabanını yerleştirmek ve tanımlamak için bir DSN kullanırlar. Tipik olarak, DSN, veri tabanı konfigürasyonunu, kullanıcı güvenliğini, ve konum bilgisini içerir ve Windows NT kayıtlarında bir kayıt ya da metin biçimini alabilirler.
ODBC ile oluşturmak istediğiniz DSN türünü seçebilirsiniz: User, System, ya da File. User ve System DSNleri Windows NT kayıtlarında yer alır. System DSN, sunucuya giren her kullanıcının veri tabanına erişmesine izin verir. Oysa User DSN veri tabanı erişiminde, belirli güvenlik kriterlerine göre belirli kullanıcılara izin verir. File DSN, metin biçimini alır, çoklu kullanıcı erişimine izin verir ve bir sunucudan diğerine geçirilmesi, DSN’i kopyalayarak, kolaydır. Bu sebeple, bu konudaki örneklerde File DSN kullanılmaktadır.
Dosya tabanlı bir DSN’i oluşturmak için Windows Başlat menüsünden Denetim Masasını açın. ODBC ikonuna çift tıklayın, ve File DSN özelliğini seçin. Adde tıklayın, veri tabanı sürücünüzü seçin, ve Nexte tıklayın. Özel veri tabanı yazılımınız için bir DSN konfigüre etmek için aşağıdaki adımları takip edin.
1. Create New Data Source diyalog kutusunda, liste kutusundan Microsoft Access Driver’ı seçin ve Nexte tıklayın.
2. DSN dosyanız için bir isim yazın ve Nexte tıklayın..
3. Veri kaynağını oluşturmak için Finishe tıklayın.
4. ODBC Microsoft Access 97 Setup diyalog kutusunda Selecte tıklayın. Bir Microsoft Access veri tabanı ismi (*.mdb) seçin, ve OKe tıklayın.
ASP, uygun veri kaynakları olarak, paylaşılan veri tabanlarını (Microsoft ® Access ya da Microsoft ® FoxPro) destekler. Paylaşılan dosyalı veri tabanlarının tavsiye edilmesine rağmen bu tür veri tabanı motorlarını sadece geliştirme amaçlı kullanınız. Paylaşımlı dosyalı veri tabanları, yüksek istemler için sunucu-istemci veri tabanları kadar uygun olmayabilir.
Bir SQL Server Database File(Sunucu veri tabanı dosyası) DSN’i tanımlamak için:
Not: Eğer veri tabanı uzak bir sunucuda yeralıyorsa, detaylı konfigürasyon bilgileri için sunucu yöneticinize başvurunuz. Aşağıdaki adımlar SQL sunucusu için varsayılan ODBC ayarlarını kullanır. Bu ayarlar sizin donanımınızda çalışmayabilir.
1. Create New Data Source diyalog kutusunda, liste kutusundan SQL Server’ı seçin ve Nexte tıklayın.
2. DSN dosyası isminizi yazın ve Nexte tıklayın.
3. Veri kaynağını oluşturmak için Finishe tıklayın.
4. SQL sunucu adını, giriş kimliğinizi ve şifrenizi girin.
5. Create a New Data Source to SQL Server diyalog kutusunda, Server liste kutusundaki SQL sunucu veri tabanını içeren sunucunun adını seçin ve Nexte tıklayın.
6. Giriş numarası güvenliği için bir metod seçin.
7. Eğer SQL Sunucu güveliğini seçtiyseniz, bir giriş kimliği ve şifre girin, Nexte tıklayın.
8. Create a New Data Source to SQL Server diyalog kutusunda, varsayılan veri tabanınızı, sürücü saklama yordam ayarlarını, ve ANSI tanımlarını kurun ve Nexte tıklayın.
9. Diyalog kutusundan (Create a New Data Source to SQL Server), bir karakter çevrim metodu seçin, ve Nexte tıklayın.
10. Bir sonraki diyalog kutusundan (Create a New Data Source to SQL Server), giriş opsiyonlarını seçin.
11. ODBC Microsoft SQL Server Setup diyalog kutusundan, Test Data Sourcea tıklayın. Eğer DSN doğru olarak oluşturulmuşsa, Test Results diyalog kutusu testin doğru olarak tamamlandığını belirtecektir.
Bir Oracle Database File DSN’i konfigüre etmek için:
DSN’i yaratmak istediğiniz bilgisayarda Oracle istemci yazılımının doğru olarak kurulduğuna emin olun.
1. Create New Data Source diyalog kutusunda, liste kutusundan Microsoft ODBC for Oracle’ı seçin ve Nexte tıklayın.
2. DSN dosya isminizi yazın ve Nexte tıklayın.
3. Veri kaynağını yaratmak için Finishe tıklayın
4. Bir kullanıcı adı, şifre ve sunucu ismi girip, OKe tıklayın.
Not: DSN dosyalarının .dsn uzantıları vardır ve \Programs\Common Files\ODBC\Data Sources dizininde yer alırlar.
Bir Veri Tabanına Bağlanmak
İlk adım veri tabanı kaynağı ile bir bağlantı kurmaktır. Uygulamalarınız ve ODBC veri tabanları arasında bağlantı kurmak için ADO’nun Connection nesnesini kullanabilirsiniz. Connection nesnesi veri tabanı bağlantısı kurma, koparma ve günleme için sorgu yapmada kullanılan birçok özellik ve metodu içerir.
Bir veri tabanı bağlantısı kurmak için öncelikle bir Connection nesnesi oluşturun.
Örneğin, aşağıdaki betik Connection nesnesini oluşturur ve bir bağlantı kurar:
Connection Nesnesi ile Sorgu İşlemek
Connection nesnesinin Execute metodu ile, Structured Query Language (SQL) sorgularınızı veri tabanı kaynağına iletip sonuçları elde edebilirsiniz. Aşağıdaki betik Connection nesnesinin Execute metodunu kullanarak SQL INSERT komutu formundaki bir sorguyu iletir. Bu durumda, betik bloğu Jose Lugo ismini Musteriler isimli veri tabanı tablosuna ekliyor.
SQL INSERT komutunun yanısıra, SQL UPDATE ve DELETE komutları da kullanılabilir.
Sonuçları İşlemek için Recordset Nesnesini Kullanmak
Connection nesnesinin birtakım sınırlamaları vardır. Özellikle Connection nesnesiyle veri tabanından veri getiren ve görüntüleyen betikler yazamazsınız. Veri getirmek, sonuçları incelemek ve veri tabanınız üzerinde değişiklikler yapmak için, ADO’da Recordset nesnesi vardır. Recordset nesnesinin veri getirmek ve birtakım veri tabanı satır veya kayıtlarını görüntülemek gibi özellikleri vardır. Recordset nesnesi sorgu sonucu dönen her kayıtın pozisyonunu tuttuğu için, sonuçlar üzerinde gezebilme imkanınız vardır.
Recordset nesnenizin cursor türü özelliğine göre kayıtlar üzerinde gezip, günleme yapabilirsiniz. Veri tabanı imleçleri göstergeler gibi davranarak, kayıt grubu içinde belli bir yere konumlanabilir. İmleçler, özellikle, kayıtları getirme ve incelem için kullanışlıdır.
Recordset nesnesinin imleç hareketlerini kontrol etme, dolayısıyla sonuçları inceleme ve günleme özelliği vardır. Örneğin, CursorType ve CursorLocation özelliklerini, istemci uygulamanıza sonuçlar döndüren imleç türlerini konfigüre etme ve diğer kullanıcıların veri tabanına yaptığı en son değişiklikleri görmek için kullanabilirsiniz.
Record Set (kayıt grubu) Getirmek
Başarılı veri tabanı uygulamaları, bağlantı kurmak için Connection nesnesini ve dönen veriyi işlemek için Recordset nesnesini kullanır. Örneğin, aşağıdaki sunucu-taraflı betik bir SQL SELECT komutunu çalıştırmak için Recordset nesnesini kullanır. SELECT komutu sorgu kriterlerine göre belli bir grup bilgi getirir. Sorgu ayrıca SQL WHERE ifadesini de içerir ki bu ifade sorguyu belirli kriterlere göre kısıtlamayı sağlar. Bu örnekte, WHERE ifadesi sorguyu Musteriler veri tabanı tablosundaki soyadı Smith olanlarla sınırlıyor.
Yukarıdaki örnekte, Connection nesnesi veri tabanı bağlantısını kurdu ve Recordset nesnesi de aynı bağlantıyı sonuçları veri tabanından getirmek için kullandı. Bu metod, veri tabanı bağlantısı kurulduğunda hassas konfigürasyonlar yapılacağı zaman avantajlı olur.
Örneğin, bağlantı kopmadan önceki gecikme zamanını belirlemeniz gerekiyorsa, bu özelliği ayarlamak için Connection nesnesini kullanmanız gerekecektir. Ancak, sadece ADO’nun varsayılan bağlantı özellikleri ile bir bağlantı kurmak istiyorsanız, Recordset nesnesinin Open metodu ile bir bağlantı kurabilirsiniz:
Recordset nesnesinin Open metodu ile bağlantı kuruyorsanız, dolayısıyla bağlantı güvenliğini de Connection nesnesi ile sağlıyorsunuz demektir.
Command Nesnesi ile Sorgu Geliştirmek
ADO Command nesnesi ile sorguları, Connection ve Recordset nesnelerinin kullanıldığı yolla çalıştırabilirsiniz. Fakat Command nesnesi ile sorgunuzu veri tabanı kaynağında hazırlayıp ya da derleyip, sorguyu değişik değerlerle de yeniden kullanabilirsiniz. Sorguyu derlemenin faydası, hazırda bulunan bir sorguyu değiştirmek için gerekli sürenin önemli ölçüde azaltılmasıdır. Ayrıca, SQL sorgularınızı, işletimden önce sorgu değiştirme opsiyonu sayesinde, kısmen tanımsız bırakabilirsiniz.
Command nesnesinin Parameters yığını, sorguyu her yeniden kullanışınızda yeniden oluşturma sorununu ortadan kaldırır. Örneğin, Web tabanlı envanter uygulamanızda, malzeme ve fiyat bilgilerini düzenli olarak günlemeniz gerekiyorsa, sorgunuzu aşağıda gösterilen şekilde yeniden tanımlayabilirsiniz:
Yukardaki örneği inceleyecek olursak, sorgu veri tabanı kaynağına tekrar yollanmadan ve tekrar tanımlanmadan, sorgu, değişik değerlerle yeniden kullanılıyor. Sorgularınızı Command nensnesi ile derlemenin bir avantajı da, SQL sorgularını oluşturen dizgileri birleştirirken yaşanabilecek problemleri önlemesidir. Command nesnesinin Parameter yığınını kullanarak, belli dizgi, tarih ve saat türleri tanımlamada yaşanabilecek problemeler kısmen ortadan kalkmış olur. Örneğin, kesme işareti (’) içeren SQL sorgu değerleri, sorgunun çalışmamasına sebep olabilir:
strSQL = “INSERT INTO Musteriler (adi,soyadi) VALUES (’Robert’,'O’Hara’)”
Soyadi O’Hara içinde kesme işareti var ve bu işaret SQL VALUES anahtar kelimesinde verileri belirten kesme işareti ile karışabilir. Command nesnesi kullanınca bu tür problemeler ortadan kalkar.
HTML Formlarını ve Veri Tabanı Erişimini Birleştirmek
HTML formları içeren Web sayfaları, kullanıcılara uzaktan veri tabanına erişip belli bilgilerin getirilmesine olanak verir. ADO ile kullanıcı form bilgilerini biriktiren, bazı veri tabanı sorguları yapabilen ve kullanıcıya bilgi döndürebilen basit betikler yazılabilir. ASP Request nesnesini kullanarak, HTML formuna girilen bilgileri getirebilir, bu bilgiyi SQL ifadelerinize katabilirsiniz. Örneğin, aşağıdaki betik bloğu HTML formundan elde edilmiş bilgileri veri tabanı tablosuna ekler. Betik kullanıcı bilgilerini, Request nesnesinin Form yığını ile biriktirir.
Formlar ve ASP Request nesnesi hakkında daha fazla bilgi için, “HTML Formlarıyla Çalışmak”a bakınız.
Veri Tabanı Bağlantısı Başarımı
Binlerce müşterinin çevrimiçi girişlerini takip etme gibi bir Web veri tabanı uygulamasında asıl önemli olan veri tabanı bağlantısı başarımıdır. Veri tabanı bağlantısını açmak ve kullanmak, hiç bilgi iletimi olmasa bile, veri tabanı kaynaklarını zorlayıp, bağlantı problemlerini yol açabilir. İyi tasarlanmış bir Web veri tabanı uygulaması, veri tabanı bağlantısını geri elde edip, ağ trafiği yüzünden oluşan gecikmeleri telafi edebilmelidir.
Bağlantının Zaman Aşımı
Bir veri tabanı sunucusu işletim sırasında aniden fazla yüklenmiş olabilir. Böylece yeniden giriş yapılması hatta bağlantının da yeniden kurulması gerekir. Sonuç olarak, aşırı miktarda oluşan bağlantı gecikmeleri uygulamanızın performansını düşürecektir.
Connection nesnesinin ConnectionTimeout’u, yeniden bağlantı kurma çabaları ve hata mesajları için harcanan zamanı sınırlar. Örneğin, aşağıdaki betik ConnectionTimeout özelliğini bağlantı kurma denemesini yirmi saniye bekledikten sonra iptal edecek şekilde ayarlamaktadır:
Set cn = Server.CreateObject(”ADODB.Connection”)
cn.ConnectionTimeout = 20
cn.Open “FILEDSN=MyDatabase.dsn”
ConnectionTimeout özelliğinin varsayılan değeri 30 saniyedir.
Bağlantıları Havuzlama
Sık sık bağlantı kurup, kesen Web veri tabanı uygulamaları, veri tabanı sunucusunun performansını düşürür. ASP, ODBC 3.5 kullanarak, bağlantı başarımını verimli bir şekilde destekler. Connection biriktirmek, performansı yükseltmek ve boş bağlantı sayısını azaltmak için, açık veri tabanı bağlantılarını korur ve değişik kullanıcılar arasında bağlantı paylaşımını sağlar. Her bağlantı isteminde, bağlantı havuzu öncelikle havuzda boş bağlantı olup olmadığını kontrol eder. Varsa, yeni bağlantı yerine bu bağlantı döndürülür.
Eğer ODBC sürücünüzün bağlantı havuzuna katılmasını istiyorsanız, veri tabanı sürücünüzü konfigüre etmeli ve sürücünün CPTimeout özelliğini Windows NT kayıtlarında ayarlamalısınız. ODBC bir bağlantıyı kesmek isterse, bağlantı koparılmak yerine havuzda saklanır. CPTimeout özelliği, bağlantının havuzda ne kadar süre tutulabileceğini belirler.
Eğer bağlantı CPTimeout’da belirlenenden daha uzun durmak isterse, bağlantı koparılır ve havuzdan çıkarılır.
Aşağıdaki ayarlarla bir Windows kaydı yaratarak,CPTimeout özelliğine sırayla değer atamak suretiyle bir ODBC veri tabanı sürücüsü için bağlantı havuzlama yapabilirsiniz:
\HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI\driver-name\CPTimeout = timeout
(REG_SZ, birimler saniye cinsinden )
Örneğin, aşağıdaki anahtar, SQL sunucu sürücüsü için, bağlantı havuzu zaman aşımını 180 saniyeye kurar.
\HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI\SQL Server\CPTimeout = 180
Not: Varsayılmış olarak, Web sunucunuz CPTimeout değerini 60 saniye olarak kurar.
Bağlantıyı Birçok Sayfa Arasında Kullanmak
Bağlantıyı bir çok sayfa arasında, ASP’nin Application nesnesi içinde bağlantıyı saklamak suretiyle yeniden kullanabilirsiniz. Ancak bu durumda, bir bağlantıyı gerekmediği halde boşuna açık tutmuş olursunuz. Eğer aynı ASP veri tabanı uygulmasına birden fazla kullanıcı erişmek istiyorsa, bu durumd ASP’nin Application nesnesinin içine bağlantı dizgisini yerleştirerek, çeşitli Web sayfaları arası veri tabanı bağlantısını yeniden kullanabilirsiniz. Örneğin, bağlantı dizgisini Global.asa dosyasını Application_OnStart olay yordamında belirleyebilirsiniz. Aşağıdaki betikte bu durum örneklenmektedir:
Application.lock
Application(”ConnectionString”) = “FILEDSN=Veritabanım.dsn”
Application.unlock
Artık veri tabanına erişen her ASP dosyasında, sayfada bağlantı nesnesi örneği oluşturmak için, şöyle yazabilirsiniz:
<OBJECT RUNAT=Server ID=cn PROGID=”ADODB.Connection”>
</OBJECT>
Bağlantıyı açmak için şu betiği kullanın:
cn.Open Application(”ConnectionString”)
Ve sayfanın sonunda bağlantıyı koparmak için:
cn.Close
Tek bir kullanıcını birçok Web sayfası arasındaki bağlantıyı yeniden kullanmak istemesi durumunda, bağlantı dizgesini saklamak için Application nesnesi yerine Session nesnesini kullanmak daha avantajlıdır.
Bağlantıyı Koparmak
Bağlantı havuzlamayı en iyi şekilde kullanmak için, veri tabanı bağlantısını olabildiğince çabuk bir şekilde kapatın. Varsayılmış olarak, betiğinizin çalışması bitince bağlantı da kesilir. Ancak, ihtiyaç bitince bağlantınızı kapatırsanız, veri tabanı sunucusunun iş yükünü azaltmış ve bağlantıyı diğer kullanıcıların kullanımına bırakmış olursunuz.
Connection nesnesinin Close metodunu kullanarak, Connection nesnesinin veri tabanı ile olan bağlantısını kesmiş olursunuz. Aşağıdaki betik, bir bağlantıyı açar ve kapar:
<% strDSN = “FILEDSN=VeriTabanım.dsn”
Set cn = Server.CreateObject(”ADODB.Connection”)
cn.Open
cn.Close
%>
Not; Bu yazı 04 Aralık 2003 tarihinde http://www.sorucevap.com/uyeler/dersler.asp?maxiturk adresinde tarafımca yayınlanmıştır.
Kolay Gelsin