asp den mysql a geçerken neredeyse bütün kodlar değişmektedir.

aşağıdaki yazı ceturk.com dan alınmıştır.

Ahmet Alp Balkan
Web Tasarım ve Geliştiricisi
ahmet safak balkan bulgarian airlines at ahmetalpbalkan.net

-----------------------------------

VERİTABANINA İLK BAĞLANTIYI YAPMAK, TABLO EKLEMEK, VERİ EKLEMEK, LİSTELEMEK VE DİĞER İŞLEMLER

Önce boş bir ASP dosyası yapalım ve aynen şu bağlantıyı oluşturalım:


<%
mysql_server = "localhost"
mysql_user = "root"
mysql_pass = "root"
mysql_db = "test"

Connection_DSN= "DRIVER={MySQL ODBC 3.51 Driver}; SERVER="&mysql_server&"; UID="&mysql_user&"; pwd="&mysql_pass&";db="&mysql_db&";"
Set Baglanti= Server.CreateObject("ADODB.Connection")
Baglanti.Open Connection_DSN

Response.Write "bağlantı kuruldu"
%>


Dosyayı wwwroot içine mysql\default.asp olarak kaydedip http://localhost/mysql/ olarak çalıştıralım. Eğer sayfa hata vermiyor ve “bağlantı kuruldu” yazıyor ise her şeyi çok iyi yapmışsınız demektir.

([MySQL][ODBC 3.51 Driver]Access denied for user 'root'@'localhost' gibi bir hata alıyor iseniz MySQL veritabanı kullanıcı adı ve şifrenizi yukarıdaki kodda uygun olarak doldurun. Eğer kurulumda k.adı ve şifre belirlemediyseniz mysql_user = “root” ve mysql_pass=”” (boş) olarak bırakın. Büyük ihtimal bağlanacaktır.)

Bağlantımız tamamlandı ise bir sorgu ile kendi veritabanımızı yapalım isterseniz.


<%
Baglanti.Execute("create database telefonrehberi ;")
Response.Write “<br> telefonrehberi Veritabanı üretildi.”
%>


Evet. Sayfayı açınca üretildi mesajını da ekranımızda görüyorsak artık sunucuda telefonrehberi adlı bir veritabanımız var. İsterseniz artık bağlantı kodumuzdaki mysql_db değişkenine “telefonrehberi” yazalım.

Access teki veri türlerini hatırlıyor musunuz? Metin, Not, Sayı, Uzun Tamsayı, Evet/Hayır, Tarih/Saat… Şimdi MySQL’de sık kullanacağınız veri tiplerini görelim. Bu veri tiplerini Google’dan arayarak detaylı özelliklerini, limitlerini bulabilirsiniz:


VARCHAR(50) : 50 karakterlik bir metin veri tipi. Access’teki Metin tipi gibi.
TINYINT (6) : 6 karakterli tamsayı alanı yaratır. Ondalık sayı girilmez
INT(11) : 11 basamaklı tamsayı alanı yaratır. Ondalık sayı girilmez
BIGINT (20) : 20 basamaklı tamsayı alanı yaratır. Ondalık sayı girilmez
DOUBLE : Ondalık sayı girebileceğiniz ve büyük sayılar alabilen bir tamsayı alanı.
LONGTEXT : Access’teki not adlı metin alanı. Sınırsız gibi. 2,14 gb yazı alabilir.
SET(‘e’,’h’) : Sadece e harfi veya h harfinin girilebileceği, iki seçenekli bir Evet/Hayır veri alanı gibi.
DATETIME, DATE, TIME: MySQL tarih alanı. MySQL’e veri girerken veriyi 2 tarz girebilirsiniz:
(yyyy-gg-aa sa:dk:sn) veya (yyyyggaasadksn) olarak. PHP kullananlar Unix Epoch tarihi olarak da girebilir. Tabi bu ASP yazanları ilgilendirmiyor. ASP yazanlar Now() fonksiyonu ile tarih ekleyebilir. Projede tarih kullanılacaksa en uygunu DATETIME kullanmaktır. Tarihleri varchar gibi alanlarda saklamak yanlış olacaktır.

Peki şimdi bir telefon defteri tablosunu nasıl yapabiliriz görelim. Eğer verdiğimiz SQL Front, SQLYOG gibi programlarla bağlanırsanız komutlar kullanmadan kendi tablolarınızı ve kendi veritabanınızı zahmete girmeden tasarlayabilirsiniz.Bu programlardan biriyle telefondefteri veritabanımıza bağlanalım ve sağ tıklayıp Yeni Tablo (New Table) üretelim:

id : (primary key)(auto_increment) int(11)
isim : varchar(100)
meslek : varchar(50)
telefon : bigint(20)

Bu tablonun SQL komutuyla yapımı şöyle olacaktır:


CREATE TABLE `telefondefteri` (
`id` int(11) NOT NULL auto_increment,
`isim` varchar(100) default NULL,
`meslek` varchar(50) default NULL,
`telefon` bigint(20) default NULL,
PRIMARY KEY (`id`)
) Engine=InnoDB ;


Artık telefonrehberi veritabanımız altında telefondefteri tablomuz var.

Bu komut ile de tablomuzu üretebiliriz. Burada dikkatinizi sorgu sonundaki Engine kısmı çekebilir. Bu, tablonun hangi veritabanı motoruyla yönetileceğini gösterir. InnoDB, MyISAM, ISAM, MEMORY, MRG_MYISAM gibi türleri vardır. Eğer kayıtlarınız on binleri bulmayacak ise InnoDB iyidir fakat çok kayıt bulunacak ise MyISAM’ı tavsiye ederim.

Not: MySQL’de SQL sorgu satırının sonuna “;” (noktalı virgül) koymalısınız. Eğer tek satır sorgu yazıyorsanız buna gerek yoktur.

Şimdi de birkaç kayıt eklemeye ne dersiniz?


<%
Baglanti.Execute("INSERT INTO telefondefteri (isim,meslek,telefon) VALUES ('ahmet alp balkan','doktor','5056872347') ;")

Baglanti.Execute("INSERT INTO telefondefteri (isim,meslek,telefon) VALUES ('gürcan balci','insaat mühendisi','5334169988') ;")

Baglanti.Execute("INSERT INTO telefondefteri (isim,meslek,telefon) VALUES ('kerim candan','berber','2625281611') ;")

Response.Write “3 kayıt eklendi”
%>


Evet kayıtlarımız böyle ekleniyor. Geliştirmeye açık kodlar. ASP ile deneyerek, formları, değişkenleri kullanarak kayıtlar ekleyebilirsiniz. Şimdi de kayıtları listelemeye ne dersiniz:


<%
Set TelefonDefteriKayitlari = Baglanti.Execute(“Select * from telefondefteri ;”)

Do Until TelefonDefteriKayitlari.eof
Kayit = Kayit +1
%>

(<%=Kayit%>) İsim: <%= TelefonDefteriKayitlari(“isim”)%>

(<%=TelefonDefteriKayitlari(“meslek”)%>) <br />

Telefon : <%=TelefonDefteriKayitlari(“telefon”)%>


<br /><br /><br />

<%
TelefonDefteriKayitlari.MoveNext
Loop
%>


Bu kodun çıktısı şu şekilde olacaktır:

(1) İsim: ahmet alp balkan (doktor)
Telefon : 5056872347

(2) İsim: gürcan balci (insaat mühendisi)
Telefon : 5334169988

(3) İsim: kerim candan (berber)
Telefon : 2625281611

Gördüğünüz üzere kayıtlarımız listelendi. Fakat ASP deki şu kod açma tarzını hatırladınız mı?
Set rs= server.createobject("adodb.recordset")
Sorgu = “select * from telefondefteri”
Rs.Open Sorgu,Connection,3,1

Artık bu tarz recordset açmayı kullanmayacağız. Çünkü MySQL kullanırken bize hiçbir getirisi olmayacak. Önceden Rs.AddNew Rs.Update Rs.RecordCount Rs.Delete kullanırdınız. Ama artık bu yok. Bütün işlemlerinizi SQL Komutları ile yapacaksınız. Örneğin:

Ekleme Komutu :
INSERT INTO telefondefteri (isim,meslek,telefon) VALUES ('gürcan balci','insaat mühendisi','5334169988') ;

INSERT INTO kisiler (‘isim’,’kayittarihi’) VALUES (‘dilan fındıkçı’,’20060813201439’);


Silme Komutu:
DELETE FROM telefondefteri where isim=’gürcan balci’;



Düzeltme Komutu:
UPDATE telefondefteri set isim=’mehmet balci’, meslek=’ogrenci’ where isim=’gürcan balci’;


Kayıt Sayısını Almak:
SELECT COUNT(*) AS TOPLAM FROM telefondefteri;
Kullanımı örneğin şu şekildedir:


<%
Set ToplamKisi = Baglanti.Execute(“SELECT COUNT(*) AS TOPLAM FROM telefondefteri;”)

Response.Write Toplamkisi(“TOPLAM”)

%>