Professional Documents
Culture Documents
YazilimGelistirme .Net YardimciDersNotlari PDF
YazilimGelistirme .Net YardimciDersNotlari PDF
NSZ 12
1. INTRODUCTION 14
2|Sayfa
1.7.2. VALUE TYPE VE REFERANCE TYPE 28
1.7.3. HEAP VE STACK 28
1.7.3.1. STACK 28
1.7.3.2. HEAP 29
1.7.4. LOCAL VE GLOBAL DEKENLER 30
1.7.4.1. Local Deikenler 30
1.7.4.2. Global Deikenler 30
1.7.5. ATAMA OPERATR 31
1.8. CONVERT LEMLERI 31
1.9. HATA YNETIMI 32
1.9.1. EXCEPTON HANDLNG 32
1.9.2. SYNTAX ERRORS (DERLEME ZAMANI HATALARI) 32
1.9.3. RUNTME HATALARI (ALIMA ZAMANI HATALARI) 32
1.9.4. LOGCAL HATALAR MANTIKSAL HATALAR 32
1.9.5. ERROR LST 33
1.9.6. TRY CATCH FNALLY 33
1.9.7. BREAK PONT 35
1.10. OPERATRLER 35
1.10.1. ARTMETK OPERATRLER 35
1.10.1.1. Matemetik Operatrleri 36
1.10.1.2. Arttrma Operatrleri 36
1.10.1.3. Birleik Operatrler 36
1.10.2. MANTIKSAL OPERATRLER 36
1.10.3. LKSEL OPERATRLER 37
1.11. RANDOM SINIFI 37
1.12. DATETIME SINIFI 38
1.12.1. TMER KONTROL 38
1.13. KARAR YAPILARI 39
1.13.1. IF ELSE ELSE IF 39
1.13.2. SWTCH CASE 42
1.13.3. TERNARY IF 44
1.14. DIZILER (ARRAY) 45
1.15. DNGLER 46
1.15.1. FOR DNGS 46
1.15.2. WHLE DNGS 47
1.15.3. DO WHLE DNGS 48
1.15.4. FOREACH DNGS 48
1.16. RUNTIME 49
1.17. METOTLAR 50
1.17.1. GERYE DN TP 51
1.17.2. METOT SMLENDRME 51
1.17.3. GERYE DEER DNDRMEYEN VE PARAMETRE ALMAYAN METOTLAR 51
1.17.4. GERYE DEER DNDRMEYEN VE PARAMETRE ALAN METOTLAR 52
1.17.5. GERYE DEER DNDREN VE PARAMETRE ALMAYAN METOTLAR 54
1.17.6. GERYE DEER DNDREN VE PARAMETRE ALAN METOTLAR 55
1.18. STRING METOTLAR 56
1.18.1. TRM METODU 56
3|Sayfa
1.18.2. EQUALS METODU 56
1.18.3. SUBSTRNG 57
1.18.4. RESERVE 57
1.18.5. INDEX OF 57
1.18.6. REMOVE 58
1.18.7. CONTANS 58
1.18.8. REPLACE 58
1.18.9. SPLT 58
1.18.10. TOUPPER 59
1.18.11. TOLOWER 59
1.19. GUID 59
1.20. MATH KTPHANESI 59
1.20.1. PI SAYISI 60
1.20.2. ABS 60
1.20.3. FLOOR 60
1.20.4. CEILING 61
1.20.5. ROUND 61
1.20.6. TRUNCATE 61
1.20.7. MAX 61
1.20.8. MIN 61
1.20.9. POW 62
1.20.10. SQRT 62
1.20.11. SIGN 62
2.1. INTRO 63
2.2. CLASS OBJECT MENTALTY SINIF VE NESNE 64
2.2.1. CLASS - SINIF 64
2.2.2. OBJECT NESNE 64
2.2.3. FELD AND PROPERTY 64
2.2.4. ENCAPSULATON 66
FORM: 67
4|Sayfa
2.11. POLYMORPHSM 76
2.12. DELEGATES VE EVENTLER 78
2.12.1. DELETEGATE OLUTURURKEN ZLENECEK ADIMLAR 78
2.12.2. EVENTLER 79
2.13. INTERFACE 79
5|Sayfa
3.5.4.14. JOIN (BRLETRME) 107
3.5.4.15. HAVING 114
3.5.4.16. Zaman Metotlar 115
3.5.4.17. INSERT COMMAND 115
3.5.4.18. IDENTITY ve SCOPE IDENTITY 116
3.5.4.19. UPDATE (GNCELLE) 117
3.5.4.20. DELETE 118
3.5.4.21. DECLARE DEKENLER 118
3.5.4.22. VIEWS SANAL TABLOLAR 119
3.5.4.23. WITH ENCRPYTION 121
3.5.4.24. VIEW ile INSERT Sanal Tablolar Kullanarak Insert lemi 121
3.5.4.25. FQN Fully Qualified Name 122
3.5.4.26. STORED PROCEDURE SAKLI YORDAM 122
3.5.4.27. IF ELSE Karar Yaplar 125
3.5.4.28. DNGLER 126
3.5.4.29. FUNCTION YAPISI 127
3.5.4.30. TRIGGER - TETKLEYC 129
3.5.4.31. TRANSACTION 131
3.5.4.32. SQLde PERFORMANS 132
3.5.4.33. INDEX YAPISI 133
3.5.4.34. Grev Tanmlama 137
3.5.4.35. Kullanc Oluturma ve Rol Belirleme 137
4. ADO.NET 139
6|Sayfa
5. ORM OBJECT RELATONAL MAPPNG 150
7|Sayfa
7.3.6. OPERATON CONTRACT 191
7.3.7. DATA CONTRACT 191
7.3.8. HOST 191
7.3.9. BEHAVOUR 191
7.3.10. SYSTEM-PROVDED BNDNGS 192
7.4. WNDOWS COMMUNCATON FOUNDATON RNE 192
7.4.1. SOAP NEDR 197
7.4.2. HTTP NEDR 197
7.4.3. TCP NEDR 197
7.4.4. WCF BNDNG 198
9. HTML 235
8|Sayfa
9.7. UYGULAMA ETKETLER 256
9.8. WEB FORMLARI 258
9.9. TABLOLAR 262
9|Sayfa
12.6.3. DATALIST 303
12.6.4. DETAILS VIEW 307
12.6.5. ASP.NET WEB USER CONTROL 308
12.7. MASTER PAGE 311
12.8. STATE MANAGAMENT(DURUM YNETM) 314
12.9. CACHNG (NBELLEKLEME) 325
12.9.1. DATA CACHNG (VER NBELLEKLEME) 326
12.9.2. OUTPUT CACHNG (IKTI NBELLEKLEME) 327
12.10. MEMBERSHP 328
12.10.1. LOGIN VIEW 336
10 | S a y f a
15.5.3. SIRALAMA EKL 361
15.5.4. GRNTLEME EKL 362
15.5.5. ARAMA ALANI 362
15.5.6. PROJE BLGLER 362
15.5.7. PROJE TR 362
15.5.8. DER AYARLAR 362
15.5.9. PROJE TRNN AIKLAMASI 362
15.6. MODEL, VIEW, CONROLLER OLUTURMA 363
15.6.1. CONTROLLER OLUTURMA 364
15.6.1.1. MVC 5 Controller Empty : 365
15.6.1.2. MVC 5 Controller with read/write actions 366
15.6.1.3. MVC 5 Controller with views, using Entity Framework 367
15.6.2. MODEL OLUTURMA 370
15.6.3. VIEW OLUTURMA 372
15.7. VIEW ENGINE NEDR ? 375
15.7.1. RAZOR VIEW ENGINE 375
15.7.1.1. @ OPERATR 375
15.7.1.2. RAZOR LE KARAR YAPILARI 377
15.7.1.3. RAZOR LE DNGLER 378
15.8. CONTROLLERDAN VIEWA VER TRANSFER 379
15.8.1. VIEWBAG 379
15.8.2. VIEWDATA 380
15.8.3. TEMPDATA 382
15.9. LAYOUT PAGE ( ABLON ) 383
15.10. LAYOUT SECTION 385
15.11. PARTIAL VIEW 388
15.12. ROUTING 389
15.13. HTML HELPERS 391
15.13.1. TEXTBOX HELPER 391
15.13.2. LABEL HELPER 392
15.13.3. LNK HELPER 393
15.13.4. CHECKBOX HELPER 394
15.13.5. DROPDOWNLST HELPER 395
15.13.6. LSTBOX HELPER 396
15.13.7. RADOBUTTON HELPER 396
11 | S a y f a
NSZ
12 | S a y f a
YAZARLAR
Ozan OUZ
Tuberk KUYTUL
Murat VURANOK
Alp KURTBOAN
13 | S a y f a
INTRODUCTION
1.1. PROGRAMLAMANIN TARHES
Bu bilgisayar tam 4 ylda retildi ve Eniac adn ald. Eniac 167 m2lik bir alan
kaplyordu ve tam olarak 30 ton arlndayd. ENIAC bir saynn grntsn
ayrabiliyor, eitlikleri karlatrabiliyor, arpabiliyor, blebiliyor, toplayabiliyor,
kartabiliyor ve kare kkleri hesaplayabiliyordu. ENIAC'n akmlatrleri (n kayt
blgeleri) hem toplama hem de hafza ilevi gryordu. ENIAC'a veriler bir IBM kart
okuyucusu aracl ile veriliyordu. lenmi veriler ise yine bir IBM delikli kart makinesi
sayesinde alnyordu ve bu kartlar yine IBMin retmi olduu bir delikli kart okuyucu
tarafndan deifre ediliyordu.
Eniacn arkasndan gelen Edvac ve Ordvac gibi bilgisayarlar Kapal Kart Devre
sistemi ile retilmeye balad. Kapal Kart Devre Sistemi dediimiz yap akm varsa 1,
akm yoksa 0 deerini alarak eitli ilemlerin elektronik devre zerinde
gerekletirilmesiyle oluur. Bu ileme Makine Dili denir. Bilgisayarn alma mantda
gnmzde ayndr.
Makine dilini mantkl bir ekilde programlamak iin yazlm dilleri gelitirilmeye
balamtr, ilk programlama dilleri makine diline ok yakn olduundan gelitirmek
olduka zordu. Ardndan Fortran, Cobol, C dilleri ortaya kmaya balad.
14 | S a y f a
ilgi grmtr. 2000 ylnda Microsoft byk bir adm atarak bir ok programlama
tekniini ve zelliini kapsayan .Net platformunu kartmtr.
1.2. PROGRAMLAMAYA GR
1.2.1. Programc/Yazlmc Kimdir ?
1.2.1.1. Yazlm
Deiik ve eitli grevler yapma amal tasarlanm elektronik aygtlarn birbirleriyle
haberleebilmesini ve uyumunu salayarak grevlerini ya da kullanlabilirliklerini
gelitirmeye yarayan makine komutlardr.(Bilgisayarlarn, bir ii yapmas iin tasarlanan
komutlar (emirler) zinciri)
1.2.1.2. Yazlmc
Belirli ilevlere sahip programlar gelitiren, kulland platform ve teknolojiye hakim,
insanlarn hayatlarn kolaylatran ve algoritmik dnce yapsyla dnen kiilere
yazlmc denir.
1.2.2.1. Compiler
Yazdmz kodlar derleyerek aradile dntren derleyicidir. leriki konularda
bahsedeceimiz bir konudur, yazdmz kodlarn makine diline dntrlmesini
salar.
1.2.2.2. Compile
Yazdmz kodlar derleyiciye gndererek derleme ilemine verilen addr.
1.2.2.5. Framework
Programlama dillerinin komutlarn tanyan ve bu kodlar ileyen ktphanedir. .Net
Framework 2.0 dan balam ve son olarak 4.5 versiyonu kullanlmaktadr. rnein
Windows iletim sisteminde, Java Runtime Enviroment ykl olmadnda java dili ile
yazlan bir program altramayz. Ayn ekilde .Net Framework ykl olmayan bir
bilgisayarda C# kodlar altrlamaz.
15 | S a y f a
kullanlmasna katkda bulunan aralarn tamamn iinde barndran bir gelitirme
ortamdr.
1.2.2.9. .Net
Csharp ile gelitirilen programlarda tm ilemleri gelitiren kapsaml bir platformdur.
1.2.2.10. Syntax
Szdizimi anlamna gelmektedir. Bir programlama dilinde ki ifadelerin uyulmas gereken
kurallar btndr.
16 | S a y f a
Bizler C Sharp kodlarmz Visual Studio
isimli IDEde yazacaz. Yava yava
Visual Studioyu tanmaya
balayabiliriz.
New Project : Yeni bir proje oluturmak iin kullanabileceimiz ksa yoldur. Dilersek; File
mens altndan New > Project yolunu izleyerek proje oluturabiliriz.
Recent: En son
kullandmz projelerin
bilgilerini tutar. Recent panelinin amac, zerinde altmz projeyi Microsoft Visual
Studio programn altrdmzda daha kolay bir yntem ile vakit kaybetmeden
altrmaktr. Burda projelere sa tklayarak listeden kaldrabilir, sln dosyasnn
bulunduu klasr grme ilemleri gibi zellikleri kullanabiliriz.
17 | S a y f a
Get Started : Resim 1.1de bulunan Get Started paneli Microsoft Onlineda paylalan
Microsoft Visual Studioyu tantmaya ynelik videolar ieren bir paneldir.
Yntem 1:
File > New > Project yolunu takip ederek yeni bir proje oluturma penceresini
oluturabiliriz.
Yntem 2:
Start Page sayfasnda bulunan New Project balantsna tklayarak yeni proje
oluturma penceresine ulaabilirsiniz.
Visual C# altnda
bulunan
kategorilerden hangi
platform iin alacamz semeliyiz.
Windows : Windows sekmesi C# dili ile Desktop (Masast) uygulamalar gelitirmek iin
kullanlan yaplar tutar.
18 | S a y f a
WCF : Servis odakl mimariye dayal yaplar ierir. Projelerimizde servis altrmak
istediimizde gerekli yaplar WCF sekmesi altndan oluturabiliriz.
.Net Framework versiyonunu setikten sonra hemen yannda bulunan Sort By seenei
ile aada bulunan platformlar isimlerine gre sralayabilirsiniz.
Solution : erisinde birden fazla proje barndran yapdr. Burada Solution ismini
belirtiyoruz
19 | S a y f a
Create Directory for solution : Proje oluturulurken proje dosyasnn (.sln uzantl) projenin
dosyalar ile ayn klasrde olmasn isterseniz bu seenek iaretlememelisiniz.
Solution Explorer
Properties Window
Toolbox
Solution Explorer
Toolbox
Properties Window
20 | S a y f a
F4 : Properties penceresini aar.
1.Yntem
//Tekli yorum satrdr. Tek satrda yorum yazmak istediimizde kullanabiliriz.
2.Yntem
/*
* Birden fazla satrda yorum yazmak : Satr 1
* Birden fazla satrda yorum yazmak : Satr 2
* Birden fazla satrda yorum yazmak : Satr 3
*/
21 | S a y f a
1.4.3. Line Numbers
Visual C Sharpda kod satrlarnn satr numaralarn grmek isteyebiliriz. Projemizde
yazdmz kod satrlarnn satr numaralarn grmek iin aadaki yolu takip
edebilirsiniz.
1.4.4. Scope
Programlarmzda kullandmz metotlar ve event gibi yaplarn kapsayaca kodlar
belirler. C Sharpda scope alanlar ssl parantezler { erisine kodlar } ile belirlenir.
Aadaki rnei inceleyebilirsiniz.
}//Scope Bitii
1.4.5. Syntax
Sz dizimi anlamna gelmektedir. Programlama
dillerinde kullanacamz kodlarn yaps ve
yazm ekli nemlidir. Kod sralamas, parantez
sralar ve byk kk harf duyarllklarna
syntax denir.
1.4.7. Intellisence
Yazlmc iin en nemli ekranlardan bir tanesidir. Visual Studioda kod yazarken,
intellisense penceresi ilerimizi kolaylatrr. Intellisense bizim kodlarmz hazr olarak
tamamlayan bir penceredir. Kod yazmay kolaylatrr ve daha doru kod yazmamz
salar.
22 | S a y f a
rnein; biz kod yazarken bir kodun ba harflerinden birka tanesini yazdmzda ba
harfi ayn olan ve referanslarmzda kaytl olan kodlarn listesini bize sunar.
1.4.8. Tooltip
Yazlmcnn okumasn bilmesi gerektii ekrandr. Program gelitirirken yazlan kodlarn
nasl kullanmas gerektiini bildirir. Doru kullanld taktirde bir yazlmc iin en nemli
penceredir. Sol st ksmda, yapnn Geriye dn tipini gsterir. Alt Ksmda ierisine
aldg parametrelerle ilgili bilgiler yer alr. Kodlarn yapsn okuyarak nasl kullanlmas
gerektii ile ilgili bilgi verir.
1.5. YAZILIMA GR
Artk yava yava kod tarafna geme vaktimiz geldi. lk kod rneimizi yazmadan
nce bir takm kurallar bilmemiz gerekiyor.
C Sharp programlama dilinde, satr sonlar '; ile iaretlenir. Bu iaret kod satrnn
bittii anlamna gelir.
C Sharp dilinde sz dizimine Syntax denir. Syntax dilin belirli kurallarnn olmas ve
kod yazarken bu kurallara uyulmas gerektiidir. Eer biz bu kurallara uymadan
kodlarmz yazmaya alrsak Syntax hatalar alrz. leri ki konularda Syntax
detayl inceleyeceiz.
23 | S a y f a
MouseDoubleClick : Mouse ile ift tklandnda hangi
kodlarn alaca yazlr.
Soru 2 : Ne yapacam?
rnek Kod:
Kod yazmaya balamadan nce yeni bir proje oluturmamz gerekiyor.
Visual Studio programn altrdktan sonra, yeni bir proje oluturuyoruz. Proje
oluturma hakknda detayl bilgiye nceki konularmzda deinmitik.
Bizim Windows Form Application olarak oluturduumuz proje bize Form1 isminde bir
form ekran sunar. Form1 ekrannn Code Behind sayfasna ulamak iin F7 tuuna
basmamz yeterlidir.
24 | S a y f a
lk kodumuzu yazmak iin formun Design alanna gelip forma ift tklyoruz. Forma ift
tkladmzda bize Formun Eventlerinden Load eventini (Form Yklenirken) Code
Behind sayfasna oluturur.
Dikkat ettiyseniz Form Load eventinin Formun yklenirken alacak olan eventi olarak
bahsettik. Formun yklenmesi srasnda ileyecek kodlar load eventinde yazlr.
lk Eventimizi Oluturduk
//Form'a ift tkladmzda aadaki kodlar olutur.
private void Form1_Load(object sender, EventArgs e)
{
Yukardaki kod satr ekranda bir mesaj penceresi ierisinde Hello World yazsn
yazdrr. Biz kullancya mesajlar gstermek istediimizde yukardaki kod satrn
kullanabiliriz. Yukarda ki kod satrn altrdmzda Resim 2.1de bulunan grnt gibi
bir sonuca ularz.
Her kontrole ait onlarca event bulunmaktadr. Bu eventleri altrmak iin ilgili kontrol
mouse ile setikten sonra Properties penceresinden Eventler sayfasna gemeliyiz.
Events sekmesinde listelenen eventler, o kontrole ait olan event listesidir. Bizler bir
kontroln zaman kavramn eventler ile ynetebiliriz. (rnein textboxa veri girildii
zaman)
Herhangi bir kontroln zerine ift tkladmzda, Visual Studio tarafndan tanml olarak
o kontrole ait en ok kullanlan event Code Behind sayfamzda oluur.
rnek ;
25 | S a y f a
Event mantn kullanarak kk bir altrma yapalm ve altrmamz srasnda atama
operatrlerini inceleyelim.
ok basit bir rnek ile balayalm. ncelikle Resim 2.2 de ki grnm elde edelim.
26 | S a y f a
Bilgisayarn donanm bileenlerindendir. Mikroilemcili sistemlerde kullanlan
bir tr veri deposudur. RAM geici bir hafza birimidir. Bilgisayar alt sre
boyunca zerinde veri tutabilir. RAMde ki g kesildiinde (Bilgisayar
kapatldnda) RAM, zerinde bulunan tm bilgileri kaybeder.
C Sharpta tipler Reference Type ve Value Type olarak ikiye ayrlr. Bunlara veri tipleri
denir.
Bir programcnn bir dili renmeye baladnda ilk renmesi gereken o dile ait veri
tipleridir. nk veri tipleri program ierisinde kullanlacak deikenlerin ve sabitlerin
snrlarn belirler. C Sharp programlama dilinde veri tipleri trlere ayrlr.
27 | S a y f a
bool
Koullu yaplarda kullanlr. Bool tipi iki deer alr. Bu deerler true ve false
deerleridir.
object
Bu deiken trne her trden veri atanabilir.
Var
C# 3.0 da artk tr belirtmeksizin deiken tanmlamamza olanak salayan yenilikler
mevcut. Ancak bu deikenlerin zellii object deikenler gibi referans tipli
deikenler deildir. Bunun yerine deeri atanrken tipinin belirlendii deikenlerdir.
Datetime
inde zaman barndran deiken tipidir.
imdi veri tiplerimizin neden Reference Type ve Value Type olarak ikiye ayrldndan
bahsedeceiz.
1.7.3.1. STACK
RAM bellein Stack alannda, deer tipleri (int, bool, double, float vb.), Enum ve Struct
saklanmaktadr. Belli deer aralklarna sahip tipler Stack alannda tutulur.
28 | S a y f a
1.7.3.2. HEAP
RAM bellein Heap alannda, referans tipleri (string, object, class, delegate,array)
saklanmaktadr. Referans tiplerinin alma mant aadaki resimde anlatlmtr.
Biz RAM zerinde bir deiken oluturmak iin aadaki yapy kullanrz.
Deiken Oluturmak
<Tipi> <DegiskenAdi> = <Degeri>
string firmaAdi = "BilgeAdam";
Yukardaki kod ram zerinde bir deiken oluturur. string ram zerinde tutulacak
verimizin tipini belirler.
29 | S a y f a
string degisken = textBox1.Text; //Textbox'dan gelen deeri, deikenimize aktaryoruz.
}
Global alan Form ierisinde, eventleri, metotlar ve dier yaplar tanmladmz, proje
derlendiinde RAMe ilk kartlacak yaplar belirleyen zaman kavramndan uzak
yapdr. erisinde eventler, metotlar ve proje derlendiinde RAM zerine kartlmasn
istediimiz yaplar tanmlayabiliriz.
Local Deikenler
//Formun Load Eventini Oluturuyoruz.
private void Form1_Load(object sender, EventArgs e)
{
//Local Deiken Tanmlama
string programlamaDili = "C Sharp";
}
1.7.4.2. Global Deikenler
Bir deikene, birden fazla eventden veya metotdan ulamak istediimizde
tanmlama yerini deitirmemiz gerekebilir. Global deikenler proje derlenirken RAM
bellek zerine kartlr ve program sonlanana kadar RAM zerinde yaamaya devam
ederler. Global deikenlere Form ierisinde birden fazla yerden eriilebilir.
//Form zerine bir adet button ekleyip, zerine ift tklayarak Buttonun Click eventini oluturabiliriz.
30 | S a y f a
private void button1_Click(object sender, EventArgs e)
{
globalDegisken = "Butonun Click Eventinden Global'de Tanmlanan Deikene Eriebiliriz.";
}
}
Yani; atama operatrnn solunda bulunan yap string bir deer istiyorsa, atama
operatrnn sanda bulunan deer ise bir string deer tayorsa atama ilemi
gerekletirilir. Eer atama operatrnn sanda ve solunda bulunan deerler
birbirine eit deilse atama gerekletirilemez ve bize Syntax hatas verir.
ki deerin farkl olmas durumunda dntrme ilemlerini kullanarak iki deer arasnda
atama gerekletirebilir.
Kullanc Textbox kontroln kullanarak bir say girii yaptnda, bu deer C# tarafna
string bir ifade olarak yansr. Bizim bu ifadeyi integer bir ifadeye dntrmemiz gerekir.
Dntrme lemi
int sayi = Convert.ToInt32(textBox1.Text);
Yukardaki kod textboxdan gelen veriyi, tipi int olan deikenin iine aktarr. Eer
Textboxn Text zelliinde (kullancnn girdii deer) bir say ise yukarda ki kod blou
hatasz olarak altrlacak ve kullancnn string tipte girdii sayy integer(saysal)
olarak elde etmi olacaz.
31 | S a y f a
Dntrme lemleri
string cevrilecekDeger = "123";
int cevrilmisBir = Convert.ToInt32(cevrilecekDeger); //Convert.ToInt32 => int'e cevirme islemi...
byte cevrilmisIki = Convert.ToByte(cevrilecekDeger); //Convert.ToByte => byte'e cevirme islemi...
short cevrilmisUc = Convert.ToInt16(cevrilecekDeger); //Convert.ToInt16 => short'a cevirme islemi...
long cevrilmisDort = Convert.ToInt64(cevrilecekDeger); //Convert.ToInt64 => long'a cevirme islemi...
float cevrilmisBes = Convert.ToSingle(cevrilecekDeger); //Convert.ToSingle => float'a cevirme islemi...
Gelimi bir IDE olan Visual Studio anlk olarak kodlarmz kontrol edecek ve bize yardm
edecektir.
Hata eitlerini incelediimize gre imdi srasyla bu hatalar nasl ynetebilir ve kontrol
altna alabiliriz bunu inceleyelim. lk olarak hatalar ierisinde en kolay tespit edilen grup
olan Syntax Hatalarn nasl giderebileceimizi inceleyelim.
Projeyi derlediimizde proje ierisinde bir syntax hatas bulunuyorsa (noktal virgl
unutmak, scope kapatmamak, yanl deerleri eitlemek vb.) Error List penceresinde
32 | S a y f a
Syntax hatalarmz grnr. Yapmamz gereken, hata satrn okumak ve hata satr
zerine ift tklayarak hata veren kod satrn grntlemektir.
lgili Hatann zerine ift tklayarak hata veren satr (Krmz ok ile iaretlenmi)
grntleyebiliriz.
Verilen hata mesajna gre (Yeil ok ile iaretlenmi) hatamz dzeltebiliriz. Error List
penceresi bize projemizde ka adet hata olduu (Lacivert ok ile iaretlenmi)
bilgisinide verir.
Try Catch Finally bloklarnn alma mant, Try bloklar ierisinde bulunan kodlarda
herhangi bir sebepten hata oluursa, Try bloundaki kod ak durur ve kod ak Catch
bloundan devam eder. Catch bloundaki kodlar ilendikten sonra Finally blou
altrlr. Genellikle Finally blounda temizleme, form dzenleme gibi ilemler yaplr.
Try Catch Finally yapsnda Try ve Finally blou mutlaka alr. Catch blou yanlzca Try
blounda oluacak hata sonucunda alacaktr.
33 | S a y f a
Try Catch Finally yapsnda Finally blounu kullanmak istee baldr. Programc dilerse
Try Catch bloklar ilede alabilir.
34 | S a y f a
ramen dier catch bloklar ile akmamasnn sebebi, her bir ex zellii kendi scopeu
ile ilgilidir. Kullanlan her ex zellii kendi scopelarnda alt iin birbirleriyle
akmazlar.
zlemeye almak istediimiz kodu break point ile iaretlememiz gerekmektedir. Kod ak
srasnda, sra break point ile izlemeye almak istediimiz satra gelince, visual studioda
ki kod ekran alacaktr. Bizler break point ksayollar ile deerleri program alrken
inceleyebiliriz.
F10 : Kod akn takip etmeksizin izlemeye alr. Her tkladmzda satr satr kod ak
ilerleyecektir.
F11 : Kod akn takip ederek izlemeye alr. Uygulamad ki kod akn takip ederken,
kod ak farkl bir event veya metoda yneliyorsa kod akn izlemeye devam eder.
1.10. OPERATRLER
Matematiksel veya mantksal ilem yapmamz gereken durumda operatrleri
kullanabiliriz. Operatrler Matematiksel Operatrler, Mantksal Operatrler, Arttrma
Operatrleri, Birleik Operatrler ve likisel Operatrleri olmak zere gruplara ayrlr.
35 | S a y f a
1.10.1.1. Matemetik Operatrleri
36 | S a y f a
& Ve Bu Operatr her iki operandn deerlerini alr ve her iki
operand da doru olmad srece yaln sonucunu retir.
Doru sonucunu vermesi iin her iki operandn doru
olmas gerekir.
&& Mutlak Ve Normal & operatrlerinden tek fark normal operatrlerin
her iki operand da nermeye dahil etmesiyken, &&
operatrnn sadece gerektiinde dier operandlara
bakmasdr.
| Veya Herhangi birinin doru olmas, doru sonucunu retmek
iin yeterlidir. Sadece ve sadece iki operandn yaln
olmas halinde sonu yalntr.
|| Mutlak Veya Normal | operatrlerinden tek fark normal operatrlerin
her iki operand da nermeye dahil etmesiyken, koullu
operatrlerin sadece gerektiinde dier operandlara
bakmasdr.
^ zel Veya Normal | operatrlerinden tek fark normal operatrlerin
her iki operand da nermeye dahil etmesiyken, ||
operatrnn sadece gerektiinde dier operandlara
bakmasdr.
Bilgisayarda rasgele diye bir ilem yoktur. Tm bilgi ve veriler belirli bir algoritma sonucu
retilir. Rasgele dediimiz ilem bilgisayardan toplanan bilgilerin (Bilgisayarmzn, ram
doluluu, ilemci ss, ram alma hz, hard disk doluluk oran, ekrann yineleme hz vs.)
algoritmaya alnmas ve sonu retmesi durumudur.
Random Kullanm
private void button1_Click(object sender, EventArgs e)
37 | S a y f a
{
Random rnd = new Random();
int rasgelesayi = rnd.Next(); //Rasgele bir say retir.
int sayi1 = rnd.Next(50); //0 ile verdiimiz deer aras bir say retir.
int sayi2 = rnd.Next(20, 100); //Belirttiimiz iki deer aras say retir.
}
rnek
private void Form1_Load(object sender, EventArgs e)
{
DateTime TarihSaat = DateTime.Now;
}
Yukardaki kod blou formun ald tarih ve saati, RAM zerinde tarih ve saat tipinde
tutar.
DateTime TarihSaat; ram zerinde tipi DateTime olan bir TarihSaat nesnesi oluturur.
DateTime.Now komutu ise sistemin u anki saatini bize verir.
Timer ierisinde altrlacak kodlar Timern Tick eventi ierisinde yazlr. Timer ile ilgili
baz ayarlar aada grebilirsiniz.
rnek Uygulama
38 | S a y f a
Bir proje oluturalm. Oluturduumuz proje bize tarih ve saat bilgisini anlk olarak
gstersin. Bunun iin formumuza 10 adet label ve 1 adet Timer kontrol ekleyelim.
rnek Uygulama
private void Form1_Load(object sender, EventArgs e)
{
timer1.Start(); //Timer altrmak
}
Verilen arta gre, kod akna yn verebiliriz yani istediimiz kodlar programdan
saklayabilir veya istediimiz kodlar altrabiliriz.
IF Else yaps verilen artlar tek tek kontrol ederek, artn saland durumda ilemleri
gerekletirir.
39 | S a y f a
IF karar yapsnda Mantksal operatrler ve ilikisel operatrler kullanlr. Mantksal
opearatrler birden fazla ilikisel operatr ile dnen sonularda karar vermek iin
kullanlr.
Senaryo: Dardan girilen saynn teklik iftlik durumuna gre kullancya mesaj verecek
olan karar mekanizmas;
40 | S a y f a
Else IF; Tek bir karar yaps ierisinde if ve else durumlar dnda farkl durumlar
oluuyorsa ve bu durumlar kontrol altna almak istiyorsak else if basaman
kullanabiliriz. IF- Else IF Else yapsnn alma mant aadaki gibidir.
lk olarak ifade1 kontrol edilir; bu ifade doru ise, 1. art sonucunda yaplmas
gereken ilemler uygulanr.
fade1 yanl ise, ifade2 kontrol edilir. Bu ifade doru ise, bu durumda sadece
2. art sonucunda yaplmas gereken ilemler uygulanr.
fade2 yanl ise, o takdirde, ifade3 kontrol edilir. Bu ifade doru ise, bu
durumda sadece 3. art sonucunda yaplmas gereken ilemler uygulanr.
IF Else IF - Else
int sayi = 5;
Mantksal Operatrler
Yukardaki ilemde
&& operatr ile bu iki ilemden dnen sonu true olduunda karar yapmza true
sonucu dnecektir.
Senaryo: Dardan girilen not 0 - 30 araligi ise "FF" 30 - 50 araligi "DD" 50 - 70 "BB" 70 - 100
"AA" aldnz seklinde kullaniciya uyar veren uygulama;
41 | S a y f a
1.13.2. Switch Case
Kullanm alan if yapsna gre daha az olan switch case yaps, if yapsndan daha hzl
alr. Switch case kullanarak yapabileceimiz tm ilemleri IF Else Else IF karar yaps
ile yapabiliriz. Fakat kullanlabildii durumlarda Switch Case daha fazla performans
salayacaktr.
42 | S a y f a
Switch Case verilen deeri yap ierisinde iaretleyerek gelen deere gre dorudan
ynlendirme yapar. IF Else yapsnda verdiimiz rnei Switch Case iin aklayalm.
lk ders gnnzde Lab aryorsunuz. IF Else yapsnda ki gibi tek tek Lablar kontrol
etmek yerine danmaya sorarak kesin bir bilgiyi hzl bir ekilde elde edebilirsiniz.
Switch Case ile IF else arasnda ki fark ksaca byle ifade edilebilir.
Switch Case ile ilgili aadaki rnei inceleyelim. rnekte bulunan formun tasarmna
geelim. ki adet Textbox, bir adet ComboBox ve bir adet Button kontroln
formumuza ekleyelim. Kontrollerin property penceresinden ayarlarn aadaki gibi
dzenleyin.
Button zellikleri;
Name : btnHesapla
Text : Hesapla
ComboBox zellikleri
Name : cbOp
Items : Alan pencereye alt alta + - x / karakterlerini yaznz
DropDownStyle : DropDownList
Yukardaki form ekranlarn elde ettikten sonra aadaki gibi kodlarmz yazmaya
balayabiliriz.
43 | S a y f a
case "-": //Eer ComboBox'da karma ilemi seildiyse
sonuc = Convert.ToInt32(txtSayi1.Text) - Convert.ToInt32(txtSayi2.Text);
break;
case "x": //Eer ComboBox'da arpma ilemi seildiyse
sonuc = Convert.ToInt32(txtSayi1.Text) * Convert.ToInt32(txtSayi2.Text);
break;
case "/": //Eer ComboBox'da Blme ilemi seildiyse
sonuc = Convert.ToInt32(txtSayi1.Text) / Convert.ToInt32(txtSayi2.Text);
break;
}
MessageBox.Show("Sonu : " + sonuc); //Sonucu Kullancya Gster
}
1.13.3. Ternary IF
IF ve Else bloklarndan oluur. IF yapsn tek satrda yazmak iin kullanabiliriz. Kod yaps
biraz deimekle birlikte IF ve Else yapsndan bir fark yoktur. Else if durumu
bulunmamaktadr. Tek satrda if kontrollerimizi yapmamz salar.
Ternary IF Syntax
<Sart> ? <DoruysaYapilacakIslem> : <yanlsaYapilacakIslem>
Formumuzda bir adet checkbox kontrol bulunsun. Eer kullanc butona tkladnda
checkbox kontroln seili hale getirdiyse; Sonu : True, seili hale getirmediyse;
Sonu : False mesaj grntlensin.
Ternary IF rnek
private void button1_Click(object sender, EventArgs e)
{
MessageBox.Show(chk.Checked ? "Sonu : True" : "Sonu : False");
}
IF Else rnek
private void button1_Click(object sender, EventArgs e)
{
if (chk.Checked == true)
{
MessageBox.Show("Sonu : True");
}
else
{
MessageBox.Show("Sonu : False");
}
}
44 | S a y f a
1.14. DIZILER (ARRAY)
Birden fazla ayn tipteki veriyi bir arada tutmamizi saglayan nesnelerimizdir.
EER; Index was outside the bounds of the array. hatas aliyorsanz, bilin ki dizinin
boyutlarn aacak ekilde eleman ekleme abasndasnz. Hata nerde diye bakmayn,
eleman ekleme ilemlerine gidin!
Dizi Tanmlamalar
//1.TANIMLAMA
//VeriTipi[] DiziAdi = new VeriTipi[ElemanSayisi];
int[] dizi = new int[3];
dizi[2] = 656;
dizi[0] = 5654;
dizi[1] = 1321;
//dizi[3] = 654674; => Dizimiz 3 elemanl oldugu icin hata verir!
//2. TANIMLAMA
//VeriTipi[] DiziAdi = new VeriTipi[ElemanSayisi] { DiziElemanlari }
string[] sehirler = new string[4] { "zmir", "stanbul", "Ankara", "Eskiehir" };
//3. TANIMLAMA
//VeriTipi[] DiziAdi = { DiziElemanlari };
char[] karakterler = { 'a', 'b', 'c', 'd' };
Senaryo; Dizinin son elemann ekranda gsterelim;
45 | S a y f a
1.15. DNGLER
Hazrladmz programlarda bir ii birden fazla kez yapmamz gereken durumlar olabilir.
Birden fazla kullancya mail gndermek, belirli iki yl arasndaki yllar yazdrmak gibi.
C Sharp programlama dilinde drt dng eidi bulunmaktadr. Her bir dngnn
kendine gre kullanlaca yerler ve durumlar olabilir.
Dng Biti Deeri : Dngnn art olarak dnebiliriz. Dngnn balang ve biti
deerini kontrol ederek dngmzn ne kadar alacan belirleyebiliriz.
rnek : 0 ile 10 arasndaki saylar ekrana yazdran program (10 Dahil Deil)
int donguBitisDegeri = 10; //Dng biti deerini belirliyoruz.
for (int i = 0; i < donguBitisDegeri; i++) //Dng Yaps
{
MessageBox.Show(i.ToString());//Dng deerimizi ekrana yazdryoruz.
}
Yukardaki rnekte 0 ile 10 arasndaki saylar (0 Dahil 10 Dahil Deil) MessageBox ile
kullancya gsterdik.
46 | S a y f a
rnek 1935 ile 2015 aras yllar ComboBoxa Listeleyen Program
private void Form1_Load(object sender, EventArgs e)//Form altnda
{
for (int i = 1935; i <= 2015; i++) //2015 yln dahil etmek iin <= kullanyoruz.
{
comboBox1.Items.Add(i);
}
}
Yukardaki rnek iin; ToolBoxdan formumuza bir adet ComboBox kontrol ekliyoruz.
Daha sonra formun zerine ift tklayarak formun Load eventini oluturuyoruz. Ve
yukardaki kodlarmz yazmaya balyoruz.
rnek, 1935 ile 2015 yllar arasndaki yllar combobox kontrolne listeler. Yukarda
artta kullandmz <= ifadesini, dngnn balang deeri olan i deikeninin
deerinin 2015den kk olduu veya 2015 e eit olduu srece almasn
istediimiz iin kullandk. Sadece < operatrn kullansaydk 2015 yl comboboxda ki
yl listesine dahil edilmezdi.
Yukardaki rnek iin; ToolBoxdan formumuza bir adet ComboBox kontrol ekliyoruz.
Daha sonra formun zerine ift tklayarak formun Load eventini oluturuyoruz. Ve
yukardaki kodlarmz yazmaya balyoruz.
rnek, 1935 ile 2015 yllar arasndaki yllar combobox kontrolne listeler. Yukarda
artta kullandmz <= ifadesini, dngnn balang deeri olan i deikeninin
deerinin 2015den kk olduu veya 2015 e eit olduu srece almasn
istediimiz iin kullandk. Sadece < operatrn kullansaydk 2015 yl comboboxda ki
yl listesine dahil edilmezdi.
Syntax
int deger = <baslangicDeger>;
while(sart)
{
47 | S a y f a
alacak Kodlar
alacak Kodlar
alacak Kodlar
alacak Kodlar
}
Syntax
do
{
//YAPILACAK LEMLER
} while (<sart>);
Foreach Syntax
<KoleksiyonTipi>[] <koleksiyonAdi> = {<deger>, <deger>, <deger>};
foreach (<Tip> <gelenDeger> in <Koleksiyon>)
{
//Yaplacak lemler
}
//Koleksiyon dngs Ogrenciler string dizi tipindedir. Her bir rencinin tipi stringdir.
48 | S a y f a
foreach (string ogrenci in ogrenciler)
{
MessageBox.Show(ogrenci);//Ogrenciler ierisindeki her bir renciyi tek tek ekrana
yazdrr.
}
}
1.16. RUNTIME
Yukardaki kod blounda proje altnda Form yklenirken yeni bir button oluturma
ilemi yaptk. Yaptmz ilem ksaca, RAM zerinde Button tipinde, btn isminde bir
nesne yaratmak ve bu nesneye Button snfndan instance almaktr.
Ksacas ben RAM zerinde projem alrken bir Button tanmlam oldum. Peki biz bir
button atmzda Properties penceresinden Button kontrolmze ait bir ok zellii
deitirebiliyorduk. Runtimeda oluturduumuz bir Buttonda propertyleri nasl
ynetebiliriz. imdi aadaki kod blounu inceleyelim.
Buttonun Propertyleri
Button btn = new Button();
btn.Name = "btnKaydet"; //Buttonumuzun ismi
btn.Text = "Kaydet"; //Kullancnn Grecei Yaz
btn.Width = 200; //Buttonumuzun genilik deeri
btn.Height = 30; //Buttonumuzun ykseklik deeri
btn.Location = new Point(30, 50); //Buttonun form zerindeki konumu
btn.Enabled = true; //Buttonun aktiflik durumu
49 | S a y f a
Sorunsuz bir ekilde Property penceresinde bulunan tm zelliklere btn. Diyerek
eriebildik. Peki biz bir buttonun sadece Propertylerinimi kullanabiliyoruz. Peki
Runtimeda oluturduumuz bir buttonun Eventlerini kullanmak istersek ne yapacaz.
Aadaki kod bloumuzu inceleyelim.
1.17. METOTLAR
Bir program gelitirirken, ayn kod bloklarn defalarca kullanmamz gerekebilir.
Yazdmz bir kodu birden fazla eventden kullanmak istediimizde kullanacamz her
event altna almasn istediimiz kod bloklarn yazmamz gerekebilir. Byle
durumlarda yazlmc ayn kodlar yazarken vakit kaybetmi olur. Ayn zamanda birden
fazla yerde kullandmz kodlarda bir deiiklik yaptmzda her yerde bu deiiklii
yapmamz gerekir.
Metotlarda burada bizim yardmmza koar. Biz birden fazla yerde kullanacamz
kodlar tek bir yap ierisinde toplarz. Bu yapy istediimiz yerden ararak
kullanabiliriz. Metotlarn bizlere bir ok avantaj vardr.
50 | S a y f a
1.17.1. Geriye Dn Tipi
Oluturacamz metodun geriye dn tipini belirtmeliyiz. Geriye dn tipleri metotlar
ile yaplm szlemelerdir diyebiliriz. Bir metot oluturduumuzda metodun geriye bir
deer dndreceini belirttiimizde geriye dn salamadmz taktirde hata verir.
Yukardaki kod ile Geriye deer dndrmeyen ve parametre almayan bir metot
oluturduk. Metodun geriye dn tipi void olarak iaretlendiinden bizden bir geriye
dn beklemedi. Metot ierisinde iki sayy toplatp sonucunu MessageBox ile
gsterdik. Biz bu ilemin sonucunu birden fazla eventde gstermek isteseydik tek
yapmamz gereken metodu event altnda armak olacakt. Peki bir metodu farkl
eventlerde nasl arabiliriz.
Metot armak
51 | S a y f a
void IkiSayiyiTopla() //Yazdmz Metot
{
int sayi1 = 10;
int sayi2 = 15;
int sonuc = sayi1 + sayi2;
MessageBox.Show(sonuc.ToString());
}
Snytax
<GeriyeDonusTipi> <MetotAdi>(<ParametreTipi> <ParametreAdi>, <ParametreTipi>
<ParametreAdi> ...)
{
//Metot ierisinde Yaplacak ilemler
//Metot ierisinde Yaplacak ilemler
//Metot ierisinde Yaplacak ilemler
//Metot ierisinde Yaplacak ilemler
}
52 | S a y f a
rnek
void IkiSayiyiTopla(int sayi1, int sayi2) //Parametre tip ve isimlerini belirtiyoruz.
{
int sonuc = sayi1 + sayi2;
MessageBox.Show(sonuc.ToString());
}
rnek Uygulama
//Formun LOAD Eventi
private void Form1_Load(object sender, EventArgs e)
{
//Kullanc Say Girmediinde Hata Vermesi Durumunu Kontrol Ediyoruz.
try
{
int kullanicininGirdigiSayi1 = Convert.ToInt32(textBox1.Text);
int kullanicininGirdigiSayi2 = Convert.ToInt32(textBox2.Text);
IkiSayiyiTopla(kullanicininGirdigiSayi1, kullanicininGirdigiSayi2); //Metodumuzu aryoruz.
}
catch
{
MessageBox.Show("Ltfen iki say girii yapnz.");
}
}
53 | S a y f a
}
catch
{
MessageBox.Show("Ltfen iki say girii yapnz.");
}
}
Birden fazla event altnda ayn metodu ardk ve metota deerler gndererek iki
sayy toplama ilemini gerekletirdik.
Syntax
<GeriyeDonusTipi> <MetotAdi>()
{
//Metot ierisinde Yaplacak ilemler
//Metot ierisinde Yaplacak ilemler
//Metot ierisinde Yaplacak ilemler
//Metot ierisinde Yaplacak ilemler
}
Bir metot geriye deer dndrecek ise void yerine geriye dn tipini belirtmeliyiz.
Geriye dn tipimiz C Sharp tarafnda tanml olan veri tipleri (string, int, bool, double
vs.) veya bizim tanmladmz nesne tipleri olabilir. Kendi nesnelerimizi tanmlamay
ilerde inceleyeceiz.
rnek olarak bir metot yazalm. Metodumuz dardan isim, soyisim ve doum yl bilgisi
alsn ve bu bilgiyi MessageBoxda Adnz : {Kullancnn Girdii sim}, Soyadnz :
{Kullancnn girdii Soyisim}, Yanz : {Kullancnn girdii doum ylna gre ya
hesaplasn} eklinde gstersin. ncelikle bu ilem iin bir form tasarm yapalm.
54 | S a y f a
rnek Uygulama
//Butonun Click Eventi
private void btnBilgiGoster_Click(object sender, EventArgs e)
{
string bilgi = BilgiGoster();//Metodumuzu ardk. Bize string bir deer dndrd iin dnen
deeri string bir deikene aktardk.
//Metodumuz
string BilgiGoster()
{
string ad = txtAd.Text; //smi deikene aktardk.
string soyad = txtSoyad.Text; //Soyismini deikene atadk.
string dogumYili = txtDogumYili.Text; //Dogum yln deikene attk.
rnek Uygulama
//Butonun Click Eventi
private void btnBilgiGoster_Click(object sender, EventArgs e)
{
string bilgi = BilgiGoster(txtAd.Text, txtSoyad.Text, Convert.ToInt32(txtDogumYili.Text));
//Metodumuzu ardk. Bize string bir deer dndrd iin dnen deeri string bir
deikene aktardk. stedii parametrelere SIRASIYLA ad, soyad ve doum yl bilgilerini gnderdik.
55 | S a y f a
//Metodumuz
string BilgiGoster(string ad, string soyad, int dogumYili)
{
int yas = DateTime.Now.Year - Convert.ToInt32(dogumYili); //imdiki tarihten doum yln
karyoruz ve ya elde ediyoruz.
Trim Metodu
private void btnTrim_Click(object sender, EventArgs e)
{
textBox1.Text = textBox1.Text.Trim();//Sadaki ve soldaki tm bosluklar siler.
textBox1.Text = textBox1.Text.Trim(' ', 'a', '!', '2', '\''); //Textboxda bata ve sonra braklan
boluklar temizler.Bu ekilde char dizisi tanmlanr ve bu yukarda bulunan karakterlerin bata ve
sonda olmasn engeller. Tek trnak engellemek iin bana \ ters slash kullanlarak yazlr. /' eklinde
tek trnak engellenir.
textBox1.Text = textBox1.Text.TrimStart();//Sadece Batan karakterleri sil
textBox1.Text = textBox1.Text.TrimEnd(); //sadece sondan karakterleri sil
//Dnen deer string olduu zamanlarda istediimiz metotlar tekrar tekrar kullanabiliriz.
}
56 | S a y f a
Equals Metodu
private void btnEquals_Click(object sender, EventArgs e)
{
bool esitmi = textBox1.Text.Equals(textBox2.Text, StringComparison.OrdinalIgnoreCase);
//StringComparison.OrdinalIgnoreCase : metotu kck byk harf gzetmeksizin karlatrma
//StringComparison.CurrentCultureIgnoreCase : hem kck byk harf gzetmeksizin
kyaslama hemde dil seceneine gre kyaslama
MessageBox.Show(esitmi.ToString());
}
1.18.3. SubString
String ifadede bulunan karakterlerden belirtilen index numarasndan balayarak string
ifadenin sonuna kadar keser. rnein BilgeAdam ifadesinde sadece Adam
ifadesinin SubStringi ni almak istersek kullanabiliriz.
SubString
private void btnSubString_Click(object sender, EventArgs e)
{
textBox3.Text = textBox1.Text.Substring(2); //indexi 2 olan harften balayarak sonuna kadar kes,
yani 0 ve 1 index numaralar karakterleri sil 3. harften balayarak sonuna kadar al..
textBox3.Text = textBox2.Text.Substring(2,4); //indexi 2 olan harften balayarak 4 karakter al :)
//Stringin boyutunu aan bir substring ilemi yaparsak out of range hatas alrz. Bu hata string
snrlarn amak anlamna gelir.
}
1.18.4. Reserve
String ifadede ki karakter topluluunu ters evirmek iin kullanlan string metotudur.
Reserve
private void btnSubString_Click(object sender, EventArgs e)
{
textBox3.Text.Reverse(); //Textbox ierisindeki string ifadeyi ters evirir.
}
1.18.5. Index Of
Yazlan kelime ierisinde belirttiim karakteri arar. rnein BilgeAdam string ifadesinde
a harfini aramak istediimde kullanabilirim. Burada dikkat edilmesi gereken nokta, ilk
a harfini bulup indexini dndrr. Dier a harflerini aramaz. Eer string ifade ierisinde
aradmz karakter bulunamazsa index deeri olarak -1 dner.
Index Of Metodu
private void btnIndexOf_Click(object sender, EventArgs e)
{
textBox6.Text = textBox1.Text.IndexOf('a').ToString(); //String ifade ierisinde a harfini arar.
textBox6.Text = textBox1.Text.IndexOf("alp").ToString(); //eklindede kullanlr. alp i arar ve ilk
harf a nn indexini dndrr.
textBox6.Text = textBox1.Text.IndexOf('a',1).ToString(); //1. indexten balayarak bulmaya alr.
Eer hi bir tanmlama vermezsek varsylan olarak sfr indexinden aramaya balar.
}
57 | S a y f a
1.18.6. Remove
String ifade ieriside belirttiimiz alan kesebilir ve kestiimiz alan dnda kalan ksm
elde edebiliriz.
Remove Metodu
private void btnRemove_Click(object sender, EventArgs e)
{
textBox4.Text = textBox1.Text.Remove(2, 4); //2.indexden bala ve 4 karakter sil
}
1.18.7. Contains
Contains metodu, metot ierisinde verilen ifadenin, string ifade ierisinde olup
olmadn kontrol eden string metotdur. Boolean sonu dndrr. Eer string ifade
verdiimiz deeri ieriyorsa true, iermiyorsa false deeri dndrr.
Contains Metodu
private void btnContains_Click(object sender, EventArgs e)
{
bool iceriyormu = textBox5.Text.Contains('a');
bool iceriyormu2 = textBox5.Text.Contains("ayhan");
MessageBox.Show(iceriyormu.ToString());
}
1.18.8. Replace
String ifade ierisinde bulunan deerleri deitirmek iin kullanlr.
Replace Metodu
private void btnReplace_Click(object sender, EventArgs e)
{
//ki kullanm vardr karakter ve ifade raplece yapmak.
textBox7.Text = textBox1.Text.Replace('a', 'b');//ilk verdiimiz char textbox 1 deki a lar textbox7
ye yazarken b yapar. Bu ilem karakter deitirmek iin.
textBox7.Text = textBox1.Text.Replace("ayhan", "alp");//fadeleri deitirir. Textbox1 de ayhan
yazd her yere alp yazar.
}
1.18.9. Split
String ifade ierisine verdiimiz ayraca gre string ifadeyi bler. Bld ifadeyi bir
diziye aktarr.
Split Metodu
private void btnSplit_Click(object sender, EventArgs e)
{
//Split ayrmak
string[] ayrimlar = textBox1.Text.Split(','); //ierisinde verdiimiz ayraca gre ayrac grd
yerlerde stringi ayrr. rnein textboxda alp,nazl,duygu,ayhan,kadir dediimde virglleri ayrarak
listbox a ekler.
listBox1.Items.AddRange(ayrimlar); //Dizideki verileri listboxa ekler.
}
58 | S a y f a
1.18.10. ToUpper
Verilen string ifade ierisindeki tm harfleri byk harf yapar.
ToUpper Metodu
textBox7.Text = textBox1.Text.ToUpper();//Textbox da ki ifadeyi byk harflerle yazar
1.18.11. ToLower
Verilen string ifade ierisindeki tm harfleri kk harf yapar.
ToLower Metodu
textBox7.Text = textBox1.Text.ToLower();//Textbox da ki ifadeyi kk harflerle yazar
1.19. GUID
Bilgisayardaki eitli verilere bakarak rasgele bir alfanumeric karakter dizisi retir.
Oluturulan bu karakter dizisi esizdir. Guid; resim ekleme, serial key retme gibi
ilemlerde kullanlabilir.
String metotlar ve guid snfn kullanarak bir lisans key oluturma program
yapalm.
private void btnKeyOlustur_Click(object sender, EventArgs e)
{
string[] u = new string[4];
for (int i = 0; i < 10; i++)
{
string uzunkey = Guid.NewGuid().ToString();
uzunkey = uzunkey.Replace("-", "").ToUpper();
u[0] = uzunkey.Substring(0, 4);
u[1] = uzunkey.Substring(5, 4);
u[2] = uzunkey.Substring(9, 4);
u[3] = uzunkey.Substring(13, 4);
uzunkey = string.Format("{0}-{1}-{2}-{3}", u[0], u[1], u[2], u[3]);
listBox1.Items.Add(uzunkey);
}
}
59 | S a y f a
1.20.1. PI Says
Bir dairenin evresinin apna blm ile elde edilen sayya verilen isimdir ve Math
ktphanesi bize bu deeri sunabilir
PI Says
private void btnPI_Click(object sender, EventArgs e)
{
this.Text = Math.PI.ToString();
}
1.20.2. ABS
Mutlaka deeri ifade eden metottur, rnein -45 saysn iki dz izgi ierisine alrsak
darya say +45 olarak kacaktr. |-45| = 45
ABS
private void btnABS_Click(object sender, EventArgs e)
{
int MutlakDeger = Math.Abs(-45);
this.Text = MutlakDeger.ToString();
}
1.20.3. FLOOR
Verilen ondalikli degeri, bir alt tam degere tamamlar
FLOOR
private void btnFLOOR_Click(object sender, EventArgs e)
{
double deger = Math.Floor(12.98);
MessageBox.Show(deger.ToString());
}
60 | S a y f a
1.20.4. CEILING
Verilen ondalikli degeri, bir ust tam degere tamamlar
CEILING
private void btnCEILING_Click(object sender, EventArgs e)
{
double deger = Math.Ceiling(12.98);
MessageBox.Show(deger.ToString());
}
1.20.5. ROUND
Saynn yarisindan fazlasini bir uste, yarisindan azini ise bir alttaki tam sayiya yuvarlar
ROUND
private void btnROUND_Click(object sender, EventArgs e)
{
double deger = Math.Round(12.50);
MessageBox.Show(deger.ToString());
}
1.20.6. TRUNCATE
Saynn ondalikli kismina bakmaz, yalnizca tam kismini size teslim eder
TRUNCATE
private void btnTruncate_Click(object sender, EventArgs e)
{
double deger = Math.Truncate(12.98);
MessageBox.Show(deger.ToString());
}
1.20.7. MAX
Girilen iki deerlerin arasndaki en byk deeri yakalar.
MAX
private void btnMAX_Click(object sender, EventArgs e)
{
int maksimumdeger = Math.Max(45, 65);
MessageBox.Show(maksimumdeger.ToString());
}
1.20.8. MIN
Girilen iki deerlerin arasndaki en kk deeri yakalar.
MIN
private void btnMIN_Click(object sender, EventArgs e)
{
int minimumDeger = Math.Min(45, 65);
MessageBox.Show(minimumDeger.ToString());
}
61 | S a y f a
1.20.9. POW
Kuvvet alma ilemlerini gerekletirir. lk parametrede hangi saynin kuvveti alnacak,
ikinci parametrede ise o saynn kanc kuvveti alnacak diye sorar
POW
private void btnPOW_Click(object sender, EventArgs e)
{
double kuvvet = Math.Pow(3, 4);
MessageBox.Show(kuvvet.ToString());
}
1.20.10. SQRT
Bir saynn karekkn hesaplamak iin kullanlr
SQRT
private void btnSQRT_Click(object sender, EventArgs e)
{
double deger = Math.Sqrt(16);
MessageBox.Show(deger.ToString());
}
1.20.11. SIGN
Bir saynn negatif, pozitif ya da 0'a eit olup olmadyla ilgili bildirim dner. Eer say
negatifse -1, pozitifse +1, 0 ise size 0 degerini dner
SIGN
private void btnSIGN_Click(object sender, EventArgs e)
{
int sonuc = Math.Sign(-25);
MessageBox.Show(sonuc.ToString());
}
Altrma:
Form zerinde yer alan 3 textbox ve Minumum Deer buttonunu kullanarak dardan
girilen 3 saydan en kn tek satrda gsteriniz
62 | S a y f a
OBJECT ORIENTED PROGRAMMING
2.1. Intro
Nesneye Ynelik Programlama, C Sharp tarafnda tanml olmayan yaplar tanmlama
imkan salar. rnein, bir buton olutururken Button btn = new Button(); eklinde buton
tanmlayabiliyoruz. Buton tanmlayabilmemizin nedeni, Button yapsnn .net
Framework ortamnda tanml olmasndan kaynaklanyor.
Peki..
63 | S a y f a
Bir tabletin markas vardr. (string)
C Sharp tarafnda tablete ait bilgileri tutmak iin deikenleri kullanmamz gerekir.
Yukardaki zelliklerde, her bir zelliin deiken tipi bulunmaktadr. Peki ben bu
zellikleri bir arada tutmak istersem ne yapacam?
Bu zellikleri bir arada tutmam gerektiinde dizi tanmlamam gerekir. Bir dizi
tanmladmda ayn at altnda tutup, verilere daha kolay eriebilirim ama yukardaki
rnekteki gibi farkl veri tipleri kullanmam gerektiinde dizimin tipi object olmaldr.
Object dizisi ile veriyi tuttuumda deeri darya kartrken unboxing yapmam gerekir
ayrca verinin dizide hangi srada olduunuda bilmem gerekir. OOP kendi yaplarmz
tanmlayarak farkl tipleri tek at altnda toplamamza olanak salayabilir.
64 | S a y f a
deikenlerde veri saklayabiliriz. Class ierisinde deikenler yerine farkl bir yap olan
Field Property yapsn kullanabiliriz. Fieldlar class ierisinde oluturulan, darya kapal
deikenlerdir. Fieldlar ierisinde deer saklar. Fieldlar darya kapal olduundan
fielda deer atanamaz ve fieldda ki deeri okumak iin Property kullanlr. Property
fielda deer atamak ve fieldda ki deeri okumak iin kullanlan arac bir yapdr.
Biz bir deiken oluturduumuzda bu deikene dorudan eriim salarz. Ama Field
Property yaps bizim Field mza dorudan eriim salamamz engeller ve Property
ierisinde veri kontrollerini yapma imkan tanr. Yani RAM zerinde tuttuumuz verinin
kontroln Property ierisinde yapabiliriz.
Dnn ki akam gzel bir restorana yemee gidiyorsunuz. Arabanz ile restorann
nne gittiniz arabanz valeye teslim ettiniz. Vale arabay otoparka brakt ve siz
restorandan ayrlrken arabanz geri getirdi. te Field ve Property ilikisini bu ekilde
dnebiliriz.
Fieldn grevi, ierisindeki verileri siz arana kadar gvenli bir ekilde saklamaktr.
Propertynin grevi ise verinin gvenli bir ekilde fielda gitmesini ve ordan gelmesini
salamaktr. rneimizde Property Vale, Field ise Otoparktr. rnekteki araba ise
veridir. Vale arabann gvenli bir ekilde otoparka gidip gelmesini salar. Otopark ise
arabay korur ve saklar.
65 | S a y f a
2.2.4. Encapsulation
Encapsulation : Nesnenin yelerine yaplan eriimin kontrol altna alnmasna ve
bu kontroln nesnenin kendisi tarafndan yaplmasn salamaktr. Ama
fiedl'lar private yaparak bu alanlara dardan eriimi nlemek ve get-set
metotlar ile kontrol salamaktr.
Class
class Urun
{
int _id; //id bilgisine dardan eriimi engelledik.
string _ad;
public string Ad
{
get { return _ad; }
set { _ad = value; }
}
double _fiyat;
66 | S a y f a
public double Fiyat
{
get { return _fiyat; }
set
{
if (value > 0) //d dnyadan alnan deer istediim deere uygun
ise deeri al ve field'a gnder
_fiyat = value;
else //d dnyadan alnan deer istediim deere uygun deilse,
uyar ver ve field'a herhangi bir deer set etme!
System.Windows.Forms.MessageBox.Show("Fiyat negatif olamaz.");
}
}
}
Form:
Class ierisinde kullandmz metotlar, hazrladmz snf ile ilgili ilemleri yapar.
67 | S a y f a
Constructor, yaplandrc metot olarak kullanlr. Bir classdan instance alndnda ilk
tetiklenecek olan metodtur. Geriye dn tipi yoktur. Yeni bir form oluturduumuzda
aada ki yap oluacaktr.
Form 1
public partial class Form1 : Form
{
//Constructor
//Yaplandrc metot geriye dn tipi yoktur.
public Form1()
{
InitializeComponent();
}
}
}
Yaplandrc metot classdan instance alma ilemi srasnda tetiklenir. Bir class
oluturduumuzda constructor metot gremeyiz ama bu yaplandrc metodun
olmad anlamna gelmez. Eer bir classda instance ilemi srasnda herhangi bir ilem
yaplmayacaksa constructor yazmak zorunda deiliz.
Instance alma ilemi srasnda kullancdan bilgi almak istendiinde kullanlr. Kullanc
classdan instance almaya altnda gerekli artlar salayamyorsa instance
alamaz.
this.Controls.Add(kontrolAdi);
68 | S a y f a
2.6. Access Modifiers (Eriim Belirteleri)
Eriim belirtei anlamna gelen Access Modifiers, classlar, metotlar ve deiken gibi
yaplarn eriim durumlarn belirler. Classlar hari tanmlanan yaplarn varsaylan Eriim
belirteci privatedr. Private yapnn darya almayacan ve sadece this
keywordnde kullanlacan belirtir. Eriim belirteleri ile ilgili detayl bilgiyi aadaki
tabloda bulabilirsiniz.
Static olarak iaretlenmi ve .net Framework ortamnda tanml olan classlarda vardr.
Bu classlara rnek vermek gerekirse;
MessageBox Snf
Math Snf
Guid Snf
69 | S a y f a
int sayi = 5;
fadesinde, HEAP blmnde sayi isminde bir alan ayoruz. Bu alan ierisinde 5 saysn
tutuyoruz. Deer tiplerinde, ieride bilginin kendisi tutulur.
70 | S a y f a
2.9. Inheritance
Inheritance, biyolojiden programlama diline geen bir terimdir. Canllarda bulunan
kaltm zellii anlamna gelir. Object Oriented Programming gerek hayattaki yaplar
bilgisayar ortamna tamamz salar. OOP yaps biyolojide bulunan bir ok terimden
faydalanr.
En sade ekli ile: inheritance sayesinde bir snfn metodlarn ve propertylerini kullanan
baka snflar tretilebilmesini salar diyebiliriz.
Muhasebe Departman
nsan Kaynaklar Departman
Teknik Servis Departman
Muhasebe.cs
class Muhasebe
{
//Her Insana Ait zellikler
public string AdSoyad { get; set; }
public DateTime DogumTarihi { get; set; }
public bool ErkekMi { get; set; }
public double Kilo { get; set; }
public double Boy { get; set; }
public bool EhliyetiVarMi { get; set; }
public bool SaglikSorunuVarmi { get; set; }
public decimal AldigiUcret { get; set; }
71 | S a y f a
InsanKaynaklari.cs
class InsanKaynaklari
{
//Her Insana Ait zellikler
public string AdSoyad { get; set; }
public DateTime DogumTarihi { get; set; }
public bool ErkekMi { get; set; }
public double Kilo { get; set; }
public double Boy { get; set; }
public bool EhliyetiVarMi { get; set; }
public bool SaglikSorunuVarmi { get; set; }
public decimal AldigiUcret { get; set; }
TeknikServis.cs
class TeknikServis
{
//Her Insana Ait zellikler
public string AdSoyad { get; set; }
public DateTime DogumTarihi { get; set; }
public bool ErkekMi { get; set; }
public double Kilo { get; set; }
public double Boy { get; set; }
public bool EhliyetiVarMi { get; set; }
public bool SaglikSorunuVarmi { get; set; }
public decimal AldigiUcret { get; set; }
Yukardaki yap yerine, bir Insan class olutursak ve bu classn zelliklerini baka
classlara kaltm olarak brakmay denesek yap ne kadar esnek olur?
72 | S a y f a
Hadi Deneyelim..
Insan.cs
class Insan
{
//Her Insana Ait zellikler
public string AdSoyad { get; set; }
public DateTime DogumTarihi { get; set; }
public bool ErkekMi { get; set; }
public double Kilo { get; set; }
public double Boy { get; set; }
public bool EhliyetiVarMi { get; set; }
public bool SaglikSorunuVarmi { get; set; }
public decimal AldigiUcret { get; set; }
}
Yukarda bir insana ait tm zellikleri tanmladk. Peki departmanlarn zelliklerini nasl
tanmlayacaz? Departman zelliklerinide her departmana gre class oluturarak
tanmlayalm.
Muhasebe.cs
class Muhasebe
{
//Muhasebe Departmanna Ait zellikler
public bool MaasBilgileriniGorebilir { get; set; }
public bool MaasBilgileriniDegistirebilir { get; set; }
}
InsanKaynaklari.cs
class InsanKaynaklari
{
//nsan Kaynaklar Departmanna Ait zellikler
public bool IseAlabilir { get; set; }
public bool UcretBelirleyebilir { get; set; }
public bool CalismaSaatiBelirleyebilir { get; set; }
}
TeknikServis.cs
//Teknik Servis Departmanna Ait zellikler
public bool AgKurabilir { get; set; }
public bool TeknikDestekVerebilir { get; set; }
public bool BilgisayarAlabilir { get; set; }
73 | S a y f a
Yukarda grdnz gibi tm departman bilgilerini kendilerine ait classlarda
tanmladk ama insana ait zellikler farkl bir class olan Insan classnda..
imdi Insan classndan departman classlarna kaltm vererek insana ait zelliklerin
tm departmanlara kolay bir ekilde miras brakabiliriz. Kaltm verme zellii class
adnn yanna : den sonra classn adn yazarak verilir. : dan sonra yazlan class Base
Class olarak geer. Bir classn yanlzca bir Base Class olabilir. Aadaki kod
bloklarnda Insan classn nasl kaltm olarak brakabileceimizi grelim.
Muhasebe.cs
class Muhasebe : Insan //: dan sonra Insan classndan miras alndn belirtiyoruz.
{
//Muhasebe Departmanna Ait zellikler
public bool MaasBilgileriniGorebilir { get; set; }
public bool MaasBilgileriniDegistirebilir { get; set; }
}
InsanKaynaklari.cs
class InsanKaynaklari : Insan //: dan sonra Insan classndan miras alndn belirtiyoruz.
{
//nsan Kaynaklar Departmanna Ait zellikler
public bool IseAlabilir { get; set; }
public bool UcretBelirleyebilir { get; set; }
public bool CalismaSaatiBelirleyebilir { get; set; }
}
TeknikServis.cs
class TeknikServis : Insan //: dan sonra Insan classndan miras alndn belirtiyoruz.
{
//Teknik Servis Departmanna Ait zellikler
public bool AgKurabilir { get; set; }
public bool TeknikDestekVerebilir { get; set; }
public bool BilgisayarAlabilir { get; set; }
}
Tekrar ve tekrar belirtmek gerekir ki : Bir classn yanlzca bir Base Class olabilir. Yani
bir class sadece bir classdan miras alabilir.
Classlar aras miras verme ilemini ebeveyn ocuk ilikisine benzetebiliriz. Bir ocuun,
biyolojik olarak bir anne - baba ebeveyn ikilisi vardr. Bir ocuun biyolojik olarak birden
fazla anne ve babas olamaz.
74 | S a y f a
Ama dikkat etmemiz gereken nokta, bir ebeveyn ikilisinin birden fazla ocuu olabilir.
te bu yap kaltm (Inheritance) yapsdr.
Bir classn, bir base class olabilir. (Bir ocuun bir anne-babas olabilir.)
Bir Base Class birden fazla classa kaltm verebilir. (Bir anne-babann birden fazla
ocuu olabilir.)
Hayvan.cs
class Hayvan
{
//Tm hayvanlarn ortak zellikleri
public double Boyu { get; set; }
public double Kilosu { get; set; }
public Color Rengi { get; set; }
public DateTime DogumTarihi { get; set; }
}
Surungen.cs
//Tm srngenler bir hayvandr. Bu sebeple srngen, hayvandaki zellikleri miras alr.
class Surungen : Hayvan
{
//Srngenlere ait ortak zellikler
public bool AyaklariVarMi { get; set; }
public bool DerisiZirhliMi { get; set; }
}
Timsah.cs
//Timsah bir srngendir. Srngen' hayvan classndan miras ald iin, hem hayvann hem
srngenin zelliklerini miras almaldr.
class Timsah : Surungen //Srngen class, hayvan classndan miras ald iin Hayvan class
sadece srngen classndan miras almaldr.
{
75 | S a y f a
//Timsaha ait zellikler
public int DisSayisi { get; set; }
}
Bukalemun.cs
//Bukalemun bir srngendir. Srngen' hayvan classndan miras ald iin, hem hayvann hem
srngenin zelliklerini miras almaldr.
class Bukalemun
{
//Bukalemuna ait zellikler
public bool RenkDegistirebilirMi { get; set; }
}
Yilan.cs
//Yilan bir srngendir. Srngen' hayvan classndan miras ald iin, hem hayvann hem
srngenin zelliklerini miras almaldr.
class Yilan
{
//Yilana ait zellikler
public bool DeriDegistirebilirMi { get; set; }
public bool ZehirliMi { get; set; }
}
Abstract elerin amac, kendisinden kaltm alan snflarda bir takm zelliklerin
kullanlmasn zorunlu klmaktr..
Eer bir abstract ierisinde abstract bir e tanmladysanz o eye bir kod gvdesi
belirtemezsiniz.
Bir abstract eyi bir snfa yerletirebilmek iin o snfn mutlaka abstract olmasi
gerekmektedir...
2.11. Polymorphism
Inheritance gibi biyolojiden, programlama diline gemi bir terimdir. Canllarda ki ok
biimliliktir. Bir metodun farkl snflar iin farkl etkiler oluturmasn salayan bir
yntemdir.
76 | S a y f a
Mteriler, firmaya sipari verebilir.
Firma, tedarikilere sipari verebilir.
Bu iki ilem iin oluturulacak metotlar ayn ii, farkl yntemler ile yapmaktadr. Bir tanesi
bizim veritabanmza mteriden alnan siparii kayt ederken, dier metot stoumuz
azaldnda tedarikiye bilgi gndererek rn siparii verir.
rneimizde bir sipari classmz bulunmaktadr. Sipari ilemini hem mteri, hem de
firma yapabilir. Biz sipari classmzda oluturduumuz SiparisVer() metodunu farkl iki
classda kullanacaz.
Siparis.cs
public class Siparis
{
public virtual string SiparisVer()
{
return "Sipari verme ilemi iin SiparisVer metodunu tanmlamanz gerekmektedir.";
}
}
Musteri.cs
public class Musteri : Siparis //Siparis Classndan SiparisVer metodunu miras alyoruz.
{
public override string SiparisVer()
{
return string.Format("Mteri, firmamza baaryla sipari verdi.");
}
}
Firma.cs
public class Firma : Siparis //Siparis Classndan SiparisVer metodunu miras alyoruz.
{
//Firmann Mteriye Sipari Vermesi
public override string SiparisVer()
{
return string.Format("Firma, tedarikiye baaryla sipari verdi.");
}
}
Miras verme ileminden sonra, Siparis class ierisinde tanmlanan SiparisVer() metodu
virtual olarak iaretlenir. Virtual olarak iaretlenen metotlar miras ald classlarda
ezilebilir olur. Biz SiparisVer() metodunu ezerek istediimiz ilemleri yapabiliriz.
77 | S a y f a
Yukardaki kodu altrdmzda farkl classlar iin SiparisVer() metodunu
ardmzda ardmz class ierisindeki metot alacaktr.
1.Tanmlama-Declare
2.rneklenme-Instance
3. arma - Invoke
Delegate olarak bir method tanmlanr. Bu method aslnda temsilcidir. Bir olay
olduunda siz delegate method'unu arrsnz. Delegate method'una kendisini
ekleyen method'lar otamatik olarak arlrlar. Aada basit bir delegate methodu
yaratyoruz.
Delegate rnei
class Program
{
//Delegateler namespace altnda tanmlanabilir.
public delegate int MyDelegate(int Sayi1, int Sayi2);
//Console Uygulamas
static void Main(string[] args)
{
//Delegate' in instance' n oluturalm.
MyDelegate delege = new MyDelegate(Carp);
78 | S a y f a
int iCarpim = delege(3, 4); //Invocation
Console.WriteLine("arpm Sonucu :{0}", iCarpim);
Console.ReadLine();
}
}
2.12.2. Eventler
Event, belirli bir olayda veya belirli bir zamanda meydana gelen yada
meydana gelmesini istediimiz ilemleri tasarlayacamz olaylarn btndr.
rnein bir dmenin tklanmas bir event oluturur. Olay gdml programlama
dillerinin temelini olutururlar. Eventler, bir kontrol kullanmamz iin gereken
zaman kavramlardr. Butonun tklanmas, formun yklenmesi gibi zamanlarda
yaplacak ilemleri ynetirler.
2.13. Interface
Interfacelere trke karl olarak arayz dememiz yanl olur, Interfaceler C Sharp
tarafnda yetenek olarak tanmlanabilir.
Interfaceler, class veya struct gibi trler iin oluturulmu modellerdir. Interfaceler bir
snfn temelde hangi yelerden oluacan belirleyen ablon yaplardr. Bu sayede
oluturulacak snflara nclk edilir ve iermeleri gereken yelerin ne olacann
standard belirlenir. Kullanlmas zorunlu olan metotlar belirlenir fakat metot ierikleri
79 | S a y f a
doldurulmaz. Simlasyon metot olarak hazrlandktan sonra, yetenek olarak
kazandrldklar Classa bu metotlar implament edilir. Metot ierikleri class ierisinde
doldurulur.
Inheritance yapsnda bir classn bir base class bulunmaktayd. Bir classa birden fazla
classdan kaltm brakmak istediimizde hiyerarik bir yap oluturuyorduk.
Interfacelerde bu durum geerli deildir. Bir classa birden fazla interfaceden yetenek
kazandrabiliriz.
Bir insan classmzn olduunu dnelim. nsan yapsndan treyen garson, mteri ve
patron classlar bulunmaktadr. Bu classlarn (garson.cs, musteri.cs, patron.cs) temel
yaplar ayndr. Ama insana ait yetenekler dnda kendilerine ait yetenekleride
bulunur. Byle bir yapda patrona ve mteriye servis yapabilme yeteneini
vermememiz gerekir. Restoran rnei erevesinde bulunan yeteneklerin listesini
karalm
Yukardada belirttiimiz gibi ParaOde metodu birden fazla yerde kullanlacak. Peki
ben metodumu her class iin ayr ayr tanmlamak zorundamym?
80 | S a y f a
Biz yetenek diye bir class tanmlayp, o class baka bir classa yetenek olarak miras
brakamayz. Bunun sebebi yukardaki yaplarn hepsinin Insan classndan tremi
olmasdr. Inheritanceda bahsettiimiz kural hatrlayalm.
Bir rnek ile inceleyelim.. Aada bulunan ku classn oluturalm. Ku classn base
class olarak kullanarak, Mart, Karga, Tavuk ve Penguen classlarmzda oluturalm.
Kus.cs
public class Kus
{
public decimal GagaBoyu { get; set; }
public Color TuyRengi { get; set; }
}
Karga.cs
public class Karga : Kus
{
Marti.cs
public class Marti : Kus
{
Penguen.cs
public class Penguen : Kus
{
Tavuk.cs
public class Tavuk : Kus
{
Yukarda grld gibi tm classlar Kus.cs classndan miras ald. Peki Kus classndan
retilen tm classlar inceleyelim.
81 | S a y f a
Yukarda tanmladmz kularn (mart, penguen, karga, tavuk) hepsi
uabiliyormu?
Yukarda tanmladmz kularn (mart, penguen, karga, tavuk) hepsi
yzebiliyormu?
Yukarda tanmladmz kularn (mart, penguen, karga, tavuk) hepsi
yumurtlayabiliyormu?
imdi ben bu ilemleri ynetmek iin bir uma yetenei tanmlayacam. Interfaceler
standart olarak isimlerinin balarna I karakteri eklenerek tanmlanr. I -> Interfacei
temsil eder.
Add > New sekmesini kullanarak interface dosyasn seiyoruz ve ismini IUcabilir olarak
belirleyip oluturuyoruz.
IUcabilir.cs
public interface IUcabilir
{
//Aada geriye dn tipi int olan Uc isimli bir metot tanmlyoruz.
int Uc();
}
Karga.cs
//Karga kutan miras ald iin baka bir classdan miras alamaz.
//Ama bir class a snrsz yetenek kazandrabiliriz.
//Bir class'a yetenek kazandrmak iin class'dan sonra ',' karakteriyle yeteneklerimizi ekleriz.
public class Karga : Kus, IUcabilir //Yeteneimizi ekledik.
{
82 | S a y f a
IUcabilirde bulunan Uc metodu, karga classnda bulunmuyor diye bir hata verdi. Bu
hatann sebebi henz oluturduumuz yetenei, classmza kazandrmadmzdan
dolay kyor.
Karga.cs
public class Karga : Kus, IUcabilir //Yeteneimizi ekledik.
{
public int Uc()
{
throw new NotImplementedException();
}
}
Karga.cs
public class Karga : Kus, IUcabilir //Yeteneimizi ekledik.
{
public int Uc()
{
return 50; //Karga 50 birim yksekten uabilir
}
}
83 | S a y f a
Karga.cs
public class Marti : Kus, IUcabilir //Yeteneimizi ekledik.
{
public int Uc()
{
return 100; //Mart 100 birim yksekten uabilir
}
}
imdi bir form grnm oluturuyorum ve forma eklediim button eventinin ierisine
yukarda oluturduum classlarn hepsinden instance alarak listboxa ekliyoruz. Daha
sonra projeyi altrp doldur butonuna tklyoruz.
84 | S a y f a
imdi bir yetenek daha belirleyelim. Yukarda oluturduumuz hayvan classlarndan
uabilenler dnda yzebilenlerde var. imdi IYuzebilir isminde bir interface daha
tanmlyoruz.
IYuzebilir.cs
public interface IYuzebilir
{
//Aada geriye dn tipi int olan Uc isimli bir metot tanmlyoruz.
int Yuz();
}
Yzme yeteneine sahip olan classlar mart ve penguen classlardr. lk olarak yzme
yeteneini Penguene kazandryorum. Mart ve Kargaya yetenek kazandrdmz gibi
penguen classna da yetenek kazandryoruz.
Penguen.cs
public class Penguen : Kus, IYuzebilir
{
//Interface ieriini implament etmeyi unutmuyoruz.
public int Yuz()
{
return -50; //Marti -200 birimden yzebilir
}
}
Marti.cs
public class Marti : Kus, IUcabilir, IYuzebilir //Yzme yeteneimizi , den sonra ekliyoruz.
{
public int Uc()
{
return 100; //Marti 100 birim yksekten uabilir
}
85 | S a y f a
Yzme yeteneinide implament ettikten sonra yukarda grdnz gibi iki Interfacee
ait metodlar marti classna eklendi. Tek yapmamz gereken metot gvdelerini
doldurmaktr.
Dnyada en youn kullanlan veritaban ynetim sistemi SQL Serverdr. SQL Server
kullanarak verilerinizi dilediiniz ekilde ynetebilir, eitli fonksiyonlar kullanarak ok
sayda ve komplike sonular dndrebilirsiniz. Bylece istediiniz verileri raporlayarak
elde etmi olursunuz.
86 | S a y f a
Microsoft SQL Server
Management Studio programn
altrdktan sonra servera
balanmak iin aadaki Sql
Server penceresi gelmektedir. Bu
pencere sistemimizde alan Sql
Servera (Sql sunucusu)
balanmak iin kullandmz
bilgileri ister. Bu bilgiler SQL Server
Management Studio kurulurken
belirlenir. Bilgilerin sunucu
bilgileriyle elemesiyle eriim
salanr.
MS SQL Server Balant Penceresi 1
3.1.5. AUTHENTICATION
3.1.5.1. Sql Server Authentication
Sql servera nasl balanacamz seiyoruz. Uzak sunucuda ki bir Servera
balanacam zaman bir ip adresi gerekir. Bu ip adresi dnda veritabanna erimek
iin bir kullanc ad ve ifre verilir. Verilen ip adresi kullanc ad ve ifreyle balant
salanr.
87 | S a y f a
3.1.6. LOGIN
Sql Server Authentication seili iken Veritabanna balanrken hangi kullanc ile giri
yapacamz seeceimiz alandr. sa System Admin veritabanlar zerinde her
yetkiye sahip olan kullanc trdr. Sa ile hereyi yapabiliriz. Biz istersek kendi
kullanclarmzda tanmlayabiliyoruz. Kullanc dediimiz bir login tanmlamaktr.
3.1.7. PASSWORD
Balanmak istediimiz kullancya ait
ifreyi gireriz.
FILE TYPE : Dosya tipimizi belirler. SQLde dosya tipi ikiye ayrlr.
88 | S a y f a
Ldf : Log dosyasdr. Veritabannda yaplan ilemlerin loglarn tutar. (u kullanc u
ipden giri yapt, u bilgiyi gncelledi gibi..)
INITIAL SIZE : Alacak olan dosyann balangta ne kadar bir boyutta olacan sorar.
Burda ki ilk deerler varsaylan deerdir. stersem bu deeri ykseltebilirim ama Sql
server 2008 iin bu deer 3mbden, Sql Server 2012 iin bu deer 4mbden az olamaz.
Sqlde birden fazla string ifade bulunur. (char, varchar, nchar, nvarchar) Yanlarna
parantez ierisinde yazdm deer ka karakter girebileceimi belirtir. (var :
Variabledan gelir. Deiken karakter anlamn tar)
89 | S a y f a
varchar(10) : Belirlediim kadar boluk aar ve sylediim karakter saysndan az ka
karakter kullanrsam tuttuu alan o kadar karaktere drr ve daha az kaynak
harcar.
3.3. NORMALZASYON
SQL kullanlrken bir matematiki Sql tablo yapsn inceliyor.Ve tekrar eden verilerin
olduunu farkediyor. Bu verilerin kulland kaynak (yer) boa harcandndan daha
gzel bir yntem gelitiriyor.
nl Fransz bilim adam Hubert Francesci tarafndan ortaya atlan 3 esnek kuralna
uygun protonlar tarafndan entegre edilen bir sisteme sahiptir. Satr balarnda yaplan
tekrar veritabannda ayrtrma ilemine tabii tutularak depolanr.
1NF (Birinci Normal Form): Btn niteliklerin z alanndan (domain) ald deerler atomik
olmak zorundadr. likisel veri taban modelinin temel kuraldr ve her nitelik ancak
atomik veriler alabilir. rnein kitap tablosunda, birden fazla yazar olan kitap iin
yazar1, yazar2, yazar3 diye alanlar asaydk, bu kurala uymam olurduk. Byle bir
durumda, ayrca yazarlar tablosu da oluturarak kural inememi oluruz.
2NF (kinci Normal Form): Eer Rdeki herhangi bir birincil olmayan nitelik A, Rnin hibir
anahtar niteliine ksmi fonksiyonel baml deilse bu iliki emas 2NFdir denir. Burada
ksmi fonksiyonel bamllktan unu anlamalyz: Eer X --> Y geerli ise ve bir nitelik A Xin
eleman ise ve A, Xten karld halde sz konusu bamllk hala geerli ise burada bir
ksmi fonksiyonel bamllk vardr.
3NF (nc Normal Form): Eer Rdeki herhangi bir birincil olmayan (non-prime) nitelik
A, Rnin hibir anahtar niteliine geili (transitively) fonksiyonel baml deil ve hali
hazrda 2NFda ise, bu iliki emas R 3NFdadr denir. Burada geili fonksiyonel
bamllktan unu anlamalyz: Eer X --> Y ve Rnin herhangi bir anahtarnn altkmesi
olmayan nitelikler kmesi Z sz konusu ve de X --> Y ve Y --> Z birlikte geerli olmamaldr.
Facebook Mesajlama
Users UserID, Username, Email, Password
Messages MessageID, SenderID, ReceiverID, MessageBody, MessageDate
90 | S a y f a
Facebook Veritaban rnei
Users UserID, Username, Email, Password
UserDetails UserID, FullName, BirthDate, Gender, Location, About, School,
Work
Photos PhotoID, PhotoPath, UserID, PhotoTitle, PhotoDescription,
PublishDate
PhotoComments CommentID, PhotoID, UserID, Comment, CommentDate
Notes NoteID, NoteBody, UserID, NoteTitle, CreatedDate
NoteComments NoteCommentID, NoteID, UserID, NoteComment,
CreatedDate
Messages MessageID, SenderID, ReceiverID, MessageBody, MessageDate
WallShares WallShareID, UserID, WallShareBody, CreatedDate
WallShareComments WallShareCommentID, WallShareID, UserID,
CommentBody, CommentDate
Backup Type : Full : Databasein tamamen yedeini alr. Differential : Daha nceden
alnan bir yedek varsa o yedein stne yeni verileri yedekler. Transaction Log : Log
dosyasnn yedeini alr.
**********************
NOT : Backup alnrken varsaylan adresi silip kendi adresimizi vermemiz gerekir aksi
taktirde hata verir.
**********************
91 | S a y f a
Backup dosyasn darya kayt ettiimiz iin Device seilir. Burda backup aldmz
klasr ierisinde .bak uzantl dosyay seeriz. Gerekli ayarlamalar yaparak OK
butonuna bastmzda veritaban restore edilir.
**********************
NOT : Direk kopyalamaya alrsak hata verir. Bunun sebebi SQL serverin servisinin
almas ve bu dosyalar koruma altna almasdr. SQL servisini kapatarak kopyalama
ilemini yapabiliriz.
Servisi Durdurmak iin; Bilgisayarm Sa Tk > Ynet > Servisler > Sql Server
(MSSQLSERVER) olan durdururuz. Ama bu server durdurursak Sql Servera giri
yapamayz.
**********************
Schema and Data : Database emasn ve datalar birlikte script olarak karr.
92 | S a y f a
MS-SQLde Bizim kullandmz dil T-SQLdir.
Database
Tablolar
Diagram
View
Stored Procedure
Trigger
Bunlar olutururken DDL komutu kullanlr.
93 | S a y f a
Soyad nvarchar(50)
)
Master
Model
Msdb
Tempdb veritabanlar vardr.
Sistemden gelen veritabanlardr. Bunlar hi bir ekilde silmememiz gerekir. Bunlar
silmek demek SQL Server silmek anlamna gelir.
Model : Sql Server ile ilgili hazr yaplar bulundurur. rnein yeni bir database
atmda gelen initial size, autogrowth gibi bilgilerin default deerleri burdan gelir.
Msdb : Zamanlanm grevleri, grev olarak tanmlanan yaplar msdb ierisinde tutulur.
Tempdb : Geici olarak kullanlan, Ramde tutup aktarmaya allan bilgiler iin
kullanlr.
94 | S a y f a
Yukarda kullanlan * ifadesi belirtilen tablodaki tm kolonlar temsil etmektedir. *
ifadesini kullanarak tabloda bulunan btn kolonlar sorgu sonucunda
grntleyebilirim.
rnek Sorgu
--Urunler tablosunda urunid, urunadi, fiyati, stoktaki miktari bilgilerini cekmek icin
Select
Products.ProductID,
Products.ProductName,
Products.UnitPrice,
Products.UnitsInStock
FROM Products
Yukarda ki rnekte * yerine kolon isimlerini belirleme ilemini yaptk. Belirtilen tabloda,
belirlediimiz kolonlarn sorgu sonucunda grntlenmesini saladk.
Anlatlacak rnek
--Veri ekme ileminde daha kolay yntem olan tabloya isim vermek
Select
p.ProductID,
p.ProductName,
p.UnitPrice,
p.UnitsInStock Son kolondan sonra , eklenmez
FROM Products p Products tablosuna p diye isim veririz.
Bilgi : Sql kodlarn yukardaki formatta yazmak zorunda deiliz. Ama sqlde intellisense
destei ok iyi olmadndan kodlar okumam yazmam ve anlamam zorlaacandan
yukardaki formatta yazlmasn tavsiye ederim.
SQL pular
Tools>Options>Text Editor > All Languages > Word Wrap seersek satr sonuna gelince
alt satra geer.
Tools>Options>Text Editor > All Languages > Line Numbers satr numaralarn aar
95 | S a y f a
rnek Sorgu
--Tedarikciler(Suppliers) tablosundan Sirket Adi(CompanyName), Yetkili Kisi(ContactName),
Telefon(Phone), Sehir(City), Ulke(Country) ve Adres(Address) bilgilerini getiren sorgu
SELECT
s.CompanyName,
s.ContactName,
s.Phone,
s.City,
s.Country,
s.Address
FROM Suppliers s
Yukardaki sorguda Adress szcnn renginin mavi olduu grlmekte, bu renk sql
de tanml olan yaplarn rengidir. Address kelimesi sqlde tanml olduu iin rengi mavi
kmaktadr. Yukarda ki sorgu alrken bir problem ile karlalmaz. Bu kelimenin
Sqlde tanml olan deilde, bizim oluturduumuz bir kelime olduunu belirtmek iin
Address kelimesini keli parantezler ierisine alabiliriz.
rnek Sorgu
--Tedarikciler(Suppliers) tablosundan Sirket Adi(CompanyName), Yetkili Kisi(ContactName),
Telefon(Phone), Sehir(City), Ulke(Country) ve Adres(Address) bilgilerini getiren sorgu
SELECT
s.CompanyName,
s.ContactName,
s.Phone,
s.City,
s.Country,
s.[Address]
FROM Suppliers s
96 | S a y f a
s.CompanyName as irket Ad', --Tek Trnaklar Sql'de string'dir.
s.ContactName 'Yetkili Kii', --As ifadesini kullanmadanda kolon ismi verebiliriz.
s.Phone as Telefon, --Trke karakter ve boluk kullanmadmzda tercih edilebilir
s.City as [Sehir], --Verilen ifadede trke karakter yok ve boluk varsa kullanlabilir
s.Country,
s.[Address]
FROM Suppliers s
3.5.4.3. SELECT SORGULARI (Where And, Or, Between, In, Not In)
Listelemek iin kullanlan select sorgularnda filtrelemeler yapabiliriz. Belirli deer
aralklarnda bulunan sonular gstermek iin kullanlan Sql sz dizimleri
bulunmaktadr.
WHERE
rnek Sorgu
--Fiyat 20$'dan az olan urunleri getiren sorgu
SELECT
*
FROM Products p
WHERE p.UnitPrice < 20
rnek Sorgu
--Fiyat 20 ile 50 arasnda olan rnlerin urunadi, fiyat bilgilerini getiren sorgu
SELECT
*
FROM Products p
WHERE p.UnitPrice > 20 AND --20 Dahil Deil
p.UnitPrice < 50 --50 de Dahil Deil
97 | S a y f a
nemli : Sql'de String ifadeler iin 'tek trnak' kullanlr.
3.5.4.6. IN
Belirtilen kolon ieriinin ierisinde belirtilen deerlerin bulunup bulunmadn kontrol
eden sz dizimidir. Kontrol edilen hcrenin ierii, IN ierisinde belirtilen deerlerden bir
tanesine eitse listeleme ilemi yaplr. Select sorgularnda, Where komutu ile birlikte
kullanlr.
98 | S a y f a
c.CompanyName,
c.ContactName,
c.City,
c.[Address]
FROM Customers c
WHERE c.City NOT IN ('London', 'Paris', 'Madrid', 'Berlin')
3.5.4.7. LIKE
Sqlde veriler ierisinde benzerlik sorgusu yapar. Verilen deerin, REGEX METOTLARINA
gre veri ierisinde bulunup bulunmadn kontrol eder. Select sorgularnda, Where
komutu ile birlikte kullanlr.
REGEX rnekleri
99 | S a y f a
FROM Products p
Where p.ProductName LIKE 'c_a%'
3.5.4.8. ORDER BY
Sralama ilemlerini yapar, sralama ilemleri yazlan sorgudan sonra belirtilir. Order By
sz dizimi iki deer alr. Bu deerlerden biri ASC, dieri DESC deeridir.
100 | S a y f a
rnek Sorgu : Order By
--rnleri isimlerine gre sralama
SELECT
*
FROM Products p
ORDER BY p.ProductName
--2.Yntem
SELECT
o.OrderID,
o.OrderDate,
o.ShipCity,
o.ShipCountry
FROM Orders o
WHERE YEAR(o.OrderDate) = 1996
ORDER BY o.OrderDate DESC
101 | S a y f a
3.5.4.9. ZAMAN METOTLARI
Tarihler ile ilgili ilemleri yapmak iin kullanlan yardmc metotlardr. Verilen tarihden
istenilen deeri dndrebilirler. En ok kullanlan zaman metotlar aadadr.
rnek Sorgu
--01.09.1996 ile 31.12.1996 tarihleri arasndaki siparilerin SipariID, SipariTarihi, Sehir ve lke
Bilgilerini tarih kolonuna gre tersten sralayan sorgu
SELECT
o.OrderID,
o.OrderDate,
o.ShipCity,
o.ShipCountry
FROM Orders o
WHERE YEAR(o.OrderDate) = 1996 and
MONTH(o.OrderDate) > 9
ORDER BY o.OrderDate DESC
rnek Sorgu
--Doum gn bugn olan alanlarn adsoyad, doum tarihini ve nvann getiren sorgu
(AdSoyad bilgisi tek kolonda gelecek)
SELECT
e.FirstName + ' ' + e.LastName AS 'Ad Soyad',
e.BirthDate,
e.Title
FROM Employees e
WHERE MONTH(e.BirthDate) = MONTH(GETDATE()) and
DAY(e.BirthDate) = DAY(GETDATE())
3.5.4.10. AGGREGATE FUNCTION Btnleik Sorgular
SUM() : Toplama Fonksiyonu. Tm deerlerin toplam sonucunu elde eder.
102 | S a y f a
rnek Sorgu
--u ana kadarki toplam ciro / (Order Details Tablosu) Fiyat*Adet*(1-indirim)
SELECT
SUM(od.Quantity * od.UnitPrice*(1-od.Discount)) AS 'Toplam Ciro' --Bana SUM
yazmazsak her kolondan gelen deeri yazdrr.
FROM [Order Details] od
--2.Yntem
SELECT TOP 1
p.UnitPrice
FROM Products p
Order By p.UnitPrice DESC
103 | S a y f a
FROM Products p
Fiyat ortalama fiyatn altnda olan rnleri listeleyen bir sorgu yazmak istediimizde, bu
sorgunun dinamik olmasn isteriz. Aadaki rnekleri inceleyerek Sub Query kullanmn
inceleyebilirsiniz.
rnek
--rnlerin ortalama fiyat bilgisi
SELECT
AVG(p.UnitPrice) AS 'Ortalama Fiyat'
FROM Products p
Yukardaki sorgu syntax olarak hata vermez ama mantksal olarak hataldr.
104 | S a y f a
FROM Products p
Yukardaki kod ile ortalama fiyat hesaplatp aaya sonucunu yazabiliriz. ama bu
bizim iin dinamik olmaz.
Sub query kulanarak, fiyat ortalama fiyatn altnda olan rnleri listeleyelim.
--Alt sorgular performans olumsuz etkiler ama kullanmamz gereken durumlar olur.
rnek : Top
--En pahali 3 urunu getiren sorgu
SELECT TOP 3
*
FROM Products p
Order By p.UnitPrice DESC
rnek : Distinct
--Hangi ulkelere is yapiyoruz
SELECT DISTINCT
105 | S a y f a
c.Country
FROM Customers c
rnek : Top
--Ilk ise aldigim calisanim hangisi
SELECT TOP 1
*
FROM Employees e
WHERE e.HireDate IS NOT NULL
ORDER BY e.HireDate ASC
3.5.4.13. GROUP BY
Aggregate Functionlardan dnen deeri kolonlara gre paralamak(gruplamak)
iin kullanlr. Dnen deerler belirtilen kolonlara gre paralanarak tablo oluturulur.
Aggregate Function kullandmzda, sorgu sonucunda birden fazla kolon
grntlemek istersen bir hata ile karlarz. Bu hata bir kolonda tek deer, dier
kolonda birden fazla deer dndnden kaynaklanmaktadr. Bizim verileri tablo
yapsnda gstermek iin Aggregate functiondan dnen deeri kolona gre
paralamamz gerekmektedir. Aggregate Function dnda kalan tm kolonlar Group
By da belirtilmek zorundadr.
Anlatlacak rnek
--Kategoriye gore urun sayilarini getiren sorgu
SELECT
p.CategoryID,
COUNT(*) as 'UrunSayisi'
FROM Products p
GROUP BY p.CategoryID
rnek
--Kategoriye gore urun sayilarini getiren sorguda iki kolon kullanmak
SELECT
p.CategoryID,
p.ProductName,
COUNT(*) as 'UrunSayisi'
FROM Products p
GROUP BY p.CategoryID,
p.ProductName
106 | S a y f a
Aggregate Function dnda yazlan kolon isimlerinin her biri GROUP BYda belirtilmek
zorundadr.
rnek
--Ulkelere gore calisan sayisini veren sorgu
SELECT
e.Country,
COUNT(*)
FROM Employees e
GROUP BY e.Country
rnek
--Calisanlarin ID'lerine gore calisanlarin almis olduklari siparisleri getiren sorgu
SELECT
o.EmployeeID,
COUNT(*)
FROM Orders o
GROUP BY o.EmployeeID
rnek
--Her kategoride ucret bazli toplam ne kadarlik urun oldugu bilgisini veren sorgu
SELECT
p.CategoryID,
SUM(p.UnitPrice * p.UnitsInStock) as 'Gelir'
FROM Products p
GROUP BY p.CategoryID
3.5.4.14. JOIN (BRLETRME)
likisel tablolarda raporlama yaparken ID bilgileri nemsizleir. nk ID bilgileri anlaml
bilgiler deildir. Aadaki sorguyu yazp altrdmzda bize sorgumuzun altnda yer
alan resimdeki gibi bir sonu dnecektir.
rnek Sorgu
SELECT
*
FROM Products
107 | S a y f a
Yukardaki resimde bulunan SupplierID ve CategoryID kolonlar ilikisel tablolarda
anlaml bilgilerdir fakat raporlama yapldnda anlaml ifadeler olmaktan kar. Biz bu
raporu hazrladmzda inceleyen kii iin id deerleri bir anlam ifade etmez bu
sebepten, id yerine anlaml ifadeler olan Tedariki simleri, Kategori isimleri vb. bilgileri
raporlamamz gerekmektedir.
Birden fazla tablodan veri ekmek iin aada ki Join kullanlr. Join komutlar ve
aklamalarn aada bulabilirsiniz.
Left Join : Verdiim yne gre, o yndeki tm kaytlar getirir. Left Join tanmlandnda
sol taraftaki tm kaytlar getirir. Ynn verdiim taraftaki tm verileri getirir, dier
taraftaki bilgiler ierisinde null deer olabilir anlamna gelir.
Right Join : Verdiim yne gre, o yndeki tm kaytlar getirir. Right Join
tanmlandnda sa taraftaki tm kaytlar getirir. Ynn verdiim taraftaki tm verileri
getirir, dier taraftaki bilgiler ierisinde null deer olabilir anlamna gelir.
rnek Sorgu
--Calisanlarin ID'lerine gore calisanlarin almis olduklari siparisleri getiren sorgu
SELECT
o.EmployeeID,
COUNT(*)
FROM Orders o
GROUP BY o.EmployeeID
Aadaki resimde bulunan sorgu sonucu bizim iin anlaml bir ifade deildir.
1 numaral IDye sahip alan 123 sipari alm, Ama 1 numaral alan kim, bilgileri
neler id deerleri bizim iin anlamsz olduundan raporlamalarda bu ekilde
kullanlamaz. Bu sonuta ID yerine isim soyisim yazdmzda daha anlaml bir sonu
elde edebiliriz.
108 | S a y f a
Syntax : Join lemleri
SELECT
<Tablo1Adi>.<KolonAdi>,
<Tablo1Adi>.<KolonAdi>,
<Tablo2Adi>.<KolonAdi>,
<Tablo2Adi>.<KolonAdi>
FROM <Tablo1Adi>
(INNER) JOIN <Tablo2Adi> ON <Tablo1Adi>.<KolonAdi> = <Tablo2Adi>.<KolonAdi>
Inner Opsiyoneldir.
Aada ki rnek alanlara gre sipari saysn veren sorgudur. ki farkl tablodan veri
ekerek anlaml sorgu sonular elde edebiliriz.
rnek Sorgu
SELECT
e.EmployeeID,
e.FirstName,
e.LastName,
COUNT(*) as 'Siparis Sayisi'
FROM Employees e
INNER JOIN Orders o ON e.EmployeeID = o.EmployeeID
GROUP BY e.EmployeeID,
e.FirstName,
e.LastName
ORDER BY 2 DESC
rnek Sorgu
--Kategori Adi, Tedarikci Adi ve Urun Adini getiren sorgu
SELECT
p.ProductName,
c.CategoryName,
109 | S a y f a
s.CompanyName
FROM Products p
INNER JOIN Categories c ON c.CategoryID = p.CategoryID
INNER JOIN Suppliers s ON s.SupplierID = p.SupplierID
rnek Sorgu
--Federal Shipping ile tasinmis(Shippers - Company Name) ve Nancy'nin(Employees -
FirstName) uzerine kaytl olan siparislerin CalisanID, Calisan Adi Soyadi, SirketAdi, SiparisID,
Siparis Tarihi, Kargo Ucretini getiren sorgu
SELECT
e.EmployeeID,
e.FirstName + ' ' + e.LastName as 'Full Name',
s.CompanyName,
o.OrderID,
o.OrderDate,
o.Freight
FROM Orders o
INNER JOIN Shippers s ON o.ShipVia = s.ShipperID
INNER JOIN Employees e ON o.EmployeeID = e.EmployeeID
WHERE s.CompanyName = 'Federal Shipping' AND
e.FirstName = 'Nancy'
rnek Sorgu
--En cok urun aldigimiz tedarikciyi(Suppliers) almis oldugumuz urun miktarna gore raporlayin
(Sirket Adi - Adet)
SELECT
s.CompanyName,
110 | S a y f a
SUM(p.UnitsInStock) as 'ToplamAdet'
FROM Suppliers s
INNER JOIN Products p ON p.SupplierID = s.SupplierID
GROUP BY s.CompanyName
ORDER BY 2 DESC
rnek Sorgu
--Her bir urunden toplam ne kadarlik satis yapilmis ve urun hangi kategoriye ait
(ProductName, CategoryName, ToplamSatis)
SELECT
p.ProductName,
c.CategoryName,
ROUND(SUM(od.Quantity * od.UnitPrice*(1-od.Discount)), 2) as 'Toplam Satis'
FROM Products p
INNER JOIN Categories c ON c.CategoryID = p.CategoryID
INNER JOIN [Order Details] od ON od.ProductID = p.ProductID
GROUP BY p.ProductName, c.CategoryName
rnek Sorgu
--Tost yapmay seven alanm getiren sorgu
SELECT
e.FirstName,
e.LastName,
e.Notes
FROM Employees e
Where e.Notes LIKE '%toast%'
111 | S a y f a
rnek Sorgu
--2. alanm hangi alanma bal ? (Patron, Personel) + Calisanlarin yasi
SELECT
calisan.FirstName + ' ' + calisan.LastName as 'Calisan',
patron.FirstName + ' ' + patron.LastName as 'Patron'
FROM Employees calisan
INNER JOIN Employees patron ON calisan.ReportsTo = patron.EmployeeID
Inner Join eleen deerleri bana getirir. Yani bir tarafta bir deer, dier tarafta null var
ise bana bu deeri getirmez.
112 | S a y f a
Cross Join : Btn olaslklar karlatrr. Performans ilemlerinde kullanlr. rnein bir
sipariler tablosu yaptmzda , ilk balangta sipariler tablosunda pek bi veri yoktur.
Ama zamanla iebilecek bir tablodur. Sipariler tablosuyla baka bir tabloyu cross
yaptmzda sorgunun performansn lebiliriz.
113 | S a y f a
3.5.4.15. HAVING
GROUP BY kullanlan sorgularda where yerine having kullanlr. Having kullandm da
paral deerleri where kriterine sokmay salar.
Where komutu ile Aggregate Fuctiondan dnen tek bir deeri paral hallerini
karlatrmaya sokamayz. Yukardaki satrda, GROUP BY kullanarak ProductNamee
gre deerleri paraladk. Paral deerin 1200den byk olup olmamasn
sorgulamamz gerek. in ierisinde GROUP BY varsa HAVING kullanmalyz.
114 | S a y f a
rnek Sorgu
--250'den fazla siparis tasimis kargo firmalarinin adlarini, telefon numaralarini ve tasidiklari
siparis sayilarini geriye donduren sorgu
SELECT
s.CompanyName,
s.Phone,
COUNT(o.OrderID) as 'TasinanSiparis'
FROM Orders o
INNER JOIN Shippers s ON o.ShipVia = s.ShipperID
GROUP BY s.CompanyName, s.Phone
HAVING COUNT(o.OrderID) > 250
Syntax : Insert
Insert Into <TabloAdi>
(<kolonadi>,<kolonadi>,<kolonadi>)
Values
(<Deger1>,<deger2>,<deger3>)
rnek Sorgu
--Kategoriler tablosuna yeni bir kayt ekleme
Insert Into Categories
(CategoryName,Description)
Values
('Yemekler', Yediimiz Pizza)
rnek Sorgu
115 | S a y f a
--Kargocular tablosuna yeni bir kargo firmas ekleme ilemi (Shippers)
Insert Into Shippers
(CompanyName,Phone)
Values
('MNG Kargo', '(503) 555-3335')
--Kontrol Ediyoruz
Select * from Shippers
rnek Sorgu
Insert Into Shippers
Values
('Aras Kargo','(503) 444-8598')
rnek Sorgu
--alanlar tablosuna kendimizi kayt edelim.
Insert Into Employees
Values
('Kurtbogan', 'Alp', 'Yazlm Uzman', 'Dr.', '09.06.1991', '09.06.2012', 'Beykoz', 'stanbul', '',
'542547', 'Turkey', '02458549862', '5485', NULL, '', 3, '')
3.5.4.18. IDENTITY ve SCOPE IDENTITY
Sqlde son eklenen kaytn idsini elde edebiliriz. ID bilgisine ulatmzda her bilgiye
ulamz anlamna gelir. Sqlde ID bilgisine ulamak bu yzden bizim iin yeterlidir.
Yeni bir kayt ekledikten sonra eklenen kaytn ID deerine ulamamz gerekir.
@@IDENTITY : Global alanda eklenen kaytn son idsini dndrr. @@ Sqlde Global
alan temsil eder.
rnek Sorgu
--Son eklenen kaytn bilgisini elde etmek
Insert Into Shippers
(CompanyName, Phone)
Values
('UPS', '51521512251')
116 | S a y f a
Select @@IDENTITY -- Scope identity ile ayn ii yapar. Fark bandaki @@ den gelir. @@ sql de
global alan temsil eder.
Syntax : Update
Update Products SET
ProductName = '<Guncellenecek sim>'
Where ProductID = <Guncellenecek ID> --art
rnek Sorgu
Update Products SET
ProductName = 'Chai rn gncellendi'
Where ProductID = 1
117 | S a y f a
Sorgumuzda birden fazla deeri update edebiliriz.
rnek Sorgu
Update Products SET
ProductName = 'Chai rn gncellendi',
UnitPrice = 5,
UnitsInStock = 200
Where ProductID = 1
3.5.4.20. DELETE
Veritabannda bulunan bir veriyi silmek iin kullanlr. Update sorgusu gibi kullanlrken
ok dikkatli olmak gerekmektedir. art belirtilmediinde, tablodaki tm verileri siler.
Kullanm Update sorgusu ile ayndr.
Syntax : Delete
DELETE FROM <TabloAdi>
Where <KolonAdi> = <Deger>
118 | S a y f a
Syntax : Declare
Declare @<degiskenadi> <degiskentipi>
Insert Into [Order Details] (OrderID, ProductID, UnitPrice, Quantity, Discount) Values (@sonid,
10, 95.25, 20, 0.75)
Syntax : Views
Creat VIEW <viewadi>
AS
<sorgu>
119 | S a y f a
--Sanal Tabloyu gerek bir tabloymu gibi kullanabiliriz.
Select
*
From vw_DumonSiparisleri d
Where d.OrderID > '10650'
Sorguyu gncellerken CREATE yerine ALTER kullanlr. CREATE yeni bir view olutururken
kullanlr.
120 | S a y f a
od.OrderID as 'SiparisID',
SUM(od.UnitPrice * od.Quantity *(1-od.Discount)) as 'SiparisBazliPara'
From [Order Details] od
Group by od.OrderID
) as T)
121 | S a y f a
(CategoryName,Description)
Values
('Kategorim', 'Aciklama')
rnek Sorgu
--Calisanlar tablosuna view olustur ve o tablo zerinden bir kayt ekle..
ALTER View vw_CalisanlaraKayitEkle
AS
Select
e.FirstName,
e.LastName
From Employees e
GO
FQN Yaps
[ServerName].[DatabaseName].[SchemaName].[ObjectName]
122 | S a y f a
Stored Procedureler gvenli yaplardr. Gvenli yaplar Database Altnda >
Programmabilty ierisinde bulunurlar. Gvenli olduklar iin almalar daha hzldr.
Gvenli yaplar olduklar iin bir Security ksmndan gemezler. Performans olarakda
biraz daha hzldrlar.
Syntax
--Create PROC olarakda kullanlabilir.
Create procedure <ProsedurAdi>
(--Parametre istiyosak istediimiz kadar parametre isteyebiliriz.
@<degiskenadi> <degiskentipi>
@<degiskenadi> <degiskentipi>
@<degiskenadi> <degiskentipi>
)
As
<Sorgu>
rnek Sorgu
--Dardan girilen kategori ad ve aklamaya gre kategoriler tablosuna insert ilemi yapan
prosedr.
GO
Create PROC prc_KategoriEkle
(
@katAdi nvarchar(50),
@aciklama nvarchar(MAX)
)
AS
Insert Into Categories
(CategoryName, Description)
Values
(@katAdi, @aciklama)
rnek Sorgu
--Shippers tablosunda UPDATE ilemi yapabilen bir sp olusturunuz.
GO
ALTER PROC prc_ShipperGuncelle
(
@guncellenecek nvarchar(50),
@companyname nvarchar(50),
@phonenumber nvarchar(50)
)
AS
UPDATE Shippers
123 | S a y f a
Set CompanyName = @companyname,
Phone = @phonenumber
Where CompanyName = @guncellenecek
GO
EXEC prc_ShipperGuncelle 'MNG Kargo', 'Yurtici Kargo', '(222) 444-5522'
rnek Sorgu
--Shippers tablosunda DELETE ilemi yapabilen bir sp olusturunuz.
GO
ALTER PROC prc_ShipperSil
(
@id int
)
AS
Delete from Shippers where ShipperID = @id
EXEC prc_ShipperSil 18
rnek Sorgu
--Shippers tablosunda INSERT ilemi yapabilen bir sp olusturunuz.
GO
Create PROC prc_ShipperEkle
(
@companyname nvarchar(50),
@phonenumber nvarchar(50)
)
AS
Insert INTO Shippers Values (@companyname,@phonenumber)
GO
EXEC prc_ShipperEkle 'MGN Kargo', '(555) 123-4466'
rnek Sorgu
--Dardan girilen miktara gre tm rnlere zam yapan prosedr.
GO
Create PROC prc_ZamYap
(
@miktar money
)
AS
UPDATE Products
Set UnitPrice += @miktar
GO
--altrmak iin alt satrdaki kodlar kullanlrz.
EXECUTE prc_ZamYap 5
GO
rnek Sorgu
--Disaridan girilen kategori adna gre rnleri listeleyen prosedr.
Create PROC prc_KategoriListele
(
@KategoriAdi nvarchar(50)
124 | S a y f a
)
AS
Select
*
From Products p
Inner Join Categories c On c.CategoryID = p.CategoryID
Where CategoryName = @KategoriAdi
GO
Execute prc_KategoriListele 'Beverages'
GO
rnek Sorgu
--Stok miktar dardan girilen iki deer arasnda olan rn fiyat yine disaridan girilen 2 deger
arasnda olan, toptanci firma(suppliers) adi disaridan girilen degeri barndran urunlerin,
urunadlarini,fiyatlarini,kdv eklenmis fiyatlarimi, stoktaki miktarini ve toptanci firma adlarini
getiren prosedr...
--Products, supplier,
--Dardan girilcek deerler (stok miktarlar, fiyatlar, toptanci firma adi,
--rnad, fiyat, kdv eklenmis fiyat, stoktaki miktarn ve topranci firma ad
GO
ALTER PROC prc_StokGosterimi
(
@minStok int,
@maxStok int,
@minFiyat int,
@maxFiyat int,
@SupplierName nvarchar(50)
)
AS
Select
p.ProductName,
p.UnitPrice,
p.UnitPrice * 1.18 as 'KdvliFiyat',
p.UnitsInStock,
s.CompanyName
From Products p
INNER join Suppliers s On s.SupplierID = p.SupplierID
WHERE (p.UnitsInStock > @minStok and p.UnitsInStock < @maxStok) and
(p.UnitPrice>@minFiyat and p.UnitPrice < @maxFiyat) and (s.CompanyName LIKE
'%'+@SupplierName+'%')
GO
Syntax
125 | S a y f a
IF(<sart>)
Begin
<islem>
End
Else
Begin
<islem>
End
rnek Sorgu
--Kargo irketlerimde Yurtici kargo diye bir irket varsa telefon numaras (222) 111-2233
seklinde gncellensin. Eer byle bir kayt yoksa kayt bulunamamaktadr mesaj ksn.
PRINT 'Merhaba Dnya' --Messages alanna mesaj yazdrmak iin kullanlr.
rnek Sorgu
--rnler tablosuna kategorisi yemekler olan bir rn eklenecek ve ardindan o urun iin 10248
orderidli bir rn detayi olusturulacak Eer rnn kategorisi veritabannda mevcut ise ilem
gercekletirilecek mevcut deilse bu iki ilem gerekletirilmeyecek
USE Northwind
IF NOT EXISTS (Select * from Categories where CategoryName = 'Yemekler')
BEGIN
Insert INTO [Order Details]
(OrderID, ProductID, UnitPrice, Quantity,Discount)
VALUES
(10248, 41, 20, 25,0)
END
ELSE
BEGIN
PRINT 'Hata'
END
GO
3.5.4.28. DNGLER
Sqlde sadece While dngs bulunmaktadr.
Syntax
WHILE (<sart>)
BEGIN
<Islemler>
126 | S a y f a
END
rnek Sorgu
--1 den 10 a kadar saylar kendi oluturdugumuz tabloya atmak.
DECLARE @tablom TABLE
(
Sayi int
)
DECLARE @sayac int
SET @sayac = 1
While(@sayac < 20)
BEGIN
Insert Into @tablom (Sayi) Values (@sayac)
Set @sayac +=1
END
--Tabloyu gstermem gerek
Select * from @tablom --Bunu yazarken stteki declare tablom satrn eklememiz gerekir.
SELECT GETDATE()
Syntax
CREATE Function <fonksiyonadi>
(
<degiskenadi> <degiskentipi>,
<degiskenadi> <degiskentipi>,
<degiskenadi> <degiskentipi>,
<degiskenadi> <degiskentipi>
)
RETURNS <GeriyeDonusTipi>
AS
BEGIN
<islemler>
return <GeriyeDonecekDeger>
END
127 | S a y f a
rnek Sorgu
GO
ALTER Function fnc_Toplama
(
@sayi1 int,
@sayi2 int
)
RETURNS int
AS
BEGIN
RETURN @sayi1+@sayi2
END
GO
--Kullanm
Select dbo.fnc_Toplama(5,10)
Select
p.ProductName,
p.UnitPrice,
ROUND(dbo.fnc_Toplama(UnitPrice,5),2) as 'ZamliFiyat'
from Products p
rnek Sorgu
--Girilen tarihe fre yas hesaplayan fonksiyon
GO
ALTER Function fnc_yashesapla
(
@yas date
)
RETURNs int
As
BEGIN
Return DateDiff(YEAR,@yas,GETDATE())
END
GO
rnek Sorgu
--Girilen isim soyisim ve irket adna gre bir mail adresi olusturan fonksiyon
GO
ALTER function fnc_EmailOlustur
(
@isim nvarchar(50),
@soyisim nvarchar(50),
@sirketadi nvarchar(50)
128 | S a y f a
)
Returns nvarchar(50)
As
BEGIN
return LOWER(@isim + '.' + @soyisim + '@' + @sirketadi + '.com')
END
GO
--Tabloda Kullanmak
Select
e.FirstName,
e.LastName,
dbo.fnc_EmailOlustur(e.FirstName, e.LastName, 'SirketAdi')
From Employees e
After : Sonra
Instead Of : Yerine
Syntax
Create TRIGGER <triggeradi>
ON <TabloAdi>
<OncemiSonramiBilgisiniVer> <islemturu(insert update delete)>
--Oncemi sonram olayna 2 farkl durum kullanabiliriz. After ve instead of(yerine)
As
<Islemler>
rnek Sorgu
--Siparis detaylar tablosuna bir kayt eklendiinde otomatik olarak girii yaplan siparis
detaynn stoktaki miktardanda dlmesini salayan trigger
GO
Create TRIGGER trg_StokGuncelle
ON [Order Details]
AFTER INSERT
As
Declare @proid int, @adet int
Select @proid = ProductID, @adet = Quantity from inserted
UPDATE Products
Set UnitsInStock -= @adet
Where ProductID = @proid
GO
rnek Sorgu
--Urunlerin tablosunda bir kayit silmeye calistigimizda urunu silmek yerine discountinued
degerini 1 yapan trigger
129 | S a y f a
GO
Create TRIGGER trg_Guncelleme
On Products
Instead Of Delete
AS
DECLARE @id int
Select @id = ProductID from deleted
Update Products
Set Discontinued = 1
where ProductID = @id
rnek Sorgu
--Kategoriler tablosundaki 10 nolu kayd koruma altna alan triger..
GO
ALTER Trigger trg_KategoriKoru
On Categories
Instead Of Delete
As
Declare @id int
Select @id = CategoryID from deleted
IF(@id = 10)
BEGIN
PRINT 'Silemezsin :)'
END
ELSE
BEGIN
Delete from Categories where CategoryID = @id
END
GO
--Silme lemi
Delete from Categories where CategoryID = 10
--Kontrol
Select * from Categories
rnek Sorgu
--Database e yeni tablo ekletmeyen trigger
GO
Create TRIGGER trg_DirenTablo
On DATABASE
FOR Create_Table --For dan sonra bir kelimelik hakkmz var alt tre ile yazmalyz.
AS
PRINT 'Yeni tablo oluturamazsnz. mza : direntablo'
ROLLBACK --Geri Sar
GO
Create Table Deneme2
(
Kolon1 nvarchar(50)
)
130 | S a y f a
3.5.4.31. TRANSACTION
Transaction ya hep ya hi mantgnda alr. Try catch entegre alan bir yapdr.
Syntax
BEGIN TRY
BEGIN TRAN <transactionAdi>
<islemler>
COMMIT TRAN <transactionAdi>
END TRY
BEGIN CATCH
ROLLBACK TRAN <transactionAdi>
END CATCH
Hata Frlatmak
--Hata Patlatma yntemleri
--1. Yontem
--Select 10/0
--2. Yontem
RAISERROR('Hata', 16,1)
rnek Sorgu
--2 idli musteriden 1000 tl dusup 1 nolu id ye sahip musteriye 1000 tl eklemek. Bunu gvenlik
altna almak.
USE BankaDb
BEGIN TRY
BEGIN TRAN trn
Update Musteriler
Set Bakiye -= 1000
Where id = 2
-----
--RAISERROR('Hata', 16,1) --Hata patlatrsak
-----
Update Musteriler
Set Bakiye += 1000
Where id = 1
PRINT 'Islem Basariyla Gerceklesti.'
COMMIT TRAN
END TRY
BEGIN CATCH
ROLLBACK TRAN trn
SELECT
ERROR_MESSAGE() as 'Hata Mesaji',
ERROR_LINE() as 'Hata Satiri',
ERROR_NUMBER() as 'Hata Numarasi'
END CATCH
rnek Sorgu
--rnler tablosuna kategorisi yemekler olan bir rn eklenecek ve ardindan o urun iin 10248
131 | S a y f a
orderidli bir rn detayi olusturulacak Eer rnn kategorisi veritabannda mevcut ise ilem
gercekletirilecek mevcut deilse bu iki ilem gerekletirilmeyecek
USE Northwind
IF NOT EXISTS (Select * from Categories where CategoryName = 'Yemekler')
BEGIN
Insert INTO [Order Details]
(OrderID, ProductID, UnitPrice, Quantity,Discount)
VALUES
(10248, 41, 20, 25,0)
END
ELSE
BEGIN
PRINT 'Hata'
END
GO
--TRANSACTION YONTEM
BEGIN TRY
BEGIN TRAN trn2
IF NOT EXISTS (Select * from Categories where CategoryName = 'Yemekler')
BEGIN
Insert Into Products
(ProductName, )
Insert INTO [Order Details]
(OrderID, ProductID, UnitPrice, Quantity,Discount)
VALUES
(10248, 41, 20, 25,0)
END
ELSE
BEGIN
RAISERROR('Hata', 16,1)
END
COMMIT TRAN trn2
END TRY
BEGIN CATCH
ROLLBACK TRAN trn
SELECT
ERROR_MESSAGE() as 'Hata Mesaji',
ERROR_LINE() as 'Hata Satiri',
ERROR_NUMBER() as 'Hata Numarasi'
END CATCH
INDEXlerde birer veritaban nesneleridir. Indexlerin mant; bir kitapda ierikler sayfas
yada kitap sonunda index sayfasnn olmas gibi dnebiliriz. Bu bilgi sayfalarnda kitap
ierisinde geen kelimelerin hangi sayfada olduunu bulabiliriz.
132 | S a y f a
SQL Server da biraz daha detayl bir mantk sz konusudur. Biz bir tablo oluturup veriler
girmeye baladmzda PK (Primary Key) attmz kolon bir index kolonu olur.
Bir tabloda PK kolonu yaptmzda o kolona gre bir indexleme yaplr. Datalarn
kendisi indexlenir.
Root Level ()
133 | S a y f a
Syntax
CREATE NONCLUSTERED INDEX <IndexAdi>
ON <TabloAdi>(<KolonAdi)>
rnek Sorgu
CREATE NONCLUSTERED INDEX ind_PostalCode
ON Customers(PostalCode)
Name : Index Ad
Fill Specificitions : Fill Factor sayfann doluluk oranna gre sayfalar. Life level yapsna
gre. (Sayfann doluluk oran kullanmna gre deiir.)
134 | S a y f a
DBCC SHOWCONTIG
Scan Density : Taranabilme says / Tarama Says olarak alglanr. Yani rnein; verileri
10 sayfada tarayabilirdin, ama 15 sayfada taradn gibi bir sonu karabiliriz. Bu da
indexlerin yava yava bozulmaya baladn bize gsterir ve indexleri yeniden
dzenlememiz gerekmektedir.
135 | S a y f a
Yukarda sunulan raporda Scan Densityde grdmz [2:5] ifadesi, bu tablodaki
tarama 2 sayfada yaplabilecek durumdayken, 5 sayfada yaplm anlamna gelir. Bu
ifade benim index yapmn bozulduunu gsterir. Locigal Scan Fragmentationda 20%
bir bozulma olduu grlyor.
Syntax
DBCC DBREINDEX ('<TabloAdi>', '<IndexAdi>', '<DolulukOrani>')
rnek
DBCC DBREINDEX('Order Details', '', 90)
136 | S a y f a
3.5.4.34. Grev Tanmlama
Sql Agent kullanarak yukardaki ilemi grev olarak atayabiliriz. Sql Server srmnz
uygunsa,
Management > Maintenance Sa tklayp > New Maintenance Plan seenei ile yeni
bir plan oluturabilirsiniz.
Verilen tablodaki Index bilgilerini dndren sistemde bulunan bir Stored Procedure
bulunmaktadr. Bu komutu kullanarak hzl ve kolay bir ekilde index bilgilerine
ulaabiliriz.
rnek
EXEC sp_helpindex 'Employees'
Not : EXEC sp_ yazldnda gelen stored procedureler sistemden gelen splerdir.
Security penceresinde bulunan Logins klasrne sa tklayp New Login diyerek yeni bir
kullanc tanmlayabiliriz.
137 | S a y f a
Yeni Login oluturma ekrannda kullancmz ile ilgili temel bilgileri veriyoruz. Kullanc ad,
authentication bilgisi ve varsaylan olarak gelen seili veritabann seiyoruz.
138 | S a y f a
User Mapping -> oluturulan kullancnn hangi veritabanlarna girilebilecei bilgisi verilir.
Seili veritabanndaki belirtli rolleri ynetebiliriz. Bu alana rol tanmlanp kendi
oluturduumuz rolde kullanabiliriz.
Servera login olacak kiinin Server Roln sysadmin yapldnda, verilen kstlamalarn
bir anlam yoktur. Sysadmin hereyin zerine kar ve kstlama yaplamaz.
Ado.Net
Veri taban ilemleri iin kullanacamz yapdr. Veri ekme, ekleme, gncelleme ve
silme ilemlerini yapabilmemize olanak salar.
139 | S a y f a
Veri ekme lemi iin aada ki admlar gerekletirilir.
1. Balanty olutur.
2. Sorguyu olutur.
3. Balanty a.
4. Sorguyu altr. (Veriyi elde et veya gnder)
5. Balanty kapat.
Ado.net in alabilmesi iin Sql Server Managament Studio nun ak olmasna gerek
yoktur. Yanlzca Sql giriinin (Servisinin alr durumda olmas) ak olmas yeterlidir.
Temel grevi, grsel olarak dndmzde bize MsSql ekranndaki Query sayfasn
amaktr. Bizden bekledii Server Name, Database Name, Username, Password
bilgileri ile Sql servisine balanarak sorgular altrabileceimiz balanty oluturur.
Sorgularn almas iin MsSQL Serverin ak olmasna gerek yoktur. Sqle giriin yani servisin
ak olmas yeterlidir.
4.1.2. Ktphaneler
4.1.2.1. System.Data.Common
Veriye eriim kaynaklarnda kullanlan sistemlere ynelik bir yapdr.
4.1.2.2. System.Data.Odbc
Open Database Connectivity mantna uygun yaplar ierir. Open Database
Connectivity standartlarna uygun yaplar ierir.
4.1.2.4. System.Data.Oledb
Her trl veritanna erimek iin kullanlan ana yapdr. Sql Client bu yapnn zellemi
halidir. OleDbde Connection nesnesi bulunur. zellemi yaplar (SqlClient,
OracleClient, MySqlClient gibi) Oledbden tremitir. Burda OracleClient
bulunmadndan, OracleClient ktphanesini internetten bulup projeye dahil
ettiimizde dier veritabanlarnda kullanabiliriz.
140 | S a y f a
4.1.2.5. System.Data.ProviderBase
Kendi balantm oluturmam iin bana yaplar sunar. rettiimiz bir database yaps
olursa bu namespaceden tanmlama yaplr.
4.1.2.6. System.Data.SqlTypes
Sqlde tanml olan, c sharp da tanml olmayan yaplar c sharp tarafnda birebir
kullanmak iin tanml olan yapdr. (money gibi..)
141 | S a y f a
Yntem 5 : ConnectionStringi ConfigurationFiledan ekmek
<!-- CONFIGURATION FILE (App.Config / Web.config) -->
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<connectionStrings>
<add name="Baglan" connectionString="Server=localhost; Database=Northwind; UID=sa;
PWD=123" providerName="System.Data.SqlClient" />
</connectionStrings>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
</startup>
</configuration>
ConnectionString
SqlConnection baglan = new
SqlConnection(ConfigurationManager.ConnectionStrings["Baglan"].ConnectionString);
4.2.2. SqlCommand
SQL tarafl olarak bir sorgu altrmak isterseniz referans alacanz nesne
"SqlCommand" nesnesidir.
142 | S a y f a
4.2.2.1. SqlCommand Property(zellikleri)
2.Yntem : StoredProcedure
SqlCommand cmd = new SqlCommand("StoredProcedureAdi", baglan);
cmd.CommandType = CommandType.StoredProcedure;
Tam Yap
SqlConnection baglan = new SqlConnection("Server=.; Database=Northwind; UID=sa;
PWD=123"); //Balant nesnemiz
143 | S a y f a
ResultSet : Select * from dediimizde dnen tablodur.
2.Yntem
bool sonuc = cmd.ExecuteNonQuery() > 0; //Etkilenen satr says 0'dan bykse true deer dner.
Buda ilemin baaryla gerekletiini gsterir.
144 | S a y f a
4.3.1. SqlDataAdapter
4.3.2. DataTable
rnek Uygulama
//Formun Load Eventi
private void Form1_Load(object sender, EventArgs e)
{
//Aadaki kod satrnda DataAdapter nesnesini oluturuyoruz. alacak sql sorgusunu
belirtiyoruz. Yazdmz sql sorgusunun hangi connection zerinden alacan belirliyoruz.
SqlDataAdapter dap = new SqlDataAdapter("Select * from Products", new
SqlConnection("Server=ALP1-BILGISAYAR\\EMPATI; Database=Northwind; UID=sa; PWD=123"));
DataTable dt = new DataTable();//Yeni bir DataTable nesnesi oluturuyoruz.
dap.Fill(dt); //Veritabanndan gelen ResultSet'i Oluturulan DataTable nesnesine dolduruyoruz.
dataGridView1.DataSource = dt;//DataTable' veri kayna olarak kullanyoruz.
}
145 | S a y f a
4.3.3. DataSet
Veri kaynandan elde edilen verileri, veritaban gibi bir modelde tutmak
istediimiz zaman bize yardmc olan yapdr.
Veritabanmzda tablo yaplar bulunmaktadr. Tablo ierisinde ki veriler satr ve
stunlarda bulunur. Projelerimizde veritabanndan veri ektiimiz zaman,
veritabannda bulduu verileri tablo halinde elde edebiliriz. DataSet nesnesi
ierisinde birden fazla DataTable bulundurarak bizim iin bir ok tabloyu tek bir
at altnda toplar. Yani DataSet ierisinde veritabanndan bamsz olarak,
veritabanmzdan gelen birden fazla tablo bulunabilir.
Dataset aracl ile veri tabanmzdaki verileri tabloda bulunduu yaps ile
uygulamamza aktarabiliriz. in gzel taraf bu verileri dataset'e bir kez
aktardktan sonra veriler sunucunun hafzasnda saklanacandan artk
database ile ilgimiz kalmamakta. Sunucunun hafzasnda bulunan bu verilerle
grntleme, silme, gncelleme gibi ilemlerimizi kolaylkla yapabiliriz.
rnek Uygulama
public Form1()
{
InitializeComponent();
}
//Global Tanmlamalar
DataSet ds = new DataSet(); //DataSet'e farkl eventlardan erimek iin Global tanmlama
yapyoruz.
146 | S a y f a
private void btnKategorileriListele_Click(object sender, EventArgs e)
{
//DataSet ierisindeki tabloya ulamak iin iki yntem vardr.
//--1.Yntem : Sra numaras ile
dataGridView1.DataSource = ds.Tables[0]; //DataSet ierisinde bulunan DataTable'lar dan
indexi 0 (dt Tablosu) olan
}
DataColumn; DataTableda bulunan kolon nesneleridir. DataTablea kod ile yeni bir
kolon ekleyeceimiz zaman kullanabiliriz.
DataRow; DataTableda bulunan her bir satrdr. DataTablea yeni bir satr eklemek
istediimizde veya DataTableda bulunan bir satr almak istediimizde DataRow
nesnesini kullanlrz.
147 | S a y f a
rnek Uygulama
public partial class Form5 : Form
{
public Form5()
{
InitializeComponent();
}
148 | S a y f a
dc_Telefon.DataType = typeof(string);
dc_Telefon.AllowDBNull = false;
dgvUyeler.DataSource = ds.Tables[0];
txtUyeAdi.Clear();
txtUyeTelefonu.Clear();
}
}
149 | S a y f a
ORM Object Relational Mapping
Entity Framework Microsoft tarafndan gelitirilen ve yazlm gelitiricilerin kat sql
sorgular yazmalarn ortadan kaldrarak bir ORM (Object Relational Mapping) imkan
salayan framework'tr. ORM ise ilikisel veritaban ynetim sistemlerine direkt olarak
mdahale yerine nesneler aracl ile mdahale edilmesini salayan bir kprdr
diyebiliriz.
Entity framework'n temel amac uygulama gelitiricinin data ilemleri ile ok har neir
olmadan uygulama tarafna odaklanmasn salamaktr. ok basit bir rnek olarak,
klasik ADO.NET uygulamalarnda bir balantnn almasndan ve kapatlmasndan
tamamen biz gelitiriciler sorumludur. Ancak entity framework kullandnzda bu tr
ilemlere siz karmazsnz. Sorgunuzu hazrlar ve entity framework aracl ile bunu
database'e iletirsiniz.
Avantajlar:
Nesneye ynelik bir programlama metodu sunuyor
Yazlan kodun veritaban eidiyle bamll yok (Oracle, SQL Server, MySQL vs)
SQL/JDBC bilmenize/yazmanza gerek kalmadan ok ksa bir zamanda ve de
ok daha az kod ile veritabanna bal bir uygulama yapabilirsiniz
ORM aralarnn ou Open Source (Ak kaynak kodlu yani bedava)
ORM aralar, programclara bir ok kolaylk salyor ve iinde barndrd ek
desteklerle bir ok sk grlen sorunlara zm sunuyor. (polymorphism,
caching, transaksiyon, vs)
Sektr iinde kullanlan Java rnlerinin ounda popler ORM aralar iin
ekler mevcuttur (Spring, Eclipse, vs)
Otomatik kod retmek ve ya SQL retmek iin bir ok rn mevcuttur
ok daha iyi test edilebilir kod yazmamz salar
150 | S a y f a
Dezavantajlar:
Performans sorunlar
Bilgi al-verii srasnda kontroln yzde yz sizin elinizde olmamas (retilen SQL
bazen ok farkl olabilir)
Kullanlan ORM aracn renmek iin harcanan zaman
Database First
Model First
Code First
Bir proje ierisinde veritabannn yansmasn almak iin aadaki admlar takip
edebilirsiniz.
1.Projeye sa tklyoruz.
2.Add > New Item diyerek yeni bir bileen eklemek iin pencereyi ayoruz.
151 | S a y f a
Edmx uzantl dosyamz oluturuyoruz. .edmx (Entity Data Model.net) dosyamz bizim
veritabanmzn yansmasnn alnd dosya olacaktr.
Add butonuna tkladktan sonra Entity Data Model Wizard penceresi alacaktr. Bu
pencereden Generate from Database seeneini seip Next butonuna tklyoruz.
152 | S a y f a
Bu pencereyi getikten sonra aada grdnz veritaban balant penceresi ile
karlaacaz.
1.Which data connection should your application use to connect to the database?
Bal altnda visual studionun veritabanna balanmas iin bir balant belirtmemiz
gerekmektedir. Eer visual studioda daha nce bir balant tanmladysak
ComboBoxdan bu balanty seebiliriz.
2.Eer balanty ilk kez tanmlayacaksak New Connection butonu ile yeni bir
balant tanmlama penceresi aabiliriz.
3.Balantmz setikten sonra oluacak Connection String de ifreyi saklamak ile ilgili
bilgi vermemizi istiyor. No seeneini iaretlersek Sql kullanc ifremiz Connection
Stringde yer almayacaktr. Yes seenei ise ifremizi connection stringe yazdracaktr.
5.Oluan Connection String web config dosyasna hangi isim ile kaydedilecek. smi
belirleyebiliriz.
153 | S a y f a
Next butonuna basarak devam ediyoruz.
Pluralize singularize generated object names -> Seenei tablo isimlerini class olarak
yazdrrken isimleri tekilletirmeyle ilgili bir ayardr. Bu seenek yanlzca ingilizce
veritabanlarnda alr. Aada bulunan Model Namespace bu yansmay proje
ierisinde kullanrken hangi Name Space ile kullanacamz belirtmemize izin verir.
Daha sonra Finish butonuna basarak yansmay kartabiliriz.
154 | S a y f a
Anlatlacak rnek- Listeleme lemi
NorthwindEntities db = new NorthwindEntities();
dataGridView1.DataSource = db.Customers.ToList();
Tablodan sonra ToList() metodunu eklersek dnen verilerin listesi DataSource olarak
kullanlabilir duruma gelir.
Ayrca Entity Framework Code First yaklamnda 15-22 tablo aras tablo
oluturmaya alldnda skntlar kartabiliyor. Entity Framework ok byk
projelerde kullanlamaz.
Category.cs
public class Category
{
public int CategoryID { get; set; }
public string CategoryName { get; set; }
public string Description { get; set; }
}
Product.cs
public class Product
{
public int ProductID { get; set; }
public string ProductName { get; set; }
public int UnitsInStock { get; set; }
155 | S a y f a
public decimal UnitPrice { get; set; }
public int CategoryID { get; set; }
}
Database First yaklamnda, Entities isimli bir class bulunuyordu.. Bu class bizim
tablolarmz ierisinde tutard. Database First yaklamnda Entities class kendi
oluuyordu fakat Code First yaklamnda bu class kendimiz yazmalyz. Bunun
iin aadaki NorthwindShopEntities isimli class oluturalm.
NorthwindShopEntities.cs
public class NorthwindShopEntities : DbContext //Miras Aldk
{
NorthwindShopEntities
public class NorthwindShopEntities : DbContext //Miras Aldk
{
/* Syntax */
156 | S a y f a
/* DbSet<KolonlarHangiClassaGoreOlusturulacak> <TabloAdiNeOlacak> { get; set; } */
Form1.cs
private void Form1_Load(object sender, EventArgs e)
{
NorthwindShopEntities db = new NorthwindShopEntities();
var result = db.Categories.ToList();
}
Yukardaki ilem aslnda bir veri ekmek ilemidir ama Code First yaklamnda
amacmz ilk altrmada kategorileri ekmek deil, tablolarmzn
oluturulmasn salamaktr. Projeyi altrdmzda ksa bir beklemeden sonra
form alacaktr. imdi Sql Server Management Studioyu ayoruz.
NorthwindShop isimli bir veritaban oluup olumadn kontrol ediyoruz.
Veritabannn olumadn gryoruz. Bunun sebebi ne olabilir?
157 | S a y f a
ConnectionString tanmlamasn ConfigSectiondan nce yapmamamz
gerekiyor.
App.config
<add name="NorthwindShopCon" connectionString="Server=ALP1-BILGISAYAR\EMPATI;
Database=NorthwindShopDB; UID=sa; PWD=123" providerName="System.Data.SqlClient" />
Appconfig ierisinde aada bulunan siyah renk ile yazlm, alt izili satr
silelim.
App.config
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<!-- For more information on Entity Framework configuration, visit
http://go.microsoft.com/fwlink/?LinkID=237468 -->
<section name="entityFramework"
type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework,
Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
requirePermission="false" />
</configSections>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
</startup>
<connectionStrings>
<add name="NorthwindShopDBCon" connectionString="Server=ALP1-
BILGISAYAR\EMPATI; Database=NorthwindShopDB; UID=sa; PWD=123"
providerName="System.Data.SqlClient" />
</connectionStrings>
<entityFramework>
<defaultConnectionFactory
type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" />
<providers>
<provider invariantName="System.Data.SqlClient"
type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
</providers>
</entityFramework>
</configuration>
Yukarda siyah ile iaretlenmi satrlar silebiliriz. Siyah ile iaretlenmi tanmlama,
Entity Framework tarafndan oluturulmu bir ifadedir. Bu ilemden sonra
balantmzda oluturduumuza gre artk NorthwindShopEntities.cs class
ierisinde gerekli dzenlemeyi yaparak veritaban oluturma ileminin localde
deilde, veritabannda olumasn salayabiliriz.
158 | S a y f a
ncelikle NorthwindShopEntities classnn Constructor metodunu oluturalm.
NorthwindShopEntities.cs
public class NorthwindShopEntities : DbContext //Miras Aldk
{
//Constructor Metot
public NorthwindShopEntities()
{
NorthwindShopEntities.cs
public class NorthwindShopEntities : DbContext //Miras Aldk
{
public NorthwindShopEntities():base("NorthwindShopDbCon") //Buradaki balanty
kullanacak
{
159 | S a y f a
Yukardaki resimde grdnz gibi ConnectionStringde belirttiimiz
veritaban ismi ile veritanmz, NorthwindShopEntities.cs classmzda
belirttiimiz tablo isimleri ile veritaban tablolarmz oluturuldu. Veritabanmz
ierisinde bulunan tablolarn kolonlar, classlarmz (Product, Category)
ierisinde bulunan propertyler ile belirlendi. Ama yukardaki tablolarn
grnmn Standart olarak kolon tiplerinin otomatik olarak belirlendiini
grrz.
160 | S a y f a
oluturulurken, propertyler ile ilgili ayarlar yapabilirim. Bu yer benim iin nesnesi
override ettiim yerdir. NorthwindShopEntities.cs ierisinde model
oluturulurken override ilemi gerekletirerek istediim zellikleri ayarlayabilirim.
NorthwindDbEntities.cs
//Model oluturulurken
protected override void OnModelCreating(DbModelBuilder modelBuilder) //Deer
ModelBuilder'da yakalanr
{
//rn ad bo geilemez, uzunluu 100 karakter olsun
//Model Builder ierisinde Product deerimizi yakaladk. Propertyleri ierisinden
ProductNamein maxLenght bilgisini belirledik ve bo geilemez olarak ayarladk.
modelBuilder.Entity<Product>().Property(p =>
p.ProductName).HasMaxLength(100).IsRequired();
}
161 | S a y f a
Yukarda grld zere veritabanmzda bulunan Products tablosunun
ProductName kolonunun DataType 100 olarak dzenlenmi ve bo geilemez
olmutur.
Peki biz veritaban oluturma ilemi srasnda her seferinde veritabann Sql Server
Management Studiodan silecekmiyiz? Tabi ki de hayr. Biz bu ilem iin bir
strateji belirleyerek alabiliriz. Oluturacamz strateji biz projemizi her
altrdmzda Veritabann silecek ve tekrardan oluturacaktr.
NorthwindDbEntities.cs
//Model oluturulurken
protected override void OnModelCreating(DbModelBuilder modelBuilder) //Deer
ModelBuilder'da yakalanr
{
//Stratejimizi belirleyelim. (Model deitiinde, veritabann sil ve modeli
tekrar olutur)
Database.SetInitializer<NorthwindShopEntities>(new
DropCreateDatabaseIfModelChanges<NorthwindShopEntities>());
162 | S a y f a
balantlarn kurulmam olmasdr. Oluturduumuz modeller zerinden
tablolarmz arasnda balantlarmz kurabiliriz.
Product.cs
public class Product
{
public int ProductID { get; set; }
public string ProductName { get; set; }
public int UnitsInStock { get; set; }
public decimal UnitPrice { get; set; }
public int CategoryID { get; set; }
//Mapping
public Category Category { get; set; }
}
Category.cs
public class Category
{
public int CategoryID { get; set; }
public string CategoryName { get; set; }
public string Description { get; set; }
163 | S a y f a
//Mapping
public List<Product> Products { get; set; }
}
164 | S a y f a
Tabiki de Mapping olarak belirlediim Category tipimi, Product propertyleri
ierisindeki CategoryID ile eletirdi. Eer biz CategoryID isminde bir property
oluturmasaydk bu kolonu tablolar oluturma srasnda kendi oluturacaktr.
1.Yntem - KEY
1.Yntem Key
[Key]
public int CategoryID { get; set; } //PK Kolonu
public string CategoryName { get; set; }
public string Description { get; set; }
Yukarda Primary Key olarak belirlemek istediimiz kolonu [Key] ile iaretliyoruz.
Bu iaretleme belirtilen propertynin PK kolonu olacan belirler. PK olarak
belirlenmi kolon otomatik olarak 1den balar ve 1 artar eklinde
belirlenecektir.
2.Yntem ID Eki
2.Yntem ID Eki
public int CategoryID { get; set; } //PK Kolonu
165 | S a y f a
Sradaki ilemimiz veritipini deitirmek olacaktr. Bu ilem iin
NorthwindShopEntities.cs dosyasn aalm. Dosyamz atktan sonra aada
ki kodu projemize ekleyelim.
NorthwindShopEntities.cs
public class NorthwindShopEntities : DbContext
{
public NorthwindShopEntities() : base("NorthwindShopDBCon")
{
}
public DbSet<Product> Products { get; set; }
public DbSet<Category> Categories { get; set; }
modelBuilder.Entity<Product>().Property(p =>
p.ProductName).HasMaxLength(100).IsRequired();
166 | S a y f a
saysn belirlemeliyiz. Aada bulunan iki satr NorthwindShopEntities.cs
dosyamza ekleyelim.
modelBuilder.Entity<Category>().Property(c=>
c.CategoryName).IsRequired().HasMaxLength(50);
modelBuilder.Entity<Category>().Property(c=> c.Description).IsOptional();
Srada yine ok kullanl olacak bir zellik var. Class ierisinde, veritabannda
oluturulmasn istemediim bir property eklemek istediimizde ne yapacaz?
Sadece kullanmak iin oluturacamz bu propertyi aadaki gibi
167 | S a y f a
ynetebiliriz. rnein; biz Description kolonunun veritabannda oluturulmasn
istemiyoruz.
modelBuilder.Entity<Category>().Ignore(c => c.Description);
Connected Mimari
DateTime baslangic = DateTime.Now;
SqlConnection cnn = new SqlConnection("Server =.;Database=Northwind;UID=sa;PWD=123");
SqlCommand cmd = new SqlCommand("Select * From Orders", cnn);
if (cnn.State == ConnectionState.Closed) cnn.Open();
SqlDataReader dr = cmd.ExecuteReader();
if (dr.HasRows)
{
while (dr.Read())
{
lstConnected.Items.Add(dr["OrderID"]);
}
}
cnn.Close();
DateTime bitis = DateTime.Now;
TimeSpan fark = bitis - baslangic;
lblConnected.Text = fark.Milliseconds.ToString();
Connected mimari her seferinde gncel veriyi adm adm veritabanndan ekecei
iin yava alacaktr.
168 | S a y f a
Disconnected Mimari
DateTime baslangic = DateTime.Now;
lblDisconnected.Text = fark.Milliseconds.ToString();
Entity Framework
private void btnEntity_Click(object sender, EventArgs e)
{
NorthwindEntities db = new NorthwindEntities();
DateTime baslangic = DateTime.Now;
lstEntity.DataSource = db.Orders.ToList();
lstEntity.DisplayMember = "OrderID";
DateTime bitis = DateTime.Now;
TimeSpan fark = bitis - baslangic;
lblEntity.Text = fark.Milliseconds.ToString();
}
Entity Framework ilk seferinde, yani yansma Cachee gelene kadar yava alr. Daha
sonraki almalarda entity framework hzlanacaktr.
Veritaban Ad : TelefonRehberiDB
Tablo Ad : Kisiler
169 | S a y f a
KisiID int
Adi nvarchar(50)
Soyadi nvarchar(50)
TelefonNumarasi nvarchar(50)
Insert lemi
//1.Yntem
Kisiler yeniKisi = new Kisiler();
yeniKisi.Adi = txtAd.Text;
yeniKisi.Soyadi = txtSoyad.Text;
yeniKisi.TelefonNumarasi = txtTelNo.Text;
db.Kisiler.Add(yeniKisi);
db.SaveChanges();//Deiiklikleri Kaydet
//2.Yntem
Kisiler yeniKisi = new Kisiler
{
Adi = txtAd.Text,
Soyadi = txtSoyad.Text,
TelefonNumarasi = txtTelNo.Text
};//object initialize
db.Kisiler.Add(yeniKisi);
db.SaveChanges();//Deiiklikleri Kaydet
//3.Yntem
db.Kisiler.Add(new Kisiler
{
Adi = txtAd.Text,
Soyadi = txtSoyad.Text,
TelefonNumarasi = txtTelNo.Text
});
db.SaveChanges();//Deiiklikleri Kaydet
5.2.5.2. SaveChanges
SaveChanges() : Kaydetme ilemini yapar. Bu satr ilemin sonunda yazlmazsa
veritabanna yazmay gerekletirmez st satrda db.TabloAdi.Add dediimiz ksm
tabloya eklemeyi yapar ama kayt etmez. Kayt yanlzca sanal bir tabloda yaplr
Db.SaveChanges metodunu grd zaman kayt ilemini gerekletirir.
Bunun Sebebi her seferinde veritaban balantsn amamak iindir. rnein birden
fazla ekleme ilemi yaparken, her biri iin ayr ayr veritabanna balant aacak
ekleyecek kapatacak. Ama bu yntem ile toplu ekleme, gncelleme ve silme
ilemlerinde tek bir kez veritaban balants kurarak tm ilemleri gerekletirmi
olurum.
170 | S a y f a
Not : Metotu if yapsnda art yazdmz alana yazp, CTRL + . diyerek Generate Metot
olarak oluturursak metodun geriye dn tipi bool olacaktr.
Gncelle Butonu
private void btnGuncelle_Click(object sender, EventArgs e)
{
if (KontrolEt())
{
guncellenecek.Adi = txtAd.Text;
guncellenecek.Soyadi = txtSoyad.Text;
guncellenecek.TelefonNumarasi = txtTelNo.Text;
db.SaveChanges();
VerileriCek();
}
else
{
MessageBox.Show("Lutfen gerekli alanlari doldurunuz.");
}
}
171 | S a y f a
Yukarda yaptmz ilem veriyi gncelleyecektir. Ama daha doru bir yntemi
bulunmaktadr. Bu yntem DataGridViewda kullanlmyor. Bunu DataGridViewda
kullanamamzn nedeni, ben Gncelle Butonuna ift tkladmda DataGridViewda
bulunan eski halini bir btn olarak elde edemiyorum.
Gncelleme lemi
Kisiler guncellenecek = db.Kisiler.Find(yeniHali.KisiID);
db.Entry(guncellenecek).CurrentValues.SetValues(yeniHali);
db.SaveChanges();
Birinci Yntemde; biz 20 kolonluk bir tabloda gncelleme yaptmzda ilk yntem tm
kolon bilgilerini veritabanna gnderecektir.
Silme lemi
int id = Convert.ToInt32(item.Cells[0].Value);
Kisiler silinecek = db.Kisiler.Find(id);
db.Kisiler.Remove(silinecek);
db.SaveChanges();
db.SaveChanges();
172 | S a y f a
VerileriCek();
}
}
5.2.5.5. Entity Framework WHERE Kriteri (Extension Metot)
Extension Metotlar kullanmak iin, lambda expression dediimiz bir yapy kullanrz.
SQLde kullandmz tabloya, tabloyu temsil edecek bir isim vermek gibi burdada
temsili bir isim veriyoruz.
k yleki dedikten sonra bool bir deer vermeliyim. Bu art salayan deerler
DataSource olarak verilecektir.
Yukardaki sorguda KategoriAd istendii iin sorgu ierisinde Inner Join olacaktr. Ama
Entity Framework bizi join ilemlerinden kurtaryor.
Lambda Expression ile Where kriteri verebiliyoruz. Extension Metot ynteminde sorguyu
istediim kadar uzatabilirim. . Ile istediim kadar extension metot ekleyebiliyoruz.
173 | S a y f a
5.2.5.6. Extension Metot Nedir?
Extension methods sadece static classlar iinde tanmlanabilen, parametre
tanmlamalarnda trden nce this ifadesini kullandmz static metodlardr.
rnekte olduu gibi eer (=>) opearatrnden nce yazlan i ifadesi bizim iin
setiimiz nesneyi ifade edecektir. Operatrn sanda bulunan ilem inin temsil ettii
deeri 2 ile arpacak ve sonucu dndrecektir.
5.2.5.6.2. Linq
Sql de ki sorgulama dilini Csharpa dktkleri halidir. Linq sadece Sql sorgular iin
deildir. Daha ok topluluk iin yaplm sorgulardr.
Linq to Object
Linq to SQL
Linq to Entity
rnek 1 : Fiyati 20 ile 50 arasinda olan rnlerin UrunId, UrunAdi, Fiyati, StoktakiMiktari
ve KategoriAdini getiren sorguyu yazalm.
174 | S a y f a
rnek 1 : Linq
var result = from p in db.Products
where p.UnitPrice > 20 &&
p.UnitPrice < 50 //&&
//p.Category.CategoryName == "Seafood"
select new
{
UrunID = p.ProductID,
UrunAdi = p.ProductName,
Fiyati = p.UnitPrice,
StoktakiMiktari = p.UnitsInStock,
KategoriAdi = p.Category.CategoryName
};
dgvSonuclar.DataSource = result.ToList();
175 | S a y f a
rnek 4 : Kategorisi Beverages olan ve UrunAdi:Kola, Fiyati:5.00,StoktakiMiktari:500 olan
urunu ekleyiniz.
dgvSonuclar.DataSource = db.Products.ToList();
Avantajlar
Dezavantajlar
Database ilemleri srasnda kontrol 100% olarak yazlmc tarafndan mdehale
edilemez
176 | S a y f a
Ntier Architecture ok Katmanl Yazlm Mimarisi
u ana kadar tek bir proje zerinden, kodlar bir btn olarak altrdk. Artk kodlarmz
yaptklar ilere gre paralamamzn zaman geldi. ok katmanl mimari kodlarn
yaptklar ilere gre katmanlara ayrlarak altrlmas prensibine dayanr. Ama,
projeyi gelitirilebilir klmak ve kolay ynetmektir.
rnein; bir web sitesi yaptnz. Web sitesi ksa srede ok fazla kullanc tarafndan
benimsendi. Ama artk kullanclar browser bamllndan kurtarmak istiyorsunuz.
Masast uygulamalar ve mobil cihazlar iin yeni projeler hazrlamanz gerekmekte.
Ancak bu farkl platformlarda alacak uygulamalar iin kodlarnz tekrar tekrar
yazmanz gerekmekte.. Web sitesinde yaptnz SQL balantlar, veri kontrolleri ve
classlar tekrar tekrar yazmanz gerekmektedir.
Katman says arttka proje karmak hale gelebilir. Biz rneklerimizde drt katmanl
mimari rneini inceleyeceiz.
177 | S a y f a
6.1. KATMANLAR
ok katmanl mimaride inceleyeceimiz katman says drtdr. Katman says
yazlmcnn isteine gre artabilir.
6.1.2. Entity
Modellerimizi ierisinde barndran katmandr. Projemiz ierisinde kullanlan
modellerimiz Entity katman ierisinde tanmlanr. Entity katman tm katmanlar
tarafndan tannmak zorundadr. Bunun sebebi tm katmanlarn Entity katmannda
bulunan modelleri kullanabilmesi iin, instance alma ilemi gerekletirmesidir.
BLL katmannn grevi ise, Presentation Layer tarafndan alnan ve BLL katmanna
gnderilen verileri kontrol etmek ve dzenlemektir. Gelen veriler doru formatta ve
gvenliyse, bu verileri DAL katmanna gnderir. Eer gelen veriler veritaban ilemine
girmeye uygun deilse, verileri DAL katmanna gndermeden metotdan kacaktr.
DAL katmannn grevi, BLLde kontrol edilmi olan gvenli ve doru formatta olan
verileri veritaban ilemine tabi tutmaktr. Gelen veriler BLL katmannda kontrol
178 | S a y f a
edildiinden, gvenli olduklar iin DAL katmannda kontrol edilmeden ileme alnr.
imdi drt katmanl mimariyi rnek ile inceleyelim.
ncelikle bir solution oluturuyoruz. Solution oluturmak iin Visual Studio programmz
altryoruz ve aadaki admlar takip ediyoruz.
Bir katman eklemek iin Solutiona sa tklyoruz > Add > New Project ile yeni bir proje
oluturma penceresini ayoruz.
179 | S a y f a
Class library oluturuyoruz, oluturduumuz class library projesinin adn
NorthwindEmployees.Entity olarak yazyoruz. Entity katman ierisinde Employee.cs
classn oluturuyoruz ve ierisinde bir Employee ile ilgili propertyleri kartyoruz.
Employee.cs
public class EEmployee
{
public int EmployeeID { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string Title { get; set; }
public string City { get; set; }
}
Entity katmanmza gerekli class ekledikten sonra, yeni class library projeleri
oluturuyoruz. Aada ki listede gerekli olan Class Libraryleri oluturalm.
180 | S a y f a
NorthwindEmployees.Entity (Oluturuldu)
NorthwindEmployees.BLL (Oluturulacak)
NorthwindEmployees.DAL (Oluturulacak)
Hemen ardndan DAL katmannda oluturuyoruz. Daha sonra DAL katman ierisindeki
Class1.cs dosyasn siliyoruz ve daha sonra yeni bir class ekliyoruz. Classmzn ad
DEmployee.cs olacak ekilde ayarlyoruz.
181 | S a y f a
Referans ekleme ileminide inceledikten sonra aadaki referans verme ilemlerini
yapabiliriz.
182 | S a y f a
WinUI katmanmz Entity katmanmzdan referans alr.
WinUI katmanmz BLL katmanmzdan referans alr.
WinUI katmanmz ierisinde, DAL katman ile dorudan bir balant yoktur. letiim BLL
katman zerinden salanr.
BLL katmanmz ile WinUI katmanmzdan gelen verilerin kontrollerini yaparz. Eer veriler
istenilen koula uygunluk salyor ise DAL katmanmza gnderilip, veritabannda
istenilen ilemi gerekletiririz. Eer BLL katmannda gelen veriler istenilen artlar
salamyorsa DAL katmanna gnderilmez.
183 | S a y f a
DAL katmanna gelen veriler BLL katmannda kontrol edildikten sonra DAL katmanna
geldiinden veriler zaten kontrol edilmi olduundan dolay DAL katman ierisinde
veriler kontrol edilmez. DAL katmannn grevi veritaban ilemlerini yapmaktr.
SqlDataReader dr = cmd.ExecuteReader();
if (dr.HasRows)
{
while (dr.Read())
{
184 | S a y f a
EEmployee gelenCalisan = new EEmployee();
gelenCalisan.EmployeeID = dr.GetInt32(0);
gelenCalisan.FirstName = dr.GetString(1);
gelenCalisan.LastName = dr.GetString(2);
gelenCalisan.Title = dr.GetString(3);
gelenCalisan.City = dr.GetString(4);
calisanListesi.Add(gelenCalisan);
}
}
baglan.Close();
return calisanListesi;
}
catch (Exception)
{
baglan.Close();
return calisanListesi;
}
}
Son olarakda WinUIda kullanc butona tkladnda gelen istei BLLe iletiyoruz. BLL
istei DAL katmanna iletecek, DAL katman veritabannda gerekli sorguyu altracak
ve sonucu Generic List olarak hazrlayacak. Hazrlanan Generic List (calisanListesi)
return komutu ile BLL katmanna cevap olarak dndrlecek. BLL katmanna gelen
cevap, BLL tarafndan WinUI katmanna gnderilecek.
185 | S a y f a
yapm olacak. WinUI gelen istei BLL katmanna iletecek, BLL katman varsa gerekli
kontrolleri yapacak ve istei DAL katmanna iletecektir. DAL katman BLLden geen
istein gvenli olduunu bildii iin hi bir kontrol yapmadan istei gerekletirecek ve
sonucu BLL katmanna gnderecektir. BLL katman DAL katmanndan gelen istei
WinUI katmanna gnderecektir. WinUI katmannn grevi gelen sonucu kullancya
gstermek olacaktr.
186 | S a y f a
Mesajlar gvenli bir ekilde gnderilmekte ve dijital btnl iin
imzalanabilmektedir. WCF mesajlama ilemi iin, istek/yant eklinde basit mesaj
desenlerinin yan sra iki kanal zerinden iletiim gibi daha karmak desenleri
desteklemektedir.
Dier nemli zellii ise Web Servisleri ile farkl platformlarda alabilmesidir yani WCF
bu standartlar uygulayarak Microsoft olmayan dier platformlarda oluturulmu
istemciler ya da servisler ile iletiim kurabilir. Service Oriented mimarisinin amac, farkl
platform ve diller ile iletiime geebilen bir yap oluturmaktr.
rnein C Sharp programlama dili ile hazrlanm bir seri ilemi, Java ile hazrlanan farkl
bir projede kullanmak istiyoruz. Proje ierisinde yazdmz kodlar servis olarak hazrlayp
farkl platformlara veri gnderebilecek bir hale getirebiliriz.
187 | S a y f a
srelerinin ve ihtiyalarnn daha ksa srede karlanmasn salamak,
Hazrlanan hizmetlerin farkl uygulamalar iin kolay ve pratik bir ekilde entegre
olmas,
Hizmet servisinin iyi bir ekilde ayarlanarak iyi bir performans salanmas,
WCFden nce
.Net Framework 3.0 ile birlikte hayatmza giren WCF, daha nce kullanlan modelleri
tek at altnda kullanmay hedeflemektedir. WCF den nce farkl yntemleri
kullanarak platformlar ve farkl diller ile yazlan programlar birbirleriyle
haberletirebiliyorduk.
.Net Remoting ayn a zerinde olan (intranet) bilgisayarlar aras balant kurmak iin
kullanlr. .Net Remoting kullanarak intranet bir balant oluturup ayn a ierisinde
bulunan bilgisayarlara veri gnderebiliyorduk. .Net Remoting zerinden irket
alanlarn intranet bir balant ile irket iin yaynlayabiliriz.
HTTP Web Service ise XML teknolojisini kullanarak internet zerinden btn
bilgisayarlara yayn yapabilir. WCFden nce .Net Remoting bir balant ile bir
uygulama gelitirdiimizde, ayn ii XML Web Service ile internetten yayna amak
istediimizde, birde XML Web Service uygulamas yazmamz gerekiyordu. Yukarda ki
rneimizden devam edelim. .Net Remoting ile birlikte bir de XML Web Service projesi
olutururuz.
188 | S a y f a
Yukarda yaptmz iki farkl servis ayn ilemi yapmaktadr. Ama bu ilemlerin ikisinide
gerekletirmek iin farkl yaplarda farkl projeler oluturmamz gerekiyordu. Yazlmc
iin bir kod tekrar ve zaman kayb sz konusuydu. Bunun dnda servisde bir
gncelleme yapldnda iki farkl projede bu gncellemeyi dzenlememiz
gerekiyordu.
Ama WCF ile birlikte gelen end point mant ile birlikte sadece bir ka dakikalk bir
konfigurasyon ile .Net Remoting ile hazrladmz projeyi XML Web Service projesine
evirebiliyoruz.
Web servisi, XML tabanl mesajlamay esas alr. Bu nedenle, eski entegrasyon
sistemlerinin aksine, haberleecek sistemlerin birbirlerinden haberdar olmas veya
platformlarnn uyumlu olmas gerekmez. rnein, Java ile gelitirilmi ve UNIX sistem
zerinde alan bir uygulama ile .NET ile gelitirilmi ve Windows iletim sistemi zerinde
alan bir uygulama, birbirlerinin alma ortamlarndan bamsz olarak, XML iletiim
standartlar araclyla iletiim kurabilir. Web servisinin en byk faydas budur.
XML Web Servisleri farkl platformalar arasnda ortak olarak kullanlabilen bileenlerdir.
XML Web Servisleri ile farkl platformlar arasnda veri aktarmada belli standartlar
sayesinden olduka kolaylamaktadr.
XML Web Servisleri standart olan protokoller zerinde alr. Bunlar, HTTP, XML, SOAP
standartlardr. XML Web Servisleri adndan da anlald gibi mesaj al verii iin XML
standardn kullanr.
XML in bir standart olmas ve herhangi bir platforma bal olmamas sayesinde XML
Web Servisleri farkl platformlarn konumasn, veri al veriini salar. Bu sayede
uygulama gelitirme aamasnda programclar farkl sistemleri kullanan uygulamalar
yazarken standartlar kullanarak ilerini daha kolay bir ekilde yapabilirler.
189 | S a y f a
7.2.1.2. .Net Remoting
Uzak balant kurmak iin kullanlr. Uzak bir bilgisayara balanr, eitli komutlar
gnderip cevap vermesini salayabiliriz. Bu komutlar cd srcs amak, ekran
grnts paylamak gibi ilemler yaplabilir.
Remoting; yazlmclara datk uygulama oluturma imkan sunar. Nesne, kar tarafta
etkileimde bulunaca nesneden transfer edilen mesajlara cevap vermek iin
kanallar kullanr.
TCP veya HTTP bazl iletiimlerde, taraflarn ayn zaman dilimi ierisinde alyor olmalar
gerekmektedir. Byle bir mesajlama srecinde taraflardan herhangibirin almamas,
aradaki balantnn kopmas gibi nedenlerden dolay tm iletiimin aksamasda
muhtemeldir.
190 | S a y f a
7.3.2. Service
Bir servis modlnn n tane endpoint destei vardr. Her endpoint n tane servis ilemi
yapmanza olanak salar.
7.3.3. Endpoint
stemci ve Servis arasndaki iletiimi salamak iin kullanlan balant noktasdr. Her
endpointin kendi adresi bulunur. Bir WCF servisini endpoint topluluu olarak
dnebiliriz.
7.3.4. Binding
Endpointin d dnya ile nasl haberleileceinin tanmland bir takm zellikler
btndr. Yani endpoint ile iletiimin (HTTP, TCP veya SOAP) nasl yaplacann
tanmland noktadr. Bir binding ile endpointin kullanaca security yada message
pattern gibi detaylar ayarlanabilmektedir.
7.3.8. Host
Genelde servisin yaam sresini kontrol etmek amacyla kullanlan bileendir.
7.3.9. Behaviour
Servisin alma zamanndaki fonksiyonelliini zenginletirerek gerekli parametrik
ayarlarn yapld bir tipdir.
191 | S a y f a
7.3.10. System-provided bindings
Baz senaryolar iin optimize edilmi binding topluluudur.
System.Runtime.Serialization
System.ServiceModel
192 | S a y f a
WCF Projesini oluturduumuzda karmza WCF ile ilgili yaplar kacaktr. Bu yaplar
WCFin alma mant hakknda bilgiler vermektedir. Biz burada bulunan hazr
classlar kullanmayacamz iin solution explorer ierisinde bulunan Service1 classn
ve IService interfaceini siliyoruz.
Daha sonra projemize yeni bir class ve interface ekliyoruz. Class adn Servisim.cs,
interface adn ise IServisim.cs olarak belirleyerek tekrardan oluturuyoruz. Class ve
Interface dosyamz oluturduktan sonra App.config dosyasnda bir dzenleme
yapmamz gerekmektedir aksi taktirde hata alrz. Aadaki deiiklii app.config
dosyasnda yapalm..
<service name="WCFSample.Service1">
193 | S a y f a
End point sonunda bulunan IService1 bilgisini IServisim ismiyle oluturduum
interface ile deitirdim. Burada bulunan end point yazdmz servisin hangi yol ile
(.Net Remoting, Http Web Service vb.) yayna alacan belirler.
Yukarda bir adet class ve interface kullandk, ite tam burada ok nemli bir bilgi
paylamamz gerekiyor. Servise alacak metotlar interface ierisinde tanmlanr.
Tanmladmz metotlar classa implament edildikten sonra gvdesi doldurulur.
IServisim.cs
interface IServisim
{
int SayiTopla(int sayi1, int sayi2);
}
IServisim.cs
[ServiceContract] //Interface'in servise alacan belirledik.
interface IServisim
{
[OperationContract] //Bu metodun servisin bir operasyonu olduunu belirledik.
int SayiTopla(int sayi1, int sayi2);
}
194 | S a y f a
Tanmladmz interfacei Servisim.cs dosyas ierisine implament edelim ve
metodumuzun gvdesini dolduralm.
Metodumuzun ieriini hazrladk. Daha nce WCF projesinin aslnda bir Class Library
olduundan bahsetmitik. Hatrlacanz zere OOPde Class Library projelerinin
altrlabilir (Executible) olmadn anlatmtk. Bu durum proje ierisine eklenen
ktphanelerden dolay WCF projesi iin geerli deildir. WCF projesini altrdmzda
WCF Test Client adnda bir test ekran alacaktr. Bu test ekrann kullanarak
servisimizin ierisinde yazdmz operasyonlarn alp almadn test edebiliriz.
195 | S a y f a
Metodumuzun zerine ift tklyoruz. Aada alan pencere yardmyla metodumuzu
test ediyoruz.
Aadaki resimde test ekranyla ilgili detayl bilgileri grebilirsiniz. Name kolonunda
istenilen parametrelerin isimleri bulunmaktadr. Value kolonunda ise bu parametre
gnderilecek olan verileri girebiliriz. Eer parametre almayan bir servis operasyonu
tanmladysak, parametre ekrannda bir bilgi girii istemeyecektir.
Type kolonunda ise, parametre olarak gndermemiz gereken bilgilerin veri tipleri
bulunmaktadr. Burada bulunan veri tipleri metod ierisinde belirlediimiz
parametrelerin veri tipleridir.
196 | S a y f a
7.4.1. SOAP Nedir
SOAP (Basit Nesne Eriim Protokol) datk uygulamalarda ve web servislerinin
haberlemesinde kullanlmak zere tasarlanan, istemci/sunucu mantna dayal bir
protokoldr.
Metot arm
Cevap Mesaj
Hata Mesaj
197 | S a y f a
7.4.4. WCF Binding
198 | S a y f a
199 | S a y f a
WINDOWS AZURE
8.1. Windows Azure Nedir?
rnek olarak Azure ile verilerini Microsoft veri merkezleri zerinden altran ve
saklayan bir internet uygulamas hazrlayabilirsiniz.
Windows Azureu, verileri kurum ierisinde (yani genel bulut dnda) kullanan
uygulamalar iin sadece veri depolamak amacyla da kullanabilirsiniz.
200 | S a y f a
Platform pek ok hizmet sunduundan tm bunlar ve ok daha fazlas
mmkndr. Bunlardan herhangi birisini gerekletirebilmek iin temel bilgileri
anlamanz gerekmektedir.
Bulut biliimi NIST (ABD Ulusal Standartlar ve Teknoloji Enstits) ise u ekilde
tanmlanmaktadr; Bulut biliim, dk ynetim abas veya servis salaycs
etkileimi ile hzl alnp salverilebilen ayarlanabilir biliim kaynaklarnn paylalr
havuzuna, istendiinde ve uygun bir ekilde a eriimi salayan bir modeldir.
Private Cloud: irket bnyesinde oluturulmu sunucular ile verilen bulut hizmetidir.
Community Cloud; Burada bulut biliim alt yaps belirli kurum ve ortak hareket eden kurulular
tarafndan paylalmaktadr. Topluluk yeleri uygulama ve verilere eriebilmektedir.
Hybrid Cloud; Bir irketin verilerin gvenlii ve benzeri nedenlere gre hem public hemde
private cloud kullanmas ile ortaya kan yapdr.
201 | S a y f a
8.2. Windows Azure un Bileenleri
202 | S a y f a
8.3. Bulut Biliim
203 | S a y f a
8.4. Gvenlik
Dzeltme
204 | S a y f a
Kullanclar ayn zamanda Sanal Makinelerinde bulunan i ortaklarnn kt
amal yazlmdan korunma zmlerini de altrabilirler.
zin verildiinde, eriim dikkatli bir ekilde ynetilir ve gnle kaydedilir. Kullanc
verilerini depolayan sistemlere veri merkezi eriimi, kasa ilemleriyle sk bir ekilde
de denetlenir.
zolasyon
ifreli iletiimler
zel balant
Kullanclar Azure veri merkezleriyle zel bir balant kurup trafiklerini Internet
dnda tutmak iin ExpressRoute'u kullanabilir.
Veri ifreleme
205 | S a y f a
Azure AES-256'ya kadar ok eitli ifreleme zellikleri salar ve kullanc
ihtiyalarna en uygun yntemleri uygulama esnekliini sunar.
Kimlik ve eriim
Szma Testi
Bir bulut platformunun dikkat eken ynlerinden birisi yksek performansl biliim
(HPC) gcdr.
HCP nin temel yapsnda ayn kodlar, ayn anda birden fazla makine zerinde
altrabilmesi yatmaktadr.
HPC Scheduler ayrca Monte Carlo simlasyonlar gibi skc paralel olarak
adlandrlan uygulamalarla da kullanlabilir.
206 | S a y f a
Hangi problem zerinde allrsa allsn salayaca deer ayndr: HPC
Scheduler, birok Windows Azure sanal makinesi zerinde paralel biliim
programlamas gibi karmak bir sorunu zer.
207 | S a y f a
8.7. Sanal Makineler
ster standart ister sizin sunacanz bir imaj ile talep tabanl sanal makine
oluturma yetenei ok yararl olabilir. Bu sanal makinenin saat ba
cretlendirilebilmesi ise daha da yararldr.
Windows Azure Virtual Machines de genelde Hizmet olarak Altyap (IaaS)
olarak tanmlanan bu yaklam size sunar.
Bunun ardndan VM'in alt her saat iin cret dersiniz. ekil 2'de de
gsterildii gibi Windows Azure Virtual Machines standart VHDlerden oluan bir
galeri sunmaktadr.
Bunlar ierisinde Windows Server 2008 R2, Windows Server 2012 ve SQL Server
ile Windows Server 2008 R2 gibi Microsoft tarafndan sunulan seenekler ve
ayrca Microsoft i ortaklar tarafndan sunulan Linux imajlar yer alr.
208 | S a y f a
maj nereden gelirse gelsin bir VM alrken yaplan deiiklikleri kalc bir ekilde
kaydedebilirsiniz. Ayn VHD'den bir daha bir VM oluturduunuzda kaldnz
yerden de devam edebilirsiniz.
Bunun iin Windows Azure VM'leri ierisinde Active Directory'yi altrarak bulut
zerinde Windows etki alanlar yaratmak mmkndr.
Bulut biliim iin bu genel yaklam pek ok farkl problemi zmek amacyla
kullanlabilir. Hangisini seeceiniz size bal.
209 | S a y f a
8.8.1. SQL Database
Windows Azure ilikisel depolama iin SQL Database'i salar. Buna atomik
ilemler, verilere birden ok kullanc tarafndan e zamanl eriim ve veri
btnl, ANSI SQL sorgular ve bilinen bir programlama arac da dahildir.
SQL Server gibi, SQL Database'e de Entity Framework, ADO.NET, JDBC ve dier
bilinen veri eriimi teknolojileri ile eriilebilir.
Ayrca T-SQL dilinin byk bir ksm ve SQL Server Management Studio gibi SQL
Server aralar da desteklenir.
SQL Server (veya bir baka ilikisel veri taban) kullanmn bilen herhangi birisi iin
SQL Database'in de kullanm basittir.
Fakat SQL Database sadece bulut ierisindeki bir DBMS deil bir PaaS
hizmetidir. Halen daha verilerinizi ve verilerinize kimin eritiini siz kontrol edersiniz
fakat SQL Database, donanm altyapsn ynetmek ve veri tabann ve iletim
sistemini gncel tutmak gibi ynetim ilerinin byk ksmn sizin adnza yapar.
Bu seenek ok byk verilerle alan veya daha iyi performans iin veriye
eriim taleplerini birden ok sunucu arasnda datmas gereken uygulamalar
iin yararldr.
8.8.2. Tables
Yazl verilere hzl eriim gerektiren bir Windows Azure uygulamas oluturmak
istiyorsunuz ve diyelim ki bu veriler byk boyutlarda fakat bu veriler zerinde
karmak SQL sorgularnn yaplmas gerekmiyor.
rnein her bir kullancnn mteri profil bilgilerini saklayacak bir tketici
uygulamas hazrladnz varsayalm.
210 | S a y f a
Bu da tam Windows Azure Tables'n kullanlabilecei bir alandr. smi sizi
artmasn bu teknoloji ilikisel depolama sunmuyor. (aslnda anahtar/deer
depolama olarak adlandrlan bir NoSQL yaklam).
Buna karn Windows Azure Tables, dize, bilgi ve tarihler gibi bir uygulamann
eitli trlerdeki zellikleri saklamasna izin veriyor.
Uygulama da grupla ilikili zgn bir anahtar sunarak o grubun zelliklerini elde
edebiliyor.
rnein videolar veya yedekleme verileri veya dier ikili bilgileri saklayan bir
uygulama basit ve ucuz depolama iin Blobs'u kullanabilir.
Uygulama sradan Windows belgelerini grr fakat ierikleri gerekte bir blob
ierisinde saklanr.
211 | S a y f a
Internet Information Services'n (IIS) kullanld bu modelde ynetilen bir internet
ortam sunulur.
Mevut bir IIS internet sitesini Windows Azure Web Sites zerine deitirmeden
tayabilir veya bir yenisini direkt bulut zerinde oluturabilirsiniz.
Bir internet sitesi altnda rnekleri dinamik olarak ekleyebilir veya kaldrabilir
ve bu srada taleplerle ilikili yklerin dengelenmesi iini Web Sites'a
brakabilirsiniz.
Windows Azure Web Sites hem gelitiriciler hem de internet tasarm ii yapan
ajanslara yarar salamas amalanmtr.
Gelitirme asndan, ilikisel depolama iin SQL Database ve (bir Microsoft
orta olan ClearDB ile) MySQL'e ilave olarak .NET, PHP ve Node.js, destei
sunuyor.
8.10. A letiimi
212 | S a y f a
Windows Azure ABD, Avrupa ve Asya da bulunan veri merkezlerinde alyor.
Bir veya birden fazla Windows sunucusunu belli bir Windows Azure
uygulamasna balamak iin Windows Azure Connect ten
yararlanabilirsiniz.
Bulut VM' lerine kendi IP v4 adreslerinizi atayacanz iin kendi anz zerinde
grneceklerdir. Bu sayede iletmenizdeki kullanclar VM' ler ierisindeki bu
uygulamalara yerelde alyormucasna eriecektir.
8.10.2. Connect
Connect, bir Windows Azure uygulamas ve Windows altran bir grup
bilgisayar arasnda gvenli bir balant kurmak iin basit bir yol sunar.
213 | S a y f a
8.10.3. Traffic
Uygulamann sahibi kullanc taleplerinin veri merkezlerine nasl ynlendirilecei
konusundaki kurallar belirler ve ardndan Traffic Manager bu kurallar uygular.
8.11. Kimlik
ou uygulamann yapt iler arasnda kimlik ile almak yer alr. rnein bir
kullancnn kim olduunu bilmek uygulamann o kullanc ile nasl etkileime
geeceine karar vermesine imkn verir.
214 | S a y f a
Ayrca kullanc bilgilerinin, kurum ierisindeki yerel anzda alan Windows
Server Active Directory ile eitlenmesine izin vermektedir.
8.12. Medya
8.13. Uygulamalar
Sanal Makine:
Portal a giri yaptktan sonra, VIRTUAL MACHINES ya da sol alt tarafta
bulunan NEW seeneini tklayarak sanal makine oluturma ilemine
balayabilirsiniz.
215 | S a y f a
216 | S a y f a
Karmza kan seenekler den QUICK CREATE seeneine tkladktan sonra
ilgili alanlar doldurduktan sonra hzl bir ekilde sanal makinemizi oluturabiliriz.
Dier seenek olan FROM GALLERY ksm ise bize birden fazla seenek sunar.
Bu seenek bize dier iletim sistemleri kurulu sanal makinelerle alma imkn
sunar ve buna ek olarak kendi imajmz ykleyerek alma ortam sunmaktadr.
Bu admda almak istediimiz sanal makineyi seiyoruz. Buradaki ilemler
bittikten sonra bir sonraki adma geiyoruz.
217 | S a y f a
Bu admda ise makinemiz iin tanml bir bulut servisi varsa seebiliriz. Makinemiz
iin Dns ismi belirledikten sonra makinenin tutulaca datacenter lokasyonu ve
storage ayarlarn yaptktan sonra dier adma geiyoruz.
218 | S a y f a
Kurulum aamasndaki son adm da ise yaplandrma ve gvenlik iin ek olarak
sunulan eklentileri seip makinemizi olutura biliriz.
219 | S a y f a
Sanal makinemiz setiimiz ayarlar dorultusunda olumu ve kullanm iin
hazrdr.
Alt men den CONNECT e tklayarak makinemize balanabiliriz.
220 | S a y f a
Gelen ekranda balanty onaylayarak makinemizi kullanmaya balayabiliriz.
221 | S a y f a
8.14. Active Directory
Kimlik blmnde akladmz gibi uygulamalarnz ynetebileceiniz, sosyal
medya hesaplarnz gibi birok hesab tek bir yerden ynetebileceiniz bir
yapdr.
Sosyal medya hesaplarmz tek bir yerden ynetmeyi adm adm balatalm.
222 | S a y f a
Bu blmde yeni kullanclar ekleyip gruplar oluturabilir ve kullanclara
uygulamalar ekleyebilirsiniz. Bu blmde Application sekmesine tklayarak,
uygulama sayfasna yneliyoruz.
223 | S a y f a
Bu ksm da ikinci seenei seerek uygulama galerisinde hazr olan
uygulamalardan istediimizi hesabmza ekleyebiliyoruz.
224 | S a y f a
Hesabmza yklemek istediimiz uygulamay bulduktan sonra sa altta
bulunan onaylama butonuna tkladktan sonra, uygulama hesabmzla
etkileime geecektir.
225 | S a y f a
Karmza kan alr pencerede uygulamamza giri yaptmz kullanc ad ve
ifresini giriyoruz.
226 | S a y f a
Uygulamalarnz ekledikten sonra;
https://account.activedirectory.windowsazure.com/applications/default.asp
x
227 | S a y f a
Birden fazla kullanc ekleyerek, eklenmi olan uygulamalara atama yaparak
dier kullanclarn da hesaplarn ynetmelerini salayabilirsiniz.
228 | S a y f a
Bu blmde ihtiyalarmz dorultusunda yaplandrma ayarlarn yapyoruz.
Kullanc ad oluturduktan sonra hangi alan iin kullanacaksak ona gre seim
yapyoruz. Bu rnekte web zerinden alacak bir uygulama iin veri taban
oluturduk. Eer daha nce bir veri taban oluturmamsanz Azure zerinde,
New SQL Database Server seeneini seiniz.
229 | S a y f a
Artk veri tabanmz olutu, veri tabanna eriebilmemiz iin bir nceki tabloda
girdiimiz kullanc ad ifresi ile giri yapyoruz.
230 | S a y f a
Veri taban ynetim sayfasna girdikten sonra, sol alt kede bulunan Desing
blmnden yeni bir database oluturuyoruz ve tablo ekleyerek kolonlar
belirliyoruz.
Eklediimiz kolonlar silme ilemi ise My Work sekmesi altnda yer almaktadr.
Gerekli dzenlemeleri yaptktan sonra Save diyerek veri taban ilemlerimizi
sonlandryoruz.
Dardan veri tabanmza balant kurabilmemiz iin, veri taban ismine ift
tklayarak kontrol sayfasna yneliyoruz. En alt seenekteki blmden;
View SQL Database connection string for ADO.NET ODBC, PHP and JDBC
seeneini seerek balant sorgumuzu elde ediyoruz.
231 | S a y f a
Bu blmde hangi balant mimarisini kullanacaksak onu seip uygulamamzn
veri tabanmzla balant kurmasn salyoruz.
Not: IP adresinizi izin listesine eklemeniz gerekmektedir
Bunun iin yapmanz gereken;
232 | S a y f a
233 | S a y f a
234 | S a y f a
HTML
HTML ( Hyper Text Markup Language - Zengin Metin aretleme Dili ) gnmzde
uygulama tasarm iin kullanlan metin tabanl dildir.
Html, bir programlama dili olmad iin Html kodlaryla kendi bana alan bir
yap kurulamaz.
Web kavram, CERNde bir bilgisayar programcs olan Tim Berners-Leenin HTML
adl bilgisayar metin dilini bulup gelitirmesiyle balamtr.
Bu yzden ilk rnek olarak ENQUIRE isimli sistemi nerdi. 1980 ylna gelindiinde
internet tabanl sistemin ilk temellerini yine ayn isim att.
1990 ylnda HTML iaretleme dilini gelitirmesinden sonra World Wide Web
(WWW) sistemini kurmutur. Bu ekilde CERNde bilgi paylamn kolaylatrma
amac dorultusunda ortaya kan HTML gnmzde hayatmzn vazgeilmezi
olan internetin balca temelini oluturmutur.
2004 HTML5
235 | S a y f a
9.2. HTML5 TEMEL YAPISI
<!DOCTYPE html>
</body>
</html>
__________________________________________________________
Html sayfas her zaman iim DOCTYPE etiketi ile balar ve ardndan <html>,
<head>, <body> etiketleri tanmlanr.
<!DOCTYPE html>
236 | S a y f a
<!DOCTYPE html PUBLIC -//W3C//DTD XHTML 1.0
Transitional//ENhttp://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd>
HTML5 srm:
<!DOCTYPE html>
<html>
Bu etiket kapsayc etiket olarak kullanlr. Dier etiketler bu etiket ierisinde yer
almaktadr.
<head>
<meta>
237 | S a y f a
Name: Meta etiketi ierisindeki deer atanacak olan nceden tanml alt zellik
isimlerini tanmlamak iin kullanlr. Bu zellik ile tanmlanan alt zellie deer
atamak iin CONTENT zellii kullanlr.
___________________________________________________________________
___________________________________________________________________
___________________________________________________________________
___________________________________________________________________
238 | S a y f a
<meta name=copyright content= 2015 bilge adam copy all right />
___________________________________________________________________
<meta name="description" content=" bu sayfa bilge adam hakknda bilgi vermektedir" />
___________________________________________________________________
___________________________________________________________________
___________________________________________________________________
expires: Sayfann son geerli olduu tarihi GMT formatnda belirtir. Sayfay
daimi olarak geersiz klmak iin content zelliine '0' deeri atanmaldr.
___________________________________________________________________
239 | S a y f a
generator: Sayfay oluturmak iin kullanlan programn isminin ve
srmnn belirtilmesini salar.
___________________________________________________________________
___________________________________________________________________
___________________________________________________________________
___________________________________________________________________
___________________________________________________________________
240 | S a y f a
robots: Arama motorlarna sayfa ve sayfadaki linklerin takibi hakkndaki
davranlarnn bildirilmesini salar. content zellii aadaki deerleri alabilir.
Virgl ile ayrlarak birka deer birden belirtilebilir.
Bir arama motoru robotu aksi belirtilmedii srece bir sayfay dizine ekleyebilir,
sayfadaki linkleri takip edebilir ve sayfann n izlemesini oluturabilir. Bu yzden
robots zellii ile all, index, follow ve archive deerlerinin kullanmnn ok zel
bir anlam yoktur. Bunlar yerine sadece robotu engellemek amacyla,
engelleme amacna gre none, noindex, nofollow ve noarchive deerlerinin
kullanm daha doru olacaktr.
Alttaki rnek: Arama motoruna sayfay dizine eklemesini fakat sayfadaki linkleri
takip etmemesini ve sayfann n izlemesinin oluturulmamasnn bildirilmesini
gstermektedir.
241 | S a y f a
___________________________________________________________________
refresh: Belirtilen sre sonunda belirtilen bir URL adresinin yklenmesini salar. URL adresi
belirtilmezse gncel sayfa adresi tekrar yklenir.
Alttaki rnek, her 10 saniyede bir gncel sayfann tekrar yklenmesini gsterir.
___________________________________________________________________
___________________________________________________________________
<title>
242 | S a y f a
<title> Bilge Adam Yazlm </title>
___________________________________________________________________
<script>
zelikler:
src: {url} harici bir script dosyasn belgeye dhil etmek iin kullanlr.
Bu zellik kullanlrsa <script></script> bloklar arasna kod yazlamaz.
defer: Bu zellik sadece src zellii ile harici bir JavaScript dosyas
eklendiyse alr. Sonradan dhil edilen JavaScript kodlarnn sayfa
yklendikten sonra almasn salar.
type:
rnek:
<script>
var d = new Date();
var days = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"];
document.getElementById("demo").innerHTML = days[d.getDay()];
</script>
___________________________________________________________________
<style>
Head etiketleri ierisinde CSS kodlar yazmak iin kullanlr.
zellikleri:
type: style etiketi iin ierik tr tanmlar.
rnek:
<style type="text/css">
body {
font-family: Verdana;
243 | S a y f a
font-size: 9pt;
}
</style>
___________________________________________________________________
<body>
Kullanm:
<body>
<p> Kullancya gsterilecek olan sayfa ierii bu alanda tanmlanacak </p>
</body>
___________________________________________________________________
<ID>
Kullanm:
<CLASS>
CSS kodlarnn atanmas iin kullanlan etikettir. Bir elemana birden fazla class
tanmlayabilirsiniz.
Kullanm:
<div id="container" class="css"> </div>
___________________________________________________________________
244 | S a y f a
Yapsal etiketler tasarlayacamz web sitesinin yaplarn belirleyen temel
etiketlerdir.
HTML5 ile gelen bu etiketler sitemizin daha dzenli bir yapya sahip olmasn
salar.
245 | S a y f a
<HEADER>
Sayfann balk ksmnn tanmland ve ierisinde bulunmas gereken yaplarn
grupland etikettir.
erisinde H1, H2, H3, H4, H5, H6 gibi balk etiketlerinin yan sra logo banner gibi
yaplarda bulunabilir. Bir sayfada birden fazla <header> etiketi kullanlabilir.
Header etiketi section, aside ve article etiketleri ierisinde de kullanlabilir.
rnek:
<header>
<img src="images/logo.png" alt="Alternate Text" />
<h1>Bilge Adam Akademi</h1>
</header>
___________________________________________________________________
<NAV>
Nav etiketi sayfa ierisinde kullandmz ileri, geri, baa dn gibi navigasyon
balantlarnn gruplanmasnda kullanlr.
rnek:
<nav>
<ul>
<li> <a href="#">Yazlm</a> </li>
<li> <a href="#">Web Grafik</a> </li>
<li> <a href="#">Sistem</a> </li>
<li> <a href="#">Ofis</a> </li>
</ul>
</nav> ___________________________________________________________________
<SECTION>
Sayfamzda ierik, navigasyon, men ve alt men gibi divler kullanrz. HTML5
ile bu gruplamalar section etiketi altnda toplayarak ierisinde div kullanmaya
devam edebilmekteyiz.
rnek:
<section>
<header> Balk </header>
<article> erik </article>
<footer> Alt Balk </footer>
</section>
___________________________________________________________________
246 | S a y f a
<ARTICLE>
Sayfada, uygulamada veya belgede kendi iinde dzen oluturabilen yapsal
etikettir.
Article etiketi sayfa ierisinde yeniden kullanlabilir olarak tasarlanmtr.
rnek:
<article>
<p> erik Yazs </p>
</article>
___________________________________________________________________
<ASIDE>
Sayfamzda yan men gibi oluturduumuz blmleri gruplamak iin
kullandmz etikettir.
<HGROUP>
H1, H2, H3, H4, H5, H6 balk etiketlerinin gruplanmasn salayan etikettir.
rnek:
<hgroup>
<h1> Yazlm </h1>
<h2> Sistem </h2>
<h3> Web Grafik </h3>
<h4> Ofis </h4>
<h5> ngilizce </h5>
247 | S a y f a
<h6> 3D </h6>
</hgroup>
___________________________________________________________________
<FOOTER>
Footer da header etiketi gibi sayfann altnda bulunmas gereken yaplarn
gruplanmas iin kullanlan etikettir.
rnek:
<footer>
<p>Bilge Adam Akademi</p>
<p> Tm Haklar Sakldr - 2015</p>
</footer>
___________________________________________________________________
Ekran kts:
Bilge Adam
Bilge Adam
Bilge Adam
248 | S a y f a
Bilge Adam
Bilge Adam
Bilge Adam
___________________________________________________________________
<P>
Pararaf oluturmak iin kullanlr.
Kullanm ekli:
<p> erik Yazs </p>
___________________________________________________________________
<HR>
Dokman ierisinde eklendii yere yatay izgi eker.
rnek:
<hr />
___________________________________________________________________
<BR>
Satr sonu oluturmak iin yani bir alt satra gemek iin kullanlr.
Kullanm ekli:
<br />
___________________________________________________________________
<OL>
Sral liste oluturmak iin kullanlr. Li elemanlarn barndrr.
zellikleri:
start: lk liste esinin (li) sra deerini tanmlamak iin kullanlr.
rnek:
<ol start="10">
<li> Bilge Adam </li>
</ol>
Ekran kts:
249 | S a y f a
1. Bilge Adam
___________________________________________________________________
Ekran kts:
6. Yazlm
5. Sistem
4. Web Grafik
2. Ofis
3. 3D
1. ngilizce
___________________________________________________________________
rnek:
<ol type="I">
<li> Yazlm </li>
<li> Sistem </li>
<li> Web Grafik </li>
<li> Ofis </li>
<li> 3D </li>
<li> ngilizce </li>
</ol>
Ekran kts:
I. Yazlm
II. Sistem
III. Web Grafik
IV. Ofis
V. 3D
250 | S a y f a
VI. ngilizce
___________________________________________________________________
<UL>
Sral olmayan liste oluturmak iin kullanlr.
Kullanm ekli:
<ul>
<li> Balk </li>
</ul>
___________________________________________________________________
<LI>
li ve ol etiketleri iinde liste eleman oluturmak iin kullanlr.
zellikleri:
Ekran kts:
2015. Yazlm
251 | S a y f a
___________________________________________________________________
<DIV>
Sayfa ierisinde grsel bir blok oluturmak iin kullandmz kapsayc bir
etikettir.
Kullanm ekli:
<div>
<h1> Balk </h1>
<p> erik </p>
<img src="#" alt="Alternate Text" />
</div>
___________________________________________________________________
<A>
Sayfa ierisinde link oluturmak iin kullanlr.
zellikleri:
Kullanm ekli:
Kullanm ekli:
<STRONG>
eriin kaln yazlmasn salar.
252 | S a y f a
Kullanm ekli:
<SMALL>
erdii metnin kk boyutlu olmasn salar.
Kullanm ekli:
<S>
Sayfa ierisinde kullanldnda ierdii metnin zerini izer.
Kullanm ekli:
Ekran kts:
<I>
Sayfa ierisinde kullanld alanda ierii italik yapar.
Kullanm ekli:
Ekran kts:
253 | S a y f a
talik yazlacak alan
___________________________________________________________________
<B>
Sayfa ierisinde kullanld alanda ierii kaln yapar.
Kullanm ekli:
Ekran kts:
<U>
Sayfa ierisinde kullanld alanda ieriin altn izer.
Kullanm ekli:
Ekran kts:
rnek:
<figure>
<img src="yazilim.png" alt="Alternate Text" />
<img src="sistem.png" alt="Alternate Text" />
<img src="web.png" alt="Alternate Text" />
254 | S a y f a
<img src="ofis.png" alt="Alternate Text" />
<figcaption> Bilge Adam Bireysel Eitimleri </figcaption>
</figure>
___________________________________________________________________
<VIDEO>
Daha nceki srmlerde site ierisinde video oynatabilmemiz iin flashplayer
ya da silverlight gibi eklentilere ihtiya duyardk
HTML5 ile gelen video etiketi sayesinde eklenti kurmadan video dosyas
grntleyebilmekteyiz.
rnek:
<video controls="controls">
<source src="file.mp4" type="video/mp4" />
<source src="file.webm" type="video/webm" />
<source src="file.ogv" type="video/ogg" />
</video>
Not: Farkl tarayclar iin belirtilen formatlarda video dosyalarn eklememiz gerekmektedir.
___________________________________________________________________
<EMBED>
Multi medya dosyalarn (flash, video vs) sitemize eklemek iin
kullanabileceimiz etikettir.
rnek:
zelikleri:
src: Audio etiketi tarafndan alnacak olan ses dosyasn tanmlamak iin
kullanlr.
controls: Denetim ubuunun gsterilim gsterilmemesini ayarlamak iin
kullanlr.
autoplay: Sayfa yklendiinde ses dosyasnn otomatik olarak almasn
salar.
255 | S a y f a
preload: Sayfa yklendiinde medya ieriinin almaya hazr olmas
iin n bellee alnmasn salar. (autoplay deeri verilmi ise, bu ilem
otomatik olarak yaplr)
loop: Ses dosyasnn sayfa ierisinde srekli almasn salar.
rnek:
<audio controls="controls">
<source src="file.mp3" type="audio/mp3" />
<source src="file.ogg" type="audio/ogg" />
</audio>
Not: Farkl tarayclar iin belirtilen formatlarda ses dosyalarn eklememiz gerekmektedir.
___________________________________________________________________
<CANVAS>
Tarayc zerinde ek bir araca ihtiya duymadan izim ve animasyonlar
oluturup, metinler yazdrabileceimiz ve geiler oluturabileceimiz bir
kontroldr.
Kullanm ekli:
<canvas> </canvas>
___________________________________________________________________
<IFRAME>
Tarayc zerinde baka bir web sayfasnn ieriini grntlemek iin kullanlan
etikettir.
Kullanm ekli:
<iframe> </iframe>
___________________________________________________________________
<METER>
256 | S a y f a
Belirli bir aralk ierisinde saysal bir lm ya da kesirli bir deer tanmlar.
Kullanm ekli:
___________________________________________________________________
<PROGRESS>
Bir ilemin ilerleme srecini kullancya grsel olarak gstermek iin kullanlr.
Kullanm ekli:
<progress></progress>
___________________________________________________________________
<TIME>
Sayfa ierisinde kullandmz alanda kesin bir tarih eklememize yarar.
rnek:
<p>Kurs <time datetime="2015-02-20"> bugn </time> balyor</p>
___________________________________________________________________
<DETAILS>
Sayfa ierisindeki ieriklerin gsterilip gizlenmesine yarayan etikettir.
rnek:
<details>
<summary> Bilge Adam </summary>
<p> Yazlm </p>
<p> Sistem </p>
<p> Web Grafik </p>
</details>
Not: summary etiketi arasnda balk belirleyebilirsiniz. Balk belirlemezseniz default olarak Ayrntlar
bal atlr.
___________________________________________________________________
257 | S a y f a
9.8. WEB FORMLARI
Kullancdan bilgi almak iin oluturduumuz yaplardr. Kullanc form ierisinde
bulunan ilgili alanlara bilgilerini girdikten sonra gnder butonuna tkladnda,
form elemanlar ierisinde bulunan bilgiler sunucu tarafl alan bir sayfaya
gnderilir ve bu sayfa zerinde ilenir.
<FORM>
Form alan oluturmak iin kullanlan etikettir. erisinde form elemanlar
tanmlanr.
zellikleri:
___________________________________________________________________
<KEYGEN>
Sayfa ierisindeki ieriklerin gsterilip gizlenmesine yarayan etikettir.
rnek:
Ekran kts:
usr_name=ewewew&security=MIIBOjCBpDCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAr07pp
Mdaj1786blumdLk%2F5MCyuvOPacGxGAvPCld5hSueV8NEbpAGWp0z7vdagkeD8v53U5OZNv7JwO
258 | S a y f a
Y%2B2YN%2Bl854pxL8Fi8NbWcJHrUsXFRPenjiY5cEVsT009hPPPJcR0tJx3gpkVTw%2FwrN8WejnTVpr
hKxINVMN026S4X9pkCAwEAARYAMA0GCSqGSIb3DQEBBAUAA4GBACs9uRzLDFb95hUvWbU43mF
YocWJc6fQrBujUyck13CC0S444BpUQmwL3F%2FY8B4IRmT3sUZlA9JMqJfZXmMGr72Z5W%2FTaxBY
4RhotglJDUzYFP4CPpdxf8yGNTgRLm9CXK7NcH0Fg0OX3f3E6mYSFoKAhosmEsHGuKEWUtaeJxxx
Not: keygen etiketi Internet Explorer tarafndan desteklenmiyor.
___________________________________________________________________
<OUTPUT>
Output etiketi bir hesaplamann sonucunu gstermek iin kullanlr.
rnek:
<form oninput="x.value=parseInt(a.value)+parseInt(b.value)">
0
<input type="range" id="a" value="50">100
+<input type="number" id="b" value="50">
=
<output name="x" for="a b"></output>
</form>
<SELECT>
C# tarafnda ComboBox a benzeyen bir yapdr. erisinde sral olarak
listelemek istediiniz bilgileri ekleyebileceiniz bir etikettir. erisinde Option
elemanlarn barndrr.
zellikleri:
rnek:
<select>
<optgroup>
<option>
Bilge Adam
</option>
</optgroup>
</select>
259 | S a y f a
___________________________________________________________________
<OPTGROUP>
Liste elemanlarn gruplandrmak iin kullanlr.
zellikleri:
rnek:
<optgroup>
<option>
Bilge Adam
</option>
</optgroup>
___________________________________________________________________
<OPTION>
Liste eleman oluturmak iin kullandmz etikettir.
zellikleri:
value: Liste seenei iin bir deer tutar. Formun sunucu tarafnda
alan sayfaya gnderildiinde bu deer zerinden ilem yaplr.
disabled: Eleman pasif yapmak iin kullanlr.
selected: Atanan elemann seili olarak gelmesini salar.
rnek:
<select>
<optgroup label="Bilge Adam">
<option>
Yazlm
</option>
<option>
Sistem
</option>
260 | S a y f a
<option>
Web Grafik
</option>
<option>
3D
</option>
</optgroup>
</select>
___________________________________________________________________
<TEXTAREA>
Tek satrdan fazlasna sahip olan metin giri alanlar oluturmak iin kullanlr.
zellikleri:
Kullanm ekli:
___________________________________________________________________
<INPUT>
Sayfa ve Form ierisinde type zelliine gre eleman oluturur.
Kullanm ekli:
<input type="button" />
<input type="checkbox" />
<input type="text" />
___________________________________________________________________
261 | S a y f a
9.9. TABLOLAR
<TABLE>
Sayfa ierisinde belirli bir alanda tablolar oluturmak iin kullanlan kapsayc
etikettir.
Kullanm ekli:
<table> </table>
___________________________________________________________________
<THEAD>
Tablo st bilgisini ieren satrlar tanmlamak iin kullanlr.
Kullanm ekli:
<thead> </thead>
___________________________________________________________________
<TBODY>
Tablo gvdesini oluturan satrlar tanmlamak iin kullanlr.
Kullanm ekli:
<tbody> </tbody>
___________________________________________________________________
<TFOOT>
Tablo alt blm ksmn oluturan satrlar tanmlamak iin kullanlr.
262 | S a y f a
Kullanm ekli:
<tbody> </tbody>
___________________________________________________________________
<TR>
Tablo ierisinde satr oluturmak iin kullanlr.
Kullanm ekli:
<tr> </tr>
___________________________________________________________________
<TD>
<tr> etiketi ile tanmlanan satrlarn ierisinde hcre oluturmak iin kullanlr.
Kullanm ekli:
<td> </td>
___________________________________________________________________
<TH>
<tr> etiketi ile tanmlanan satrlarn ierisinde kaln ve ortaya hizal balk
oluturmak iin kullanlr.
Kullanm ekli:
<th> </th>
___________________________________________________________________
263 | S a y f a
264 | S a y f a
CSS3
CSS kodlar, Html kodlarnn iine yazlabildii gibi harici bir CSS dosyas
oluturularak da ilem yaplabilir.
CSS; kurallar, sz dizimi ve zellikleri olan bir yapdr. Bu yapnn CSS1, CSS2, ve
son srm olan CSS3 yaynlanmtr.
10.1.1. TP SECLER
HTML etiket seiciler, html ierisinde tanml olan etiketlerin grsel zelliklerini
deitirmek ya da belirtilen elemanlara yeni zellik vermek iin kullanlr.
rnek:
<head>
<style type="text/css">
p {
color: red;
font-family: Verdana;
font-size: 9pt;
}
</style>
265 | S a y f a
</head>
<body>
<div>
<p> Bilge Adam </p>
</div>
</body>
Not: Bu kullanmda projeniz ierisindeki btn <p> etiketlerine ayn zellii vermi olursunuz.
___________________________________________________________________
Evrensel seiciler <body> etiketi ierisindeki btn etiketlere ayn zellii vermek
iin kullanlr.
rnek:
<head>
<style type="text/css">
* {
color: red;
font-family: Verdana;
font-size: 9pt;
}
</style>
</head>
<body>
<div>
<h1> Bilge Adam </h1>
<p> Yazlm </p>
</div>
</body>
Not: Bu kullanmda projeniz ierisindeki btn etiketlere ayn zellii vermi olursunuz.
___________________________________________________________________
10.1.3. ID SECLER
rnek:
<head>
<style type="text/css">
#box {
width: 150px;
height: 150px;
background-color: yellow;
266 | S a y f a
}
</style>
</head>
<body>
<div id="box">
<h1> Bilge Adam </h1>
</div>
</body>
___________________________________________________________________
rnek:
<head>
<style type="text/css">
.Box {
width: 150px;
height: 150px;
background-color: yellow;
}
.font {
color: red;
font-family: Verdana;
font-size: 9pt;
}
</style>
</head>
<body>
<div class="Box font">
<h1>Bilge Adam </h1>
</div>
</body>
___________________________________________________________________
rnek:
267 | S a y f a
<head>
<style type="text/css">
table {
border: solid 1px #000;
}
table tr {
padding: 5px;
}
table tr td {
background-color: yellow;
font-family: 'Agency FB';
font-size: 9pt;
}
</style>
</head>
<body>
<div>
<table>
<tr>
<td>Bilge Adam </td>
</tr>
</table>
</div>
</body>
___________________________________________________________________
RNEK:
<head >
<style type="text/css">
#container {
background-color: #5e5c5c;
width: 700px;
height: 630px;
border-radius: 25px;
margin-left: auto;
margin-right: auto;
padding: 1px;
}
.font {
font-family: Verdana;
font-size: 20px;
color: white;
text-align: center;
}
#head {
width: 675px;
height: 100px;
line-height: 100px;
background-color: #898484;
border-radius: 20px;
margin: auto;
}
#nav {
width: 180px;
height: 380px;
line-height: 380px;
background-color: #898484;
268 | S a y f a
border-radius: 20px;
float: left;
margin: 10px 0 0 15px;
}
#section {
width: 280px;
height: 380px;
background-color: #898484;
border-radius: 10px;
float: left;
margin: 10px 0 0 15px;
}
#section #box1,#box3 {
width: 260px;
height: 70px;
line-height: 70px;
background-color: #c3c2c2;
border-radius: 10px;
margin: auto;
}
#section #box2 {
width: 260px;
height: 130px;
line-height: 130px;
background-color: #c3c2c2;
border-radius: 10px;
margin: auto;
}
#article {
width: 180px;
height: 380px;
line-height: 380px;
background-color: #898484;
border-radius: 20px;
float: left;
margin: 10px 0 0 15px;
}
#footer {
width: 675px;
height: 100px;
line-height: 100px;
background-color: #898484;
border-radius: 20px;
margin: 400px 0 0 15px;
}
</style>
</head>
<body>
<div id="container">
<header>
<div id="head">
<h1 class="font"><.HEADER></h1>
</div>
</header>
<nav>
<div id="nav">
<h1 class="font"><.NAV></h1>
</div>
</nav>
<section>
<div id="section">
<h1 class="font"><.SECTION></h1>
<div id="box1">
269 | S a y f a
<h1 class="font"><.HEADER></h1>
</div>
<div id="box2">
<h1 class="font"><.ARTICLE></h1>
</div>
<div id="box3">
<h1 class="font"><.FOOTER></h1>
</div>
</div>
</section>
<article>
<div id="article">
<h1 class="font"><.ARTICLE></h1>
</div>
</article>
<footer>
<div id="footer">
<h1 class="font"><.FOOTER></h1>
</div>
</footer>
</div>
</body>
</html>
JAVASCRIPT
1995 ylnda NetScape Navigator 2.0 ile birlikte gelitirilen ve C dili ile gelitirilen
bir script dilidir. Html kodlarna dinamiklik kazandrmamz salayan, client
tarafnda alan betik bir script dilidir. Bir programlama dili deildir. Script dili
olduundan tek bana alamaz.
270 | S a y f a
kinci yntem; HTML sayfamn ierisinde script etiketleri aarak javascript
kodlarm bu etiketler arasna yazabilirim.
nc yntem ise; ilem yapacam yere dorudan kodlarm yazabilirim.
Javascript browsera komut gnderen bir script dilidir. Javascriptde satr sonu
; ile belirlenir. Ama kullanlmak zorunda deildir. Javascript case sensitive bir
dildir. Byk kk harf duyarllna Csharpdan daha fazla dikkat edilmelidir.
Javascriptde hata kontrol yapmak zordur. Kod hatalar mesaj kutusu ile test
edilir.
Javascriptde boluk karakterleri okunmaz. Javascript dosyalarnn bir sktrlm
halleri vardr birde normal halleri bulunmaktadr.
11.2.1. Document.Write
Document Write komutu ekrana yaz yazdrmak iin kullanlr. Document bizim
HTML dosyamz temsil eder. Csharpda ki this gibidir.
Document.Write rnei
document.write("<h1>Bu bir basliktir.</h1>");
Html Kodu
<div id="Ornek1">
<h5>1.Ornek: Document.Write</h5>
<div>Javascripte hosgeldiniz.</div>
<input type="button" name="btnTikla" value="Tikla" onclick="Yaz()" />
</div>
Javascript Kodu
function Yaz() {
document.write("<h1>Bu bir basliktir.</h1>");
}
11.2.2. Alert
C Sharpda ki MessageBox penceresi gibidir. Tarayc tarafndan tanmldr. Her
taraycda farkl grnm sunar. Kullancya mesaj vermek iin kullanlabilir.
271 | S a y f a
Mesaj Kutusu
function mesajKutusu() {
alert("Mesaj kutusu");
}
Html Kodu
<div id="Ornek2">
<h5>2.Ornek: Alert-Confirm</h5>
<input type="button" name="btnTikla2" value="Beni Tikla!"
onclick="mesajKutusu()" />
</div>
Htmlde ift trnak ve tek trnak string ifadeleri temsil eder. Eer ifadeye ift trnak ile
balamsak ieride kullanacamz stringi tek trnak olarak kullanmalyz.
11.2.3. GetElementByID
Javascript ile herhangi bir elementin ieriini deitirebilirsiniz.
Html Kodu
<div id="Ornek3">
<h5>3.Ornek: getElementById</h5>
<p id="paragraf">Javascript ile herhangi bir elementin icerigini
272 | S a y f a
degistirebilirisiniz.</p>
<input type="button" name="btn" id="btnDegistir" value="Paragrafi Degistir"
onclick="IcerigiDegistir()" />
</div>
Javascript Kodu
var yeniHalMi = false;
function IcerigiDegistir() {
var x = document.getElementById("paragraf");
x.innerHTML = Bu deiiklik javascript tarafndan yapld.;
}
Html Kodu
<div id="Ornek3">
<h5>3.Ornek: getElementById</h5>
<p id="paragraf">Javascript ile herhangi bir elementin icerigini
degistirebilirisiniz.</p>
<input type="button" name="btn" id="btnDegistir" value="Paragrafi Degistir"
onclick="IcerigiDegistir()" />
</div>
Javascript Kodu
var yeniHalMi = false;
function IcerigiDegistir() {
if (yeniHalMi) {
btnDegistir.value = "Paragrafi Degistir";
paragraf.innerHTML = "Javascript ile herhangi bir elementin icerigini
degistirebilirisiniz.";
yeniHalMi = false;
} else {
btnDegistir.value = "Ilk Hale Don";
paragraf.innerHTML = "bu degisiklik javascript tarafindan yapildi";
yeniHalMi = true;
}
}
273 | S a y f a
Html Kodu
<div id="Ornek4">
<h5>4.Ornek: resmin source'unu degistirme(bir elementin attribute'unu
degistirme)</h5>
<img src="images/dolu_cop_kutusu.png" id="copKutusu" title="Dolu Cop Kutusu"
style="cursor: pointer;" onclick="ResmiDegistir()" />
<p id="cop">Cop kutusunu bosaltmak icin resme tiklayiniz.</p>
</div>
Javascript Kodu
var doluMu = true;
function ResmiDegistir() {
if (doluMu) {
// cop.style.backgroundColor = "red";
var result = confirm('Cop kutusunu bosaltmak istediginizden emin
misiniz?');
if (result) {
copKutusu.src = "images/bos_cop_kutusu.png";
copKutusu.title = "Bos cop kutusu";
cop.innerHTML = "Cop kutusu temizlendir.";
copKutusu.style.cursor = "default";
doluMu = false;
}
}
}
Html Kodu
<div id="Ornek5">
<h5>5.Ornek: style degistirme</h5>
<p id="renk" onmouseover="RenkDegistir('#ff0000','pointer')"
onmouseout="RenkDegistir('black','default')">Javascript ile bir elementin style
bilgisini degistirebilirsiniz.</p>
</div>
Javascript Kodu
function RenkDegistir(yaziRengi, cursorSekli) {
renk.style.color = yaziRengi;
renk.style.cursor = cursorSekli;
p}
274 | S a y f a
nokta javascript kullancnn bilgisayarnda alaca iin kullanc dilerse
javascript almasn engelleyerek bu gvenlii aabilir.
Html Kodu
<div id="Ornek6">
<h5>6.Ornek: Validation uygulama(kontrol etme)</h5>
<p>Lutfen bir sayi giriniz</p>
<input type="text" id="txtYazi" />
<input type="button" id="btnKontrol" value="Kontrol Et" onclick="KontrolEt()" />
</div>
Javascript Kodu
function KontrolEt() {
var deger = txtYazi.value;
if (deger == null || deger == "" || isNaN(deger)) {
//isNan=> icerisine verilen degerin alfa numeric olup olmadigini kontrol
eder
//isFinite ==> icerisine verilen degerin sayisal olup olmadigini kontrol
eder
alert("Sayisal bir deger girmediniz.Lutfen sayisal bir deger giriniz");
txtYazi.value = '';
}
}
11.3. JQuery
John Resing tarafndan 2006 ylnda gelitirilmeye balanan Jquery ak kaynak
kodlu bir Javascript ktphanesidir. JQuery ktphanesi 2013den beri 16 kii
tarafndan gelitirilmekte ve 2.0 versiyonu yaynlanmaktadr. Ktphanenin
Sktrlm boyutu 86kbdr. Javascriptin zellemi bir ktphanesidir. Az kod ok
i mantndadr.
275 | S a y f a
Jqueryi kullanabilmek iin ktphaneyi projeme referans olarak vermem
gerekmektedir. Javascriptde referans sras ok nemlidir.
276 | S a y f a
acilisinda gorunumune mudahale etme
$("p").html("Merhaba JQeury");
Html Kodu
<input type="button" id="btnTikla" value="Beni Tikla" />
<hr />
<ul id="sehirler">
<li>Istanbul</li>
<li>Ankara</li>
<li>Bursa</li>
<li>Izmir</li>
<li>Antalya</li>
</ul>
<hr />
<div id="paragraflar">
277 | S a y f a
<div>
<p>paragraf 1</p>
</div>
<div>
<p>paragraf 2</p>
</div>
<p>paragraf 3</p>
</div>
<hr />
<hr />
278 | S a y f a
//$("#sehirler li:nth-child(2n)")
$("#sehirler li:even").css("color", "red");
$("#sehirler li:odd").css("color", "green");
Hafif ve Kk Boyutlu
Hazr Eklentiler
Cross Browser
Kolay renilebilirlik
Metot Zincirlemesi
CSS3 Uyumluluu
Geni Kullanc Kitlesi ve Dkmantasyon
Dier Ktphanelere Uyumluluk
Google
Amazon.com
IBM
DELL
Microsoft
NBC
279 | S a y f a
EA Games
Twitter
Facebook
Best Buy
11.3.3.4. Alternatif Ktphaneler
Spry (Adobe)
YUI Yahoo User Interface (Yahoo)
Dojo
MooTools
ASP.NET
.Net framework ierisinde web tabanl dinamik uygulamalar yazmak iin
kullandmz Aspden tretilmi bir teknolojidir.
Visual Studio zerinden > New Project > Visual C# > Web > ASP.NET Web
Application
280 | S a y f a
Name: Asp.Net uygulamasna verilecek isim
Location: Projenin konumlanaca dosya uzants
Solution Name: Proje Solutionun ismi
Page request
Start
Page Initialization
Load
Validation
Postback event handling
Rendering
Unload
281 | S a y f a
Page Request:
Load:
282 | S a y f a
Render ileminden nce page ve kontroller iin Viewstate nesnesi
kaydedilir. Render aamasnda page nesnesi, her
kontroln Render()metodunu altrr.
Render() metodu, text writer nesnesini kullanarak kontroln outputunu
pagein Response propertysine ait OutputStreame (HTTP ile gidecek olan
binary ierik) yazar.
Unload:
Burada standart bir Web Form'un ierigi yer almaktadir, WebForm1.aspx ismindeki C#
Web Formu:
283 | S a y f a
HTML elementi, Ierisinde sayfa basligi, css ve javascript dosyalari yer alabilir.
Gerek ASP.NET Web Form kontrolleri, gerekse html kontrolleri ve elementleri h1,input,
div gibi
Ayrica her web form ierisinde yalnizca bir adet form elementi bulunmalidir
* Sayfanizin ilk istekle (ornegin tarayiciya adresi yazip Enter'a basmak vs...)
gnderilmesini salayan web metodu "GET"tir..
284 | S a y f a
Bir Asp.Net projesi atk ve bu projeye bir Web Form Ekliyoruz;
Web Formun Design ksmn kodluyoruz. ok basit aspx sayfasna bir label ve bir button
controlu ekliyoruz. Burada ki amacmz buttona bastm zaman sayfann postback
sonucumu yoksa get metoduylam geldiini renmek.
285 | S a y f a
12.4. ASP.NET Sunucu Kontrolleri
Sunucu kontrolleri
Html kontrolleri tarayici zerinde birebir render edilmektedir. Eger ASP.NET web
formumuz ierisinde herhangi bir html kontrol kullanmissak, tarayici sayfamizi
yorumlarken bu kontrolleri herhangi bir render islemine tabi tutmaz.Fakat sunucu
kontrollerini tarayicinin anlayabilmesi iin bir render islemine tabi tutar ve html
elementleri, nesneleri haline getirir.Bunlar ierisinde standart kontroller, veri kontrolleri,
dogrulama ve kullanici giris kontrolleri, ynlendirme kontrolleri yer almaktadir.Yerlesik
web kontollerine ek olarak, ASP.NET kendimize zel denetimler olusturmamiza olanak
saglar.Eger syle durumlardan biriyle karsi karsiya kalirsak zel kontoller gelistirmek
bizim iin yararli olabilir:
Iki veya daha fazla yerlesik web kontoln islevselligi birlestirmek gerekiyorsa,
Bir yerlesik kontoln islevlerinin genisletilmesi gerekiyorsa,
Tamamen farkli bir kontrole ihtiyacimiz varsa.
286 | S a y f a
12.4.1. ViewState
ViewState, web formu zerinde yer alan kontrollerin durumunu kaydeden gizli bir
denetimdir diyebiliriz.
Sag tarafta yer alan properties penceresini kullanarak zelliklerini ve aldigi degerleri
ayarlayabiliriz.
Normal sartlar altinda standart html kontrolleri sunucu tarafli alismazlar. Eger bir bir
html kontrolnn server tarafinda islenebilmesini istiyorsak runat="server" zniteligini
eklememiz gerekmektedir.
287 | S a y f a
Html sunucu kontrolleri tarafindan saglanan zelliklerden bazilari sunlardir:
Web form zerinde html kontrollerinden bahsettik. Eger html kontrollerine runat="server"
zniteligini verirsek sunucu zerinde islem yapabilecegini grdk. Web Sunucu
kontrolleri ise tamamen sunucu zerinde alan kontrollerdir. Buna rnek olarak
textbox, button, listbox, dropdownlist, label, calendar gibi.
Web sunucu kontrolleri programlama yetenegi zengin bir nesne modeli saglar. rnegin
bir dropdownlist in seilen index'i degistirildiginde, kullanicinin textbox'a deger girip
iktiktan sonra hangi islemin alistirilacagi, butona tiklaninca neler yapilacagi gibi.Web
sunucu kontrolleri tarayicilari otomatik olarak algilamaktadir. Hangi tarayicida nasil
davranmasi gerektigini tespit eder ve uygun biimde isleyebilmektedir.
Bir butona atanan islem yada event ile ugrasmaktansa bir metod yazip bu metodu
ilgili eventlarda agirmam yeterli olacaktir.
288 | S a y f a
client-side hem de server-side kontroller gerceklestirirler. Client-side kontroller
JavaScript yardmyla gerekletirilir. yle ki, eer dorulama ileminiz baarsz olursa
verinin server'a gitmesi daha client'ta iken kesilir. Bylece veri tutarllgn salam
olursunuz. Ancak olur da kullanc taraycs araclg ile JavaScript'leri kapatrsa bu sefer
devreye Server-side kontrolleriniz girer ve verilerin yine server tarafta ilenmesine engel
olur!
Client-Side:
Server-Side:
RequiredFieldValidator:
Kontorlne ihtiyacnz var demektir. Text zellii ilgili validator'un yerine yazar
289 | S a y f a
Aadaki ekranda RequiredField Validatorn Control edecei kontroln atamasn,
Validationn css class atamasn ve Hata Durumunda verecei hata mesajn property
penceresinden ayarlyoruz
Kullanc ilgili alan bo getii zaman, alaca hata(sayfa hibir ekilde postbacke
uramaz):
CompareValidator
Sayfaniz zerinde iki veri girii kontrolndeki verilerin karlatrlmas ve eer karlatrma
sonucu yanl ise verilerin ilenmemesini saglayan validation kontrolmzdr.ki
gornen deeri karlatrabildiiniz gibi, veri girii kontrolndeki veriyi sabit bir deerle
de karlatrabilirsiniz. Bazi zellikleri;
290 | S a y f a
ControlToValidate: Dogrulanacak - referans kontroldeki degerlerle ayni degere sahip
- kontrol hangisidir?
Operator: Sadece esitlik (Equal) durumu degil, esit olmama (NotEqual), esit yada
buyuk olma (GreaterThanEqual), esit ya da kucuk olma (LessThanEqual), kucuk
(LessThan) ya da buyuk (GreaterThan) olma ve veri tiplerinin uyumlulugu
(DataTypeCheck) da kontrol edilebilir.
RangeValidator
Bir veri girii kontrol ierisindeki verinin, istedigimiz bir deer aralnda olup olmadn
kontrol eden dorulama kontrolmzdr. Sadece sayisal deil, metinsel, tarihsel
ifadeleri de aralik kontrol ierisine dahil edebiliriz. Bazi ozellikleri;
Type: Hangi tipte veriler kontrol edilecek? Metinsel, sayisal, tarihsel kontroller
gerceklestirecektir. Ornegin Max degere "D" Min degere "A" verirseniz sozlukte A
291 | S a y f a
ile D arasinda gecen tum kelimeler (Ahmet, Burcu, Celal) gecerli olurken D'den sonraki
18-25 ya aralnn dnda bir deer girildiinde kullancnn alaca ekran grnts:
RegularExpressionValidator
Regular Expression (Duzenli Ifadeler) - Regex bir ifadenin, istediginiz formata uygun
olup olmamasi durumunu kontrol etmektedir. Ornegin, web sitesi istediginiz alanda
http olmasi, e-mail istediginiz @ olmasi, bir sifrede en az 3 adet rakam olmasi gibi kuralli
ifadeleri bu validator ile kontrol edebilirsiniz... Dunya uzerinde bircok Regex pattern'i
(duzenli ifade dokusu) ureten gelistiriciler http://regexlib.com sitesinde bulusmakta ve
pattern'lerini dnyayla paylasmaktadir. Sizler de uygulamalarinizda bu pattern'leri
kullanabilirsiniz.
Bazi ozellikleri;
292 | S a y f a
Eer kullanc istenilen formatlarda giri yapmaz ise karlaaca hata ekran:
CustomValidator:
293 | S a y f a
ValidationSummary: Eger sayfa uzerinde birden fazla validator varsa ve hata
mesajlariniz tasariminiza uygun bir sekilde sayfa uzerinde konumlanamiyorsa, hata
mesajlarini ilgili kontrolun yaninda gostermek yerine kucuk bir isaretci yardimiyla
kullaniciya ozet alana (ValidationSummary) kontrolune yonlendirmeniz hem
programlama acisindan hem de tasarim acisindan isini kolaylastiracaktir..
294 | S a y f a
Kullanc yanl deer girdii zaman, karsna kacak olan hata ekran
Repeater hicbir sekilde size bir HTML destegi sunmaz. Tum tasarimsal icerik yazilimcinin
sorumlulugu altindadir. Yalnizca bir takim templateler kullanima acacaktir. Bu
templateler;
295 | S a y f a
AlternatingItemTemplate: ItemTemplate'e alternatif olarak bir gorunum olusturmanizi
saglar. Kullanimi tpk ItemTemplate gibidir
HeaderTemplate: En basta calisan template'tir. Baslik gorevi gorur. sterseniz bir baslik
atayabilir ya da kisa bir aciklama gerceklestirebilirsiniz.
296 | S a y f a
Ekran kts:
12.6.2. GRIDVIEW
297 | S a y f a
Yukarda yer alan ekrandaki amacmz, Northwind databaseindeki Employees tablosundaki alanlarn
EmployeeID,FirstName,LastName,HomePhone bilgilerini ekranda gstermek.
GridViewn ierisine BoundFiledlar yardmyla kolonlar oluturduk.
GridViewa datalarmz basarken kullandmz yntem, SqlDataSource olacaktr. SqlDataSource
sayesinde kodlama yapmadan kolay bir ekilde veriye eriim salayabiliriz. Unutulmamas gereken bir
noktada SqlDataSourceu byk projelerde
kullanmaktan kanmak olacaktr.
GridView Ado.Net
Senaryo: Sayfa zerinde bir adet DropDownList vede bir adet GridView olacak.
DropDownListe Northwind databaseindeki Categories tablosundaki kategorilerin
isimleri dolacak. Setiim kategoriye bal olan rnler ise GridView zerinde
listelenecek.
298 | S a y f a
Code Behind:
DataKeyNames:
Bir satrn arkaplannda bir ya da birden fazla deerin tutulabilmesi iin kullanlan bir
property'dir. Genellikleri primary key alanlar icin kullanilir. Ancak senaryoya gre bazen
299 | S a y f a
tm kolonlar, bazen detay kolonlar anahtar kolon olarak kullanabilir. Bilinmesi gereken
en nemli ozellik, bir satrn arkaplannda saklanan deere ulaabilmek iin o satrn
mutlaka "selected" bir satir olmas gerekmektedir.
Senaryo:
Code Behind:
300 | S a y f a
GridView zerinden Update Delete lemleri
Senaryo:
301 | S a y f a
Code Behind:
Web.Config:
302 | S a y f a
12.6.3. DATALIST
Verilerinizi tablo formatinda listelemeye olanak saglayan oldukca guclu bir
kontroldur.zellikle gnmz e-ticaret sitelerinde son eklenen rn, bunu alan bunu da
ald gibi bloklarda sklkla kullanld grlmektedir. Bu kontrol uzerinde de
EditItemTemplate yardmyla update ve delete gibi ilemleri de gerekletirebilirsiniz.
303 | S a y f a
Senaryo:
Basit ekilde rn detay grntleme
Code Behind:
Senaryo:
Kullanc Sipari detaylarn grntleyecektir. Sipariler sayfalanabilecektir, toplam
sayfa says ve iinde bulunulan sayfa bilgileri labellarla kullancya gsterilecektir.
Sayfalama kurallarna bakacak olursak, eer kullanc ilk sayfada ise geri ve ilk sayfaya
dnemez ve kullanc eer son sayfadaysa ileri ve son sayfaya gidemez.
304 | S a y f a
Css:
Body:
305 | S a y f a
Code Behind:
306 | S a y f a
12.6.4. DETAILS VIEW
Genellikle varolan bir verinin istenen tum ozelliklerini ozel olarak listelemeye yarayan
kontrol olarak karmza kmaktadr. Dier data kontrollerinde olmayan Insert
ozelliginin olmasi bizim icin onemlidir! Ayrica pager destei, update, delete gibi
ilemlere verdii destekte bu konuda DetailsView'i nplana kartmaktadr.
Senaryo:
rn detay grntleme, yeni rn ekleme, mevcut rn gncelleme ve rn silme
ilemlerini DetailsView ile yapmak.
307 | S a y f a
12.6.5. Asp.net Web User Control
Asp.net web user control ayn bir asp.net sayfas gibi davranan,
kendi eventleri olan olduka kullanl bir kontroldr. Web User
Control bize asp.net sayfalarmzda tekrarladmz, Client Side yani
kullanc tarafnda yorumlanan html ve css kodlarmzn, Server Side
alan Code Behind yani C# kodlarmz yazdmz alanlarn tek bir
yerden ynetilmesine olanak tanmaktadr. rnek vermek gerekirse
kullanc girii yaplabilmesi iin bir giri paneli tasarladnz, bu giri
panelini ana sayfada ve baka bir sayfada gstermek istiyorsunuz,
iki sayfaya birden ayn kodlar uygulamak yerine oluturacanz bir
web user control ile bu ilemi tek bir yerden gerekletirmeniz
mmkndr.
308 | S a y f a
GirisPaneli.ascx isminde bir user control oluturuyoruz. Bu User
Control hem ana sayfada hem de farkl bir sayfada daha yer
alabilir. rnek bir Control Panel sayfasn oluturalm.
Oluturduumuz rnek bir user control zerinde bir tablo ile basit bir
giri paneli tasarlayalm.
309 | S a y f a
Oluturduumuz User Controlu bir asp.net sayfasna solition
Explorerdan srkle brak yntemiyle sayfanza ekleyebilirsiniz.
310 | S a y f a
12.7. Master Page
Mastar page kontrol, sayfalarnza ortak bir tasarm yaps
kazandrmanz salayan kontroldr. Bir masterpage oluturduktan
sonra bir asp.net sayfas eklerken, o sayfann hangi masterpagei
kullanacan seebilirsiniz. Semi olduunuz masterpage zerinde
bulunan Content Place Holder alanlar sayesinde her sayfa iin,
masterpage zerindeki tasarm kullanlrken farkl ierikler yer
almasn salayabilirsiniz. Ksacas tek bir tasarm ablonunun
istediiniz sayfalara etki etmesini ve bu sayfalarda sadece
deiecek alanlar iin ilem yapmanza olanak tannr. Bu kontroln
bize en byk faydas genel bir deiiklik gerekletireceimiz
zaman tek bir yerden tasarmlarmza mdahale edebilmemize,
ortak alanlarn deiikliini yaparken ok kolay bir ekilde sadece
masterpage dosyamz deitirmemize olanak tanr. Bunlarla
beraber her sayfada karmaa yaratacak tasarm kodlarnn sadece
masterpage ierisinde bulunmasn, content page yani masterpage
dosyamz kullanan asp.net sayfalarnn ise ierisinde sadece ortak
olmayan, her sayfa iin farkl olabilen alanlarn kodlarnn yer
almasdr.
Bir masterpage dosyas oluturmak iin projemizin zerine sa
tklayarak, Add > New Item sekmesinden Master Page seeneini
takip edebiliriz.
311 | S a y f a
Aada rnek olarak masterpage olarak hazrlanm bir sayfay
grebiliriz. Bu sayfann iaretlenmi alannda Content Place Holder
alan yani master pagein kullanld sayfalarda deiiklik
yaplabilecek alan yer almaktadr.
312 | S a y f a
Form Using Master Page sekmesini seenebilirsiniz. Bu seenek Visual
Studio IDEsinin 2012 versiyonunda Content Page olarak
grntlenmektedir.
Masterpage dosyasn oluturduunuzda kod ksmna getiiniz
zaman otomatik olarak gelen content place holdelardan
birtanesinin de head ksm blmnde olduunu grebilirsiniz. Head
ksm ierisinde yer alan content place holder masterpage kullanlan
sayfalar iin zel olarak javascript, css gibi dosyalarn kullanmna
imkan tanr. Her sayfada zel olarak css ve javascript bu ekilde
kullanabilirsiniz. Body ksmna gelen content place holder ise dier
sayfalarda da deiebilen alanlar farkl olarak kullanabilmenize
olanak tanyacaktr. Sayfann ierisindeki head blmnde yer alan
place holder incelersek aadaki gibi bir grntyle
karlaacaz.
313 | S a y f a
12.8. State Managament(Durum Ynetimi)
State Managament asp.net platformunda verilerin tek bir alandan
gidip gelmiyor olmas nedeniyle ortaya km bir kavramdr. Asp.net
tarafnda veriler sunucu (server) ve istemci (client) olmak zere iki
taraf zerinden gidip gelmektedir. Bir web form zerindeki veriler
client tarafndan server tarafna gnderilir, ilenir ve kts geri client
tarafna gnderilir.
ASP.NET State Managament tarafnda bahsetmi olduumuz iki
teknik vardr bunlar istemci tarafl ve sunucu tarafl state
managament teknikleridir.
1) Sunucu tarafl state managament teknikleri
a. Session State (Oturum Durumu)
b. Application State (Uygulama Durumu)
2) stemci (Client) tarafl state managament teknikleri
a. ViewState (Durum Grnm)
b. Query String (Sorgu Kelimeleri)
c. Cookies (erezler)
314 | S a y f a
deere ASPNET_SessionId adi verilmektedir. retilen bu SessionId
bilgisinin yer ald bir cookie'de client tarafa yerletirilir...
315 | S a y f a
<configuration>
<system.web>
<httpruntime executiontimeout="110"></httpruntime>
</system.web>
</configuration>
imdi Session ile rnek bir sayfa gezme says rnei yapalm,
lk olarak bir asp.net projesi aalm ve Default.aspx, Ornek1.aspx,
Ornek2.aspx ve KacSayfaGezdim.aspx sayfalarn ekleyelim.
Sayfalar arasnda dolaabilmek iin sayfalarmz ilerine linkler
ekleyelim ve kullanclarmz bu linklere tklayarak dolaabilsinler.
Default.aspx sayfamzn html ierii
316 | S a y f a
blmnde yaparak her sayfa gezildiinde session zerinde
tanan aktif deerin bir arttrlmasn saladk.
Ornek1.aspx sayfasnn html kod ierii
317 | S a y f a
Ornek2.aspx sayfasnn codebehind ierii
318 | S a y f a
Yukarda gerekletirmi olduumuz rnein sadece kullancnn
kendi gezdii sayfa bilgisini grebileceini hatrlatalm. Session
client yani sadece balanan bilgisayar iin geerli deerleri
tayacaktr. Ayn ekilde sayfalarmzn code behind blmnde
page_load eventi ierisinde art belirlediimiz iin sayfay
yenileseler bile gezdikleri sayfa saysnda art grlecektir.
319 | S a y f a
Yukardaki ekilde istediiniz sayfalarn codebehind
blmlerinde kullanm gerekletirebilirsiniz. Bununla beraber
application balangcndan uygulama durdurulana yada
kapatlana kadar gerekleen sreler Global.asax (ASAX =>
Active Server Application X) ierisinde ki metotlar ierisine
yazlmaktadr. Bazlarn inceleyecek olursak;
Application_Start : Uygulamanzn balangc
esnasnda alacak olan metotdur. Bu metot sayfa
kullanc tarafndan aldnda deil web sayfas ilk
olarak yayna aldnda almaktadr.
Session_Start :Uygulama bir kullanc tarafndan ald
anda session_start metodu almaktadr.
Application_BeginRequest : FormsAuthentication
kullanldnda kullancnn sisteme baarl ekilde giri
yapmas durumunda tetiklenecek olan olaydr.
Application_Error : Uygulama bir hata ile karlamas
durumunda tetiklenecek eventdir. Bu event
uygulamaya eriim kesildiinde yani sunucu
kapandnda almayacaktr.
Session_End : Kullanc siteyi terk ettii veya session
timeout yaand esnada tetiklenen eventdir.
Application State kullanarak web sayfamz da ka kiinin online
olabildiini grebileceimiz rnek bir uygulama yapalm,
320 | S a y f a
Application[OnlineKullanicilar] = 0;
321 | S a y f a
Sayfamzn code behind blmne geliyoruz ve label ierisine
online kullanc deerimizi veriyoruz;
322 | S a y f a
yararlanmak iin herhangi zel bir ilem yapmamza gerek
yoktur. Ancak baz senaryolar gerei sayfa zerindeki bir kontroln
tad deerin saklanmamas istenebilir. rnein Grid'de amacmz
sadece veri gstermekse her defasnda yeniden doldurulmasn
tercih edebiliriz. Bunun iin yaplmas gereken ey ViewState
zelliinin kapatlmasdr. Bu isi de 3 ekilde canlandrabiliriz:
2.1.1. Kontrol Bazl ViewState Kapatma: TextBox, Label,
DropDownList, Button gibi kontrollerin ViewState'ini
kapatmak icin yapilmasi gereken tek ey
"EnableViewState" zelliini "False" olarak atamaktr...
Adresimiz.com/OrnekSayfa.aspx?degiskenIsmi=DegiskeninD
egeri
323 | S a y f a
Yukardaki gibi bir orneksayfa.aspx sayfamzn code behind
blmnden degiskenIsmi isimli string tipindeki deikenimiz
ierisinde bulunan deeri rahatlkla aadaki gibi
yakalayabiliriz.
www.adresimiz.com/OrnekSayfa.aspx?Degisken=deger&DegiskenIki=
deger2
324 | S a y f a
Yukardaki gibi ncelikle login isminde bir cookie var m
bunun kontroln saladk, var ise yani ierii null deil ise
hemen HttpCokie nesnesi oluturup oradan gelen cookie
nesnesinin atamasn yaptk. TextBoxlar ierisine gelen cokie
nesnemiz ierisinde saklam olduumuz verileri yazdrdr.
Aaada bulunan rnekte ise kullanc beni hatrla checkbox
kontroln iaretlediyse ve giri yapm ise bir cokie oluturup
browser tarafna gnderiyoruz.
Response.Cookies.Add(cerez);
Response.Redirect("Hosgeldiniz.aspx");
}
}
325 | S a y f a
sayfanza girdiinde direkt olarak rnleri nbellekten ekerek
onlara gsterebilirsiniz. Bu kaynanz, veritabannz yormayaca
gibi ayn zamanda hz anlamnda da ekstra olarak bir performans
salayacaktr.
Cache.Insert("dtUrunler", dt);
326 | S a y f a
mutlaka dnen veriyi cast etmemiz gerekmektedir. rnek bir veri
ekme ilemi aadaki gibidir;
rptUrunler.DataSource = (DataTable)Cache["dtUrunler"];
rptUrunler.DataBind();
327 | S a y f a
12.10.MemberShip
Asp.Net kimlik dorulama iin bize membership api'sini sunmutur,
bylelikle hzl bir ekilde kimlik dorulama ilemlerimizi
gereklestirebiliriz.
Asp.Net membershipte kimlik dorulama ve ynetme ilemlerini
rahatlkla gereklestirebiliriz.
Asp.net membership nceden tanmlanmis yelere erierek alr
ve Membership api provider pattern'leri takip ederek configure
edilir.Bylelikle hzl ve kolay bir ekilde yelik ilemleri
gereklestirilebilir buda gelitiricilere byk kolaylklar salar
Asp.net membership iki salayc ile birlikte alr bunlar;
Sql Server ve Active Directory
Sql Server:
Sql salaycsnn ana amac, kullanc profil bilgilerini ilgili tablolarda
saklamak ve bu bilgilerle ilgili ana ilemleri stored procedure'ler ile
salamaktr.
1) Veritaban oluturulur
2) Hersey bittikten sonra Baslat -> Programlar -> Microsoft Visual
Studio 2012-13 -> Visual Studio Tools -> Visual Studio Command
Prompt alr ve alan siyah pencereye "aspnet_regsql" yazlarak
Enter'a baslr. Bunun amac veritabanmzda membershiple ilgili
olan tablolarn ve stored procedurelerin veritabanna eklenmesidir.
328 | S a y f a
kan sihirbazdan "Configure..." ile balayan seenek seilir,
veritaban ve server bilgileri dogru bir sekilde girildikten sonra Next
buttonlarna basarak tablolarn ve DB nesnelerinin veritabaniniza
entegre edilmesi salanr.
329 | S a y f a
Bu ekrandaki iimizi bitirdikten sonra veritabanmza baktmzda
membership ile ilgili btn tablolarn ve stored procedurelerin
eklendiini greceiz;
330 | S a y f a
3) C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\Config
yolunda bulunan machine.config dosyasna ulalr.
machine.config, web.config dosyalarnn asl kaltm ald dosyadr.
Projeler ayarlara ncelikle web.config'den, eger web.config'de
yoksa machine.config'den bakarak ular.
331 | S a y f a
connectionStringName => Hangi baglant cmlesi zerinden
Membership ayarlarn kullanan veritabanna ulaacaksnz?
enablePasswordRetrieval => ifreni kurtar seenei aktif olsun
mu? Bu seene true olarak iaretlerseniz, passwordFormat
zelligini de "Encrypted" olarak ayarlamalsnz. Bu sayede
ifreniz tekrar kurtarlabilir formata dndrlm olacaktr.
enablePasswordReset => ifremi sfrla seenei aktif olsun mu?
requiresQuestionAndAnswer => Gizli soru ve cevap sistemi
zorunlu tutulsun mu?
applicationName => Farkl uygulamalar altndan ilgili
membership havuzuna eriebilme ansna sahipsiniz. Buradan
yapmanz gereken tek ey, uygulamanzn tam yolunu
vermektir.
requiresUniqueEmail => E-mail adreslerinin birbirinden farkl
olmas zorunlu mudur?
passwordFormat => Clear, Encrypted, Hashed secenekleri
vardr. Clear seenegi, ifrenin kullancnn girdii ekilde,
oldugu gibi DB'ye kaydedilmesini salar. Dolaysyla gvenli
deildir. Encrypted, kullancnn ifresi ifrelerin ancak istedii
takdirde ifreyi zerek, kendi ifresini diledii yerde tekrar
grebilir.
maxInvalidPasswordAttempts => Kullanc bir defada en fazla
ka defa hatal ifre girii yapabilir?
minRequiredPasswordLength => Kullanici sifresinin minimum ne
kadar uzunlukta olacagini belirtiriz.
minRequiredNonalphanumericCharacters[minrequirednonal
panumerikkarakters] => ifre ierisinde en az ka adet alfa
numerik olmayan karakter bulunmaldr sorusuna verilen
cevaptr (@, +, - vs...)
passwordAttemptWindow => Eer kullanc ifresinin snrdan
fazla yanl girdiyse hesab kac dakikalna deaktif duruma
getirilsin?
passwordStrengthRegularExpression[passwordstrenkregularex
pression] => Sifrenizin uygun bir pattern'e gore yapilmasini
isterseniz (ilk iki karakter harf olsun, 3. ve 4. karakter alfa numerik
olmasin vs...) bu patterni buraya yazabilirsiniz..
332 | S a y f a
sonra, providers elementi icerisine "clear" elementi eklenir. Bylece
machine.config'deki geleneksel roleManager ayarlar yok saylm
olacaktr!
LOGIN
Kullancnn siteye giri yapabilmesi iin kullanlan kontroldr. Template hazr bir ekilde gelmektedir.
333 | S a y f a
Security sekmesine geliyoruz;
Use the security Setup Wizard to configure security step by step linkine
basyoruz, nex next diyerek ki adet rol tanmlyoruz;
334 | S a y f a
Eer projenizdeki klasrlere gre yetkilendirme yapmak isterseniz bunu
aadaki ekrandan yapmanz gerekir;
335 | S a y f a
12.10.1. LOGIN VIEW
Login view kontrol, kullanclarn giri yapma durumlarna gre farkl templateler gstermemize olanak
salayan kontroldr. 3 temel template ile bize destek olmaktadir.
AnonymousTemplate: Henz siteye giri yapmam kullanclar iin gsterilecek olan tm kontrol ve
grselleri bu template ierisinde oluturabilirsiniz.
LoginView taglerinin ierisine:
LoggedInTemplate: Giri yapm istisnasz her kullanc iin gsterilecek tm kontrolleri ve grselleri bu alan
ierisinde oluturabilirsiniz
RoleGroup: zel rollere, zel grselleriniz varsa (rnegin, admin rolune ait bir kullanc giri yapmisa
"UrunEkle" linkini gstermek icin) bu template kullanabilirsiniz.
LoginView taglerinin ierisine:
336 | S a y f a
ASP.NET AJAX
Bildiimiz gibi asp.net projelerinde button gibi kontroller ile sayfamzda
postback olma zelliine sahip olan kontrollerin zerindeki deerleri
tayabiliyoruz. Ancak bu ilem esnasnda tm sayfamz btn kontrolleri ile
birlikte sunucuya gnderilir, derlenir ve kullanc tarafna kts tekrar gnderilir.
Bu ilemlerin aksine biz sayfamzn tamamiyle post back olmasn istemiyor
olabiliriz, yani ilem yapacak bir blmn postback istiyor da olabiliriz, bu
durumda hayatmza ajax isminde bir teknoloji giriyor.
Bununla beraber bir takm hazr kontrolleri barndran ajax sayesinde baz efekt
ve kullanc dostu uygulamalar ok kolay bir ekilde gerekletirebilirsiniz.
337 | S a y f a
Accordion kontrol altnda eklemek istediiniz her bir accordion iin
AccordionPane blou eklemeniz gerekmektedir. erisindeki <header>
etiketi sizin accordion mennzn baln oluturacaktr. <content>
etiketi arasndaki ieriiniz ise accordion mennn aldnda
grnecek ieriini oluturacaktr.
338 | S a y f a
13.3. ASP.NET AJAX ile verileri ekmek
lk olarak veri ekeceimiz sayfann codebehind tarafnda bir
webmethod oluturuyoruz.
339 | S a y f a
Son alarak aadaki kodlar yazarak sayfamzda gerekli ilemlerin
gereklemesini salyoruz.
340 | S a y f a
Sayfamza bir button ekledik ve codebehind tarafnda buton click
eventini yazyoruz;
Update panel isimli kontrol bizim ierisinde bulunan button gibi postback
yapmaya yarayan kontrollerimizin tm sayfay deil sadece
updatepanel kontrol ierisindeki alan postback yapmamz salayan
olduka kullanl bir kontroldr.
Windows Phone 8
Windows Phone 8 teknoloji olarak temelleri Windows Mobilea
dayanmaktadr. Microsoft tarafndan gelitirilen ve Windows mobile devam
niteliinde olan bir iletim sistemi teknolojisidir. 2010 ylnn ubat aynda Mobil
341 | S a y f a
Dnya Kongresinde duyurulmutur ve Nisan ay itibariyle gelitiricilerin hizmetine
sunulmutur.
342 | S a y f a
343 | S a y f a
Bu giri sayfasnn baz xaml kodlar;
344 | S a y f a
14.1. Isolated Storage
Artk gnmzde herhangi bir uygulama gelitirirken, uygulamalarmzn
olmazsa olmazlarndan bir tanesi de kendisine ait verileri bir yerde saklama
ihtiyac duymasdr. Bir oyun oynarken Save ettiinizde, kullancnn setii
ayarlara gre ona veri sunmanzda ve bir ok yerde bununla kar karyayz.
Isolated storage kavram ite burada karmza kyor, bu kavram lokal bir
veritaban gibi uygulamarmzn ierisinde yer alyor ve dardan herhangi
bir uygulama bu dosyamza eriemiyor. Tabi ki kartrlmamas gereken
nemli bir olay var ki bu da Isolated Storage kavramnn Database
kavramndan tamamen farkl olduu. Eer yksek boyutlu verilerle kark
ilemler yapacaksanz veya girdisi kts ok boyutlu ilemleri olan veri
saklama ileriyse amacnz Isolated Storage bu konuda size bir zm
sunmayacaktr.
IsolatedStorageSettings.ApplicationSettings["kullaniciAdi"] =txtKullaniciAdi.Text;
IsolatedStorageSettings.ApplicationSettings.Save();
}
Yukardaki rnek kodlarda ilk olarak uygulamamz iin mobil telefonda bize
ayrlan alana IsolatedStoregeSetting.ApplicationSettings eklinde eritik ve
ierisine erimek istediimiz verinin etiketini yazdk. Bu alandaki deeri eittir
operatr kullanarak deitirebildik. Son olarakta .Save() metodu ile
yaptmz deiiklii kaydettik.
345 | S a y f a
14.2. Windows Phone 8 ile Wcf Kullanm
Mobile cihazlar kendi zerlerinde database bulundurmazlar. Fakat siz bir
veritabanna balanp baz ilemler yapmak isterseniz, veritabanna servisler
yoluyla balanp veri alverii yapabilirsiniz. Peki yeni nesil servis mimarisi olan
wcf servislerini phone projelerimizde nasl kullanabilir?
ncelikle PhoneTest adnda bir veritaban oluturalm.
346 | S a y f a
Visual Studio zerinde yeni bir Wcf Service Application oluturuyoruz;
347 | S a y f a
Interfacei implemente ettiimiz servicei aadaki gibi kodluyoruz:
348 | S a y f a
Servis tarafn tamamlam bulunuyoruz, imdi ise srada servis ile iletiime
geecek olan mobile applicationnmz oluturmaya geldi. Aadaki gibi
solutiona bir windows phone uygulamas ekliyoruz;
Phone app projemizi ekledikten sonra, yazm olduumuz wcf servisi projemize
entegre ediyoruz. Bu ilemi; References klasrne sa tklayp add service
reference -> Discover(solution ierisindeki servisleri bulacaktr.) -> OK
buttonuna basp servisimizi entegre etmi oluyoruz.
349 | S a y f a
MainPage.xaml adl ana sayfann xaml kodlarn aadaki gibi dzenliyoruz;
Design:
350 | S a y f a
Tasarmmz tamamladktan sonra F7 ile kod tarafna geiyoruz;
351 | S a y f a
Listeleme ileminin ardndan kullancy kayt etme aamasna geiyoruz:
352 | S a y f a
Asp.NET MVC
15.2.1. Model
Bu katmanda projedeki veri ak salanmaktadr. Veritaban ile iliki
kuran katman olmas ile birlikte alveriini yapt tm bilgileri kendi
ierisinde ileyebilme olanana sahip bir katmandr. OOP (Object
353 | S a y f a
Oriented Programming ) ile hayatmza giren Model yaps MVC ile ok
daha aktif ve ilevsel hale gelmi bulunmaktadr.
ekil 1
ekil 2
15.2.2. View
354 | S a y f a
Projede kullanclarn grd arayzdr. D dnyada kullanclar
ne gryorlarsa view sayesindedir. Proje yayna alndktan sonra view
ierisinde nasl bir kodlama var ise kullanclar taraycdan websitesini
grntlemek istediklerinde karlarna o kacaktr.
ekil 3
15.2.3. Controller
Projenin merkez noktasdr. View ile Model arasndaki ilemleri
gerekletiren Controller katman ile kullanc websitesini grntlemek
istedii anda, grntlemek istedii View ile balantl olan Controllera
gidilir orada gerekli veriler ve ilemler yapldktan sonra sayfa kullancya
gsterilir.
355 | S a y f a
ekil 4
Asp.Net ile web platformuna geerken detayl olarak ele aldmz Page
Life Cycle (Sayfa yaam dngs) aamalarnda bir kullancnn web sayfasn
grntlemek istedii anda hangi aamalardan getiini grmtk. Bu
aamalar tekrar edecek olur isek.
356 | S a y f a
ekil 5
357 | S a y f a
15.4.1. Neden Asp.Net Web Forms ?
15.4.1.1. ViewState Kullanm
Web Forms iin olduka performans kayb yaratabilen
ViewState, doru ve verimli kullanldnda bu dezavantaj
avantaja dntrlebilir.
15.4.1.2. Zengin Sunucu Kontrolleri
Web Formsda byk kolaylk salayan Asp.Net
kontrolleri(button, textbox, checkbox, gridview, dropdownlist,
listview), ok byk kolaylklar salamas itibar ile zor
vazgeilebilecek yaplarn banda gelir. Javascript, Ajax gibi
yaplar hazr olarak sunmas, validation, editr gibi kullanclarn
sklkla kulland kontrolleri basit olarak sunmas Web Formsu zor
vazgeilir klmaktadr. Birok yazlmc bu kontroller zerinden ilem
gerekletirdikleri iin MVC teknolojisine souk bakmaktadr.
358 | S a y f a
ekil 6
ekil 7
ekil 8
359 | S a y f a
oluturabilir, ileri tarihte projeyi gelitireceimiz tm sreleri iin
nemli bir zaman kazanabiliriz.
360 | S a y f a
ekil 9
361 | S a y f a
Name Descending seenekleri zerinden birini seerek proje trlerini
listeleyebiliriz.
15.5.7. Proje Tr
362 | S a y f a
Trleri arasnda yer alan ASP.NET Web Applications seeneini seerek Solution
ismini(Solution Name), lokasyonu(Location) ve proje adn(Name) belirliyoruz.
ekil 10
363 | S a y f a
15.6.1. Controller Oluturma
Yeni bir Controller oluturmak iin Solution Explorer ierisinde
bulunan Controller klasrne sa tklayp Add/Controller admlarn
izleyeceiz.
ekil 11
364 | S a y f a
ekil 12
ekil 13
365 | S a y f a
ekil 14
366 | S a y f a
ekil 15
367 | S a y f a
ekil 16
ekil 17
368 | S a y f a
ekil 18
369 | S a y f a
ekil 19
370 | S a y f a
ekil 20
Alan Add New Item sayfasnda ablon Trlerinden Visual C#, materyal
olarak ise class seili olarak gelecektir. Sadece classa vereceimiz ismi
belirleyeceiz.
ekil 21
371 | S a y f a
Gerekli deiiklikleri yaptktan sonra Add butonuna basarak Modeli
oluturuyoruz. Oluturmu olduumuz Model aadaki yap ile birlikte
gelmektedir.
ekil 22
ekil 23
372 | S a y f a
ekil 24
ekil 25
373 | S a y f a
lemleri yapp Add butonuna bastmzda Views klasr iinde
ilgili Controller adnda bir klasr oluturup ierisine ilgili Action Metodu
adnda bir View oluturacaktr.
ekil 26
ekil 27
374 | S a y f a
15.7. VIEW ENGINE NEDR ?
Asp.Net MVC ile karmza kan bir yenilik de View Engine teknolojisidir.
Web Formda da gerekli blgelerde kullandmz bu yap MVC ile birlikte
olmazsa olmaz bir hale gelmi bulunmaktadr.
HTML ierisine yazdmz C# kodlarn HTML olarak render eden, istemci
tarafl ve sunucu tarafl kodlar birlikte yazmamz salayan yapdr.
Asp.Net MVCde kullanlan View Engineler;
- Razor
- Web Form (aspx)
- Spark
- Nhalm
Bizler tm ilemlerimizi Razor View Engine kullanarak gerekletireceiz.
15.7.1.1. @ OPERATR
Asp.Net Web Formsda <%....%> bu taglar arasna C# kodlar
yazabiliyorduk. Fakat bu kullanm bizlere kark bir kod dzeni
oluturmaktayd.
MVC ile Razor View Engine yapsn kullanmaya baladmzda Client
Side(stemci Tarafl) kod yazmak bizler iin daha rahat hale gelmi
bulunmaktadr
Razor View Engine ile Client Side tarafnda C# kodlarnn yazmn @
operatr ile salamaktayz. Bylece HTML taglar ierisinde rahat bir ekilde
C# kodlar yazabilir ve istediimiz tm ilemleri karmaadan kurtarabiliriz.
375 | S a y f a
ekil 28
ekil 29
376 | S a y f a
15.7.1.2. RAZOR LE KARAR YAPILARI
377 | S a y f a
15.7.1.3. RAZOR LE DNGLER
378 | S a y f a
ekil 33 / Ekran kts
15.8.1. VIEWBAG
ViewBag dynamic tipte bir taycdr. Controller'dan ald verileri View
lara tar. Detay ie aktarrken herhangi bir tip atamas istemez hangi tipte ise
o tipte veriyi direk teslim eder.
379 | S a y f a
ekil 34
ekil 35
15.8.2. VIEWDATA
ViewData Object tipte bir taycdr. inde veri aktardmzda
herhangi bir tip atamas istemez fakat kartrken kacak tipe cast edip
unboxing ilemine tabi tutmak gerekir.
380 | S a y f a
ekil 36 / Controller Transfer
381 | S a y f a
ekil 38 / Ekran kts
15.8.3. TEMPDATA
TempData Object tipinde deer tar. ViewData ile ayn grevi
stlenir. Aralarndaki tek fark TempDatann Action Metotlar aras veri
tayabilmesidir.
382 | S a y f a
esnada ise sadece TempData ierisinde bulunan veriyi Index View da
grntleyecektir.
383 | S a y f a
ekil 42
384 | S a y f a
ekil 43
15.10.LAYOUT SECTION
Asp.Net MVC yapsnda Layout Page yapsnda RenderBody() metodu ile
belirlediimiz deiecek alan bizlere yalnzca tek bir alan salamaktadr.
Peki bizler birden fazla deiecek alan istiyor isek bunu nasl salayacaz?
Bu soruyu sorduumuzda karmza Layout Section yaps kacaktr. Bu
yap Layout Section olarak belirlediimiz farkl blgelerde deiiklikler
yapmamz salar.
385 | S a y f a
ekil 44 / Ekran kts 1
ekil 44 ve ekil 45te grnd gibi iki adet deien alanmz vardr.
Fakat burada dikkat edilmesi gereken her iki sayfada da bulunan
RenderSection() ifadesidir.
386 | S a y f a
Deiecek alan blmler RenderSection() metodu ile tanmlanr. Metot
iine her blmn birbirinden farkl olacak ekilde isimleri verilir. Kullanmak
istediimiz alanda bu isimle Layout Section lar arabiliriz.
387 | S a y f a
Yukarda grld gibi belirlemi olduumuz Layout Section lar
@section SayfaAdi{ } eklinde arabiliyoruz.
15.11.PARTIAL VIEW
ekil 48
ekil 49
388 | S a y f a
ekil 50 / Ekran kts
15.12.ROUTING
Trke de rota anlamna gelen Routing kelimesi Bilgisayar dilinde ise URL
(link) eletirme demektir. MVC de ise kullancnn istek gnderdii sayfann
hangi Controller n hangi ActionResult metodu zerinden altrlacan
belirleyen mekanizmadr.
ekil 51
389 | S a y f a
ekil 52
Eer bu ekilde proje run edilirse direk olarak Home/Index uzants ile
altrlacaktr. Eer farkl bir uzant iin istek gnderilirse bu uzant
url:{contorller}/{action}/{id} ayar zerinden ilem grecektir. Eer bu ayar
bo brakrsak Home/Index dnda herhangi bir url(link) iin istek
gnderilemeyecektir.
Farkl bir url iin Route ayar yapmak istediimizde bu ayar Default alann
stnde gerekletirmeliyiz. Bunun yaplmasnn nedeni belirlediimiz Route
dndaki herhangi bir yol iin Default Route ayarlarn almasn salamaktr.
390 | S a y f a
ekil 53
15.13.HTML HELPERS
Asp.Net MVCde Web Formsdaki gibi hazr kontroller yoktur. Hazr
kontroller yerine html inputlar kullanrz. MVC mimarisinde bu hazr yaplar yerine
bizlere birtakm yardmc metotlar sunulmutur. Bu metotlara Helper metotlar
denilmektedir.
ekil 54
391 | S a y f a
ekil 55
ekil 56
ekil 57
392 | S a y f a
ekil 58
ekil 59
393 | S a y f a
ekil 60
ekil 61
ekil 62
394 | S a y f a
15.13.5. DropDownList Helper
ekil 63
ekil 64
395 | S a y f a
15.13.6. ListBox Helper
ekil 65
ekil 66
396 | S a y f a
ekil 67
ekil 68
397 | S a y f a