You are on page 1of 397

NDEKLER

NSZ 12

1. INTRODUCTION 14

1.1. PROGRAMLAMANIN TARIHESI 14


1.2. PROGRAMLAMAYA GR 15
1.2.1. PROGRAMCI/YAZILIMCI KMDR ? 15
1.2.1.1. Yazlm 15
1.2.1.2. Yazlmc 15
1.2.2. PROGRAMLAMA TERMLER 15
1.2.2.1. Compiler 15
1.2.2.2. Compile 15
1.2.2.3. Object Oriented Programming 15
1.2.2.4. Common Language Runtime (CLR) 15
1.2.2.5. Framework 15
1.2.2.6. Visual Studio 15
1.2.2.7. Integrated Development Environment (IDE) 15
1.2.2.8. C Sharp (C#) 16
1.2.2.9. .Net 16
1.2.2.10. Syntax 16
1.2.2.11. Intermediate Language (IL) 16
1.2.3. COMPLER DERLEYCLER 16
1.2.4. COMMON LANGUAGE RUNTME (CLR) 16
1.3. VISUAL STUDIO GIRI 16
1.3.1. TANIMA 16
1.3.2. YEN BR PROJE OLUTURMAK 18
1.3.3. VSUAL STUDO PANELLER 20
1.3.4. PROGRAMLAMAYA BALARKEN : BLGLER VE KISA YOLLAR 20
1.4. YAZILIMCI DOSTU BILGILER 21
1.4.1. C#DA YORUM SATIRI 21
1.4.2. WORD WRAP 21
1.4.3. LNE NUMBERS 22
1.4.4. SCOPE 22
1.4.5. SYNTAX 22
1.4.6. INDENT GUDES 22
1.4.7. INTELLSENCE 22
1.4.8. TOOLTP 23
1.4.9. SMART TAG 23
1.5. YAZILIMA GR 23
1.6. EVENTS OLAYLAR 23
1.6.1. EVENT MANTII 24
1.6.2. EVENT DETAYLARI 25
1.7. VARIABLES (DEKENLER) 26
1.7.1. SAYISAL/METNSEL TRLER 27

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. OBJECT ORIENTED PROGRAMMING 63

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

2.3. METODS N CLASS 67


2.4. CONSTRUCTOR YAPICI METOT 67
2.5. THS KEYWORD 68
2.6. ACCESS MODFERS (ERM BELRTELER) 69
2.7. STATC CLASS VE STATC MEMBERS 69
2.8. REFERANCE TYPE VE VALUE TYPE 69
2.8.1. VALUE TYPE (DEER TP) 69
2.8.2. REFERENCE TYPE (REFERANS TP) 70
2.9. INHERTANCE 71
2.9.1. BRDEN FAZLA CLASSDAN MRAS ALMAMIZ GEREKTNDE NE YAPMAMIZ GEREKR? 75
2.10. ABSTRACT CLASS 76

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

3. MCROSOFT SQL SERVER 86

3.1. MS SQL KAVRAMLARI & TERMLER 86


3.1.1. VER TABANI (DATABASE) NEDR ? 86
3.1.2. MS-SQL SERVER NEDR ? 86
3.1.3. SERVER TYPE 87
3.1.4. SERVER NAME 87
3.1.5. AUTHENTICATION 87
3.1.5.1. Sql Server Authentication 87
3.1.5.2. Windows Authentication 87
3.1.6. LOGIN 88
3.1.7. PASSWORD 88
3.2. MS SQL TANITIM 88
3.2.1. OBJECT EXPLORER 88
3.2.2. NEW DATABASE 88
3.2.3. DATABASE ERSNDEK YAPILAR 89
3.2.4. SQLDE K DATA TYPELAR 89
3.3. NORMALZASYON 90
3.4. VERTABANI TAIMA VE YEDEKLEME LEMLER 91
3.4.1. BACK-UP RESTORE YNTEM 91
3.4.2. ATTACH DETECH YNTEM 92
3.4.3. GENERATE SCRIPTS 92
3.5. TRANSACT SQL 92
3.5.1. DATA DEFNTON LANGUAGE DDL 93
3.5.2. SYSTEM DATABASES 94
3.5.3. NORTHWND SCRPT 94
3.5.4. DATA MANUPULATON LANGUAGE DML 94
3.5.4.1. SELECT SORGULARI 94
3.5.4.2. Kolonlara sim Vermek 96
3.5.4.3. SELECT SORGULARI (Where And, Or, Between, In, Not In) 97
3.5.4.4. WHERE Sorgusu 97
3.5.4.5. BETWEEN Kullanm 97
3.5.4.6. IN 98
3.5.4.7. LIKE 99
3.5.4.8. ORDER BY 100
3.5.4.9. ZAMAN METOTLARI 102
3.5.4.10. AGGREGATE FUNCTION Btnleik Sorgular 102
3.5.4.11. SUB QUERY ALT SORGULAR 104
3.5.4.12. TOP ve DISTINCT 105
3.5.4.13. GROUP BY 106

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

4.1. VERTABANI BALANTI YNETMLER 140


4.1.1. SQLCONNECTON 140
4.1.2. KTPHANELER 140
4.1.2.1. System.Data.Common 140
4.1.2.2. System.Data.Odbc 140
4.1.2.3. System.Data.Sql ve System.Data.SqlClient 140
4.1.2.4. System.Data.Oledb 140
4.1.2.5. System.Data.ProviderBase 141
4.1.2.6. System.Data.SqlTypes 141
4.1.3. CONNECTONSTRNG YAZMAK 141
4.1.4. APPCONFG DOSYASI ERSNDE CONNECTONSTRNG KULLANMAK 141
4.2. CONNECTED MMAR 142
4.2.1. SQLCONNECTON BALANTIYI YNETMEK 142
4.2.2. SQLCOMMAND 142
4.2.2.1. SqlCommand Property(zellikleri) 143
4.2.2.2. SqlCommand Metotlar 143
4.3. DISCONNECTED MMAR 144
4.3.1. SQLDATAADAPTER 145
4.3.2. DATATABLE 145
4.3.3. DATASET 146
4.3.4. DATACOLUMN & DATAROW 147

6|Sayfa
5. ORM OBJECT RELATONAL MAPPNG 150

5.1. ORM NEDR ? 150


5.2. ENTTY FRAMEWORK 151
5.2.1. DATABASE YANSIMASINI ALMAK 151
5.2.2. DATABASE FRST 154
5.2.3. CODE FRST 155
5.2.3.1. Tablolar Aras Balanty Ayarlamak 162
5.2.3.2. Primary Key Belirlemek 165
5.2.3.3. ModelBuilder lemleri 165
5.2.4. ENTTY FRAMEWORK PERFORMANS KARILATIRMA 168
5.2.5. ENTTY FRAMEWORK VERTABANI LEMLER 169
5.2.5.1. Entity Framework Insert lemi 169
5.2.5.2. SaveChanges 170
5.2.5.3. Entity Framework IDye Gre Veri Getirme lemi 171
5.2.5.4. Entity Framework Silme lemi 172
5.2.5.5. Entity Framework WHERE Kriteri (Extension Metot) 173
5.2.5.6. Extension Metot Nedir? 174

6. NTER ARCHTECTURE OK KATMANLI YAZILIM MMARS 177

6.1. KATMANLAR 178


6.1.1. PRESENTATON LAYER (WNUI (WNDOWS USER INTERFACE), WEB) 178
6.1.2. ENTTY 178
6.1.3. BUSNESS LOGC LAYER (BLL) 178
6.1.4. DATA ACCESS LAYER (DAL) 178
6.2. KATMANLI MMARNN ALIMA MANTII 178
6.2.1. REFERANS ALMA LEM 181

7. WCF - WNDOWS COMMUNCATON FOUNDATON 186

7.1. SERVCE ORENTED ARCHTECTURE 187


7.1.1. SOANIN HEDEFLER 187
7.1.2. SOANIN STANDARTLARI 188
7.2. WCF TEMELLER 188
7.2.1. WCF ATISI ALTINDA TOPLANAN MODELLER 189
7.2.1.1. XML Web Services 189
7.2.1.2. .Net Remoting 190
7.2.1.3. Microsoft Message Queuing 190
7.2.1.4. COM+ (Component Object Model) 190
7.3. GENEL KAVRAM VE TERMLER 190
7.3.1. MESSAGE 190
7.3.2. SERVCE 191
7.3.3. ENDPONT 191
7.3.4. BNDNG 191
7.3.5. SERVCE CONTRACT 191

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

8. WINDOWS AZURE 200

8.1. WNDOWS AZURE NEDR? 200


8.2. WNDOWS AZURE UN BLEENLER 202
8.3. BULUT BLM 203
8.3.1. IAAS ( INFRASTRUCTURE ) 203
8.3.2. PAAS ( PLATFORM ) 203
8.3.3. SAAS (SOFTWARE) 203
8.4. GVENLK 204
8.5. YKSEK PERFORMANS 206
8.6. GRD COMPUTNG 207
8.7. SANAL MAKNELER 208
8.8. VER YNETM 209
8.8.1. SQL DATABASE 210
8.8.2. TABLES 210
8.8.3. BLOB STORAGE 211
8.9. WEB STES 211
8.10. A LETM 212
8.10.1. VRTUAL NETWORK 213
8.10.2. CONNECT 213
8.10.3. TRAFFC 214
8.11. KMLK 214
8.12. MEDYA 215
8.13. UYGULAMALAR 215
8.14. ACTVE DRECTORY 222
8.15. VER TABANI 228

9. HTML 235

9.1. HTML GELM 235


9.2. HTML5 TEMEL YAPISI 236
9.3. TEMEL ETKETLER 236
9.4. YAPISAL ETKETLER 244
9.5. ERK GRUPLANDIRMA 248
9.6. ERK ETKETLER 254

8|Sayfa
9.7. UYGULAMA ETKETLER 256
9.8. WEB FORMLARI 258
9.9. TABLOLAR 262

10. CSS3 265

10.1. CSS3 SECLER 265


10.1.1. TP SECLER 265
10.1.2. EVRENSEL SECLER 266
10.1.3. ID SECLER 266
10.1.4. CLASS SECLER 267
10.1.5. SOY SECLER 267

11. JAVASCRIPT 270

11.1. JAVASCRPTN ZELLKLER 270


11.2. JAVASCRPT KODLARINA GR 270
11.2.1. DOCUMENT.WRTE 271
11.2.2. ALERT 271
11.2.3. GETELEMENTBYID 272
11.2.4. ELEMENT ATTRBUTEU DETRME 273
11.2.5. STYLE DETRME 274
11.2.6. VALDATON UYGULAMA (KONTROL ETMEK) 274
11.3. JQUERY 275
11.3.1. CDN CONTENT DELVERY NETWORK 276
11.3.2. JAVASCRPTN ALIMA MANTII 276
11.3.3. JQUERY ANMASYONLAR 279
11.3.3.1. Neden Jquery 279
11.3.3.2. Neler Yapabilir? 279
11.3.3.3. Nerelerde Kullanlyor 279
11.3.3.4. Alternatif Ktphaneler 280

12. ASP.NET 280

12.1. ASP.NET SAYFA YAAM DNGS: 281


12.2. ASP.NET WEB FORMLAR 283
12.2.1. FORM ELEMENT VE ZNTELKLER 284
12.3. POSTBACK KAVRAMI 284
12.4. ASP.NET SUNUCU KONTROLLER 286
12.4.1. VEWSTATE 287
12.4.2. HTML KONTROLLER 287
12.5. VALIDATION KONTROLLER 288
12.6. DATA KONTROLLER 295
12.6.1. REPEATER 295
12.6.2. GRIDVIEW 297

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

13. ASP.NET AJAX 337

13.1. ACCORDON MENU 337


13.2. TAB CONTROL 338
13.3. ASP.NET AJAX LE VERLER EKMEK 339
13.4. LOADNG LEM 340

14. WNDOWS PHONE 8 341

14.1. ISOLATED STORAGE 345


14.2. WNDOWS PHONE 8 LE WCF KULLANIMI 346

15. ASP.NET MVC 353

15.1. MVC NEDR ? 353


15.2. MODEL VEW CONTROLER 353
15.2.1. MODEL 353
15.2.2. VEW 354
15.2.3. CONTROLLER 355
15.3. ASP.NET MVC ALIMA MANTII 356
15.4. ASP.NET MVC AVANTAJLARI DEZAVANTAJLARI 357
15.4.1. NEDEN ASP.NET WEB FORMS ? 358
15.4.1.1. ViewState Kullanm 358
15.4.1.2. Zengin Sunucu Kontrolleri 358
15.4.1.3. Olay Gdml Programlama (Event Driven Programming) 359
15.4.2. NEDEN ASP.NET MVC ? 359
15.4.2.1. Performans 359
15.4.2.2. Yeniden Kullanlabilirlik (Reuseability) 359
15.4.2.3. Test Driven Development 360
15.4.2.4. Yazlm Gelitirme Sresi 360
15.4.2.5. Kontrollerin Ynetimi iin istemci Tarafl Gelitirme (Client-Side Development) 360
15.5. ASP.NET MVC PROJES OLUTURMA 360
15.5.1. ABLON TRLER 361
15.5.2. FRAMEWORK VERSYONU 361

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

Merhaba sevgili BilgeAdam rencileri.

Sizler iin oluturmu olduumuz bu kaynak kitap, Bilge Adam


Akademide alm olduunuz Yazlm Uzmanl (.NET) eitiminin konularn
ieren ve almalarnzda size destek olacak tm konu anlatm ve rnekleri
iermektedir.

Amacmz sizler eitim grrken ders anlatmlar ile paralel olarak


gidecek, konu tekrarlarn herhangi bir d kaynaa ihtiya duymakszn
gerekletirebileceiniz yan sra ders mfredat dndaki ekstra yararl bilgilere
eriebileceiniz bir kaynak oluturmaktr.

Bu kitaptaki tm bilgiler sekin eitmenlerimiz tarafndan zenle


hazrlanm, tm rencilerin gelecek hedefleri dorultusunda kariyer planlarn
destekleyecek nitelikte bilgiler iermektedir. Sadece eitim sresinde deil
yazlm hayatnz boyunca size yol gsterebilecek dorultuda hazrlanmtr.

12 | S a y f a
YAZARLAR

Ozan OUZ

Mustafa Emin YALDIZDIR

Tuberk KUYTUL

Murat VURANOK

Alp KURTBOAN

13 | S a y f a
INTRODUCTION
1.1. PROGRAMLAMANIN TARHES

lk bilgisayar 1945 ylnda Amerika Birleik Devletlerinin II.Dnya Sava


srasnda, Amerika ordusunun bilim insanlarndan sava srasnda birtakm
hesaplamalar daha hzl yapabilmek iin bir istekte bulunmasyla retildi. Ordunun
amac daha hzl hesaplar yaparak savataki stratejisini gelitirmekti.

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.

Programlama dillerinin hespisinin kendine zg zellikleri vard fakat nesneye


dayal programlama olarak adlandrdmz OOP mimarisi hi bir dilde yoktu. Bu
sebeple OOP modeli gelitirilerek C diline entegre edildi bylece ortaya C++ dili km
oldu. Ardndan OOP dilleri tremeye balad. C++n ardndan Java km ve byk

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. Programlama Terimleri

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.3. Object Oriented Programming


Nesneye ynelik programlama, gnlk hayattan nesneleri bilgisayar ortamna
tamamz salayan bir yntemdir.

1.2.2.4. Common Language Runtime (CLR)


Ortak Dil alma Platformu C# dilinin derleyicisidir.

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.

1.2.2.6. Visual Studio


Microsoft tarafndan gelitirilen ve bir ok programlama dilini destekleyen bir IDEdir.

1.2.2.7. Integrated Development Environment (IDE)


Yazlm gelitiricilerinin hzl ve rahat bir ekilde yazlm gelitirebilmesini amalayan,
gelitirme srecini organize edebilen birok ara ile birlikte gelitirme srecinin verimli

15 | S a y f a
kullanlmasna katkda bulunan aralarn tamamn iinde barndran bir gelitirme
ortamdr.

1.2.2.8. C Sharp (C#)


C++ dili zerine eklemeler yaplarak, Microsoft tarafndan gelitirilen yazlm gelitirme
dilidir. C++ da ++ ifadesi C dili zerine Nesneye Ynelik Programlama
eklenmesinden kaynaklanmaktadr. # ifadesi ise C++da bulunan Nesneye Ynelik
Programlamada bulunan eksiklikler ve mantk hatalarnn dzenlenmesinden dolay
C++ dilinden sonraki isim C++++ yerine drt adet + karakterlerinin birlemesiyle # olarak
kullanlmtr.

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.

1.2.2.11. Intermediate Language (IL)


Ortak dil anlamna gelmektedir.

1.2.3. Compiler Derleyiciler


Bir programlama dilinde yazlm olan kaynak kodu makine diline eviren yazlmdr.

1.2.4. Common Language Runtime (CLR)


Ortak dil alma platformu, .Net alt yapsnda programlarn almasn denetler ve
programn iletim sistemi ile iletiim kurmasndan sorumludur. C# program kodu MSIL
Assemblye, Assembly'i de CLRe evrilerek altrlabilir bir makina koduna dnr.
Bu .NET programlarnn derlenip altrlma mantdr.

CLR ksaca yazlan programn tm iletim sistemlerinde almasn salamakla


grevlidir. rnein biz java ile yazlm bir oyunu Windows iletim sistemine sahip bir
bilgisayarda oynamak istediimizde, Java Runtime Environment bilgisayarmza
kurmalyz.

1.3. VISUAL STUDIO GR


1.3.1. Tanma
Microsoft tarafndan gelitirilen ve bir ok programlama dilini destekleyen bir IDEdir.
Birok programlama dilini ve standartlar destekler. Eklentileri ile gelitirici araclarn
arttrr ve kod yazmay kolaylatrarak hzlandrr.

16 | S a y f a
Bizler C Sharp kodlarmz Visual Studio
isimli IDEde yazacaz. Yava yava
Visual Studioyu tanmaya
balayabiliriz.

Visual Studio aldnda karmza


Start Page ekran gelecektir. (Resim
1.1)

Bu ekran Visual Studio kullanclar iin


baz bilgilendirmeler ve ksa yollar salamak iin bulunmaktadr.

Sol tarafta bulunan panelden, proje bilgilerini ynetebiliriz.

New Project : Yeni bir proje oluturmak iin kullanabileceimiz ksa yoldur. Dilersek; File
mens altndan New > Project yolunu izleyerek proje oluturabiliriz.

Open Project : Daha nceden oluturduumuz bir projeyi amak iin


kullanabileceimiz seenektir. Projeyi amak iin alan pencereden proje yolu
bulunur ve proje
ierisindeki .sln uzantl
dosya seilerek alr.

Solution Dosyas (.sln) :


Microsoft Visual Studio
iersinde program
hazrlarken daha
dzenli almay
salayan metin tabanl
bir dosyadr. .sln
uzantl dosyalar
altrmak iin Visual
Studio programna
ihtiya vardr.

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.

1.3.2. Yeni Bir Proje Oluturmak


Alan pencereyi
kullanarak yeni bir
proje oluturabiliriz.

Alan pencerede sol


tarafta bulunan
Templates seenei
altndan, Visual C#
seenei seilir.

Visual C# altnda
bulunan
kategorilerden hangi
platform iin alacamz semeliyiz.

Windows : Windows sekmesi C# dili ile Desktop (Masast) uygulamalar gelitirmek iin
kullanlan yaplar tutar.

Web : Web tabanl uygulamalar iin kullanabileceimiz yaplar tutar.

Office : C Sharp kodlarmz, Microsoft Office programlar ile kullanabileceimiz yaplar


ierir.

Cloud : Microsoft Azure platformu zerinde alacamz zaman kullanacamz yapy


barndrr.

Silverlight : Silverlight uygulamalar gelitirirken kullanacamz yaplar ierir.

18 | S a y f a
WCF : Servis odakl mimariye dayal yaplar ierir. Projelerimizde servis altrmak
istediimizde gerekli yaplar WCF sekmesi altndan oluturabiliriz.

Alan pencerede bulunan alandan projemizin .net Framework versiyonunu sememiz


gerekmektedir. Framework versiyonlar arasnda ki farkdan ilerleyen konularda
bahsedeceiz.

Kullanacamz templatei setikten sonra istediimiz item belirlememiz gerekiyor. Biz


ilk olarak Windows Form Application nesnesini seiyoruz.

.Net Framework versiyonunu setikten sonra hemen yannda bulunan Sort By seenei
ile aada bulunan platformlar isimlerine gre sralayabilirsiniz.

Projemiz ile ilgili isim, kayt yeri ve solution bilgilerini belirleyebiliyoruz.

Name : Oluturduumuz projemizin ismidir.

Location : Oluturulan proje dosyas hangi dizine kayt edilecek bilgisidir.

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.

1.3.3. Visual Studio Panelleri


Yeni bir proje oluturduktan sonra karmza visual studio panelleri gelecektir. Bu
panelleri kullanarak projemizi ekillendirebilir ve kolaylkla ynetebiliriz. u anda
kullanacamz paneller

Solution Explorer
Properties Window
Toolbox

Solution Explorer Paneli ile visual studio programn tanmaya balayalm.

Solution Explorer

Oluturduumuz projenin dosyalarn ynetmek iin


kullandmz paneldir. Solution Explorer panelini kullanarak
projemize yeni yaplar, klasrler ve dosyalar ekleyebilir ve bu
dosyalar ynetebiliriz.

Toolbox

C Sharpda kullanabileceimiz kontrollerin bulunduu ara


kutusudur. Projemiz ierisinde kullanmak istediimiz kontrolleri
srkle brak yntemiyle veya toolbox penceresinde kontroln
zerine ift tklama ile projemize eklenebilir. Projelerimizde
kullanacamz kontrollerin tamam bu pencerede ki
kontrollerden oluturmaktr.

Properties Window

Kullandmz kontrollerin ve formun zelliklerini deitirebildiimiz


paneldir. Varsaylan deerleri barndrr. Kontrollerimize ait tm zellikleri bu panelden
deitirebiliriz. Kolay kullanm asndan alnabilecek sabit deerleri de listeler.

1.3.4. Programlamaya Balarken : Bilgiler ve Ksa Yollar

App.config : Configuration dosyasdr. Projemiz ile ilgili ayarlarn bulunduu dosyadr.


leriki konularda Application Configuration dosyasnn detaylarn inceleyeceiz.

References : Ktphane dosyalarnn bulunduu paneldir.

Code Behind : C Sharp kodlarmz yazabildiimiz ekrandr.

20 | S a y f a
F4 : Properties penceresini aar.

F5 : Hazrladmz projeyi derler ve altrr.

F6 : Hazrladmz projeyi derler.

F7 : Hazrladmz formda Code Behind ekranna gei yapar.

CTRL + Shift + B : Hazrladmz projeyi derler.

Designer.cs Dosyas : Projemizde kullandmz kontrollerin boyutlarn, renklerini ve


benzeri bilgilerini tutan dosyadr.

1.4. YAZILIMCI DOSTU BLGLER


1.4.1. C#da Yorum Satr
C Sharpda kodlarmza aklama satrlar ve notlar brakmak isteyebiliriz. Bu notlar
ileriye dnk gelitirmeye kolaylk salar. Csharpta yorum satrlar aadaki gibi
kullanlr. C Sharpda yorum satrlar koyu yeil renktedir.

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
*/

1.4.2. Word Wrap


Visual C Sharpda uzun kod satrlar, yatay olarak sayfay uzatr. Biz satr sonuna
geldiimizde kodlarmzn alt satrdan devam etmesini isteyebiliriz. Bu zellii amak iin
aadaki yolu takip edebilirsiniz.

Tools > Options > Text Editor > All Languages


Yolu altnda bulunan Word Wrap Seenei iaretlenir.

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.

Tools > Options > Text Editor > All Languages


Yolu altnda bulunan Line Numbers Seenei iaretlenir.

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.

private void Form1_Load(object sender, EventArgs e)


{//Scope Balangc

}//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.6. Indent Guides


Visual Studio ortamna daha kolay gelitirme
yapmak iin eklentiler kurabilirsiniz. Bu eklentiler sizin daha kolay proje gelitirmenize ve
kodlarnz daha kolay okumanza olanak salar. Indent Guides bize scope balang
ve bitilerini gsteren ve alp-kapanan scopelar noktal izgiler ile birbirine balayan
bir eklentidir. Indent Guides kurmak iin aadaki admlar takip edebilirsiniz. Sa
tarafta bulunan resimde scope balang ve bitileri .. ile iaretlenmitir.

Tools > Extensions and Updates penceresi alr.


Alan pencerede sol taraftan Online seenei seilir. Visual Studio Gallery
ierisinde Indent Guides eklentisini bulup Install butonu ile kurulumu
yapabilirsiniz.
Kurulumdan sonra Visual Studioyu batan balatmanz gerekmektedir.

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.

Intellisense penceresi kapandnda, CTRL + Space tu kombinasyonu ile tekrar


aabilirsiniz.

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.4.9. Smart Tag


Baz kontrollerin ok kullanlan zelliklerini Smart Tag penceresinde bulunur. Belirli
kontrollerin en ok kullanlan zelliklerine daha hzl eriim kolaylg salar.

1.5. YAZILIMA GR
Artk yava yava kod tarafna geme vaktimiz geldi. lk kod rneimizi yazmadan
nce bir takm kurallar bilmemiz gerekiyor.

C Sharpda dikkat edilmesi gereken kurallar;

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.

Kod yazmaya balamadan nce birka terimi bilmemiz gerekiyor.

1.6. EVENTS OLAYLAR


Event, belirli bir olayda veya belirli bir zamanda meydana gelen yada
meydana gelmesini istediimiz ilemleri tasarlayacamz olaylarn btndr.

Eventler, bir kontrol kullanmamz iin gereken zaman kavramlardr.


Kullanacamz kontroln zaman kavramlarn yneterek kod yazabiliriz.

Bizler kontroln zaman kavramlarn ok iyi bilmeliyiz. rnein bir TextBoxn


eventlerinden bahsedecek olursak;

TextChanged : Textbox ierisinde girilen yaz deitiinde hangi kodlarn


alaca yazlr.

23 | S a y f a
MouseDoubleClick : Mouse ile ift tklandnda hangi
kodlarn alaca yazlr.

MouseMove : Mouse ile Textbox zerinde hareket


edildiinde yaplacak kodlar yazlr.

Yukarda bahsettiimiz kontrollerin eventlerinde


zaman kavramna dikkat etmemiz gerekir. Alt izili
olan yazlarda bir zaman kavram bulunmaktadr.

1.6.1. Event Mant


Bir programc zaman kavramlarn ok iyi biliyor ve bu
zaman kavramlarn ok iyi ynetebiliyor olmaldr.

Programlamann temelinde iki soru vardr. Bu iki sorunun


mant tam olarak kavrandnda kod yazmak ok
kolaylaacaktr.

Soru 1 : Ne zaman yapacam?

Soru 2 : Ne yapacam?

Yukardaki sorular bir rnek ile aklayalm.

Soru 1 : Ne zaman yapacam? rnek Cevap : Butona tkland zaman

Soru 2 : Ne yapacam? rnek Cevap : Kullancya mesaj gstereceim.

Yukardaki soru ve cevap rneini incelemek iin aadaki admlar uygulayabiliriz.

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)
{

Eventimiz ierisine Grntlenecek yazmz yaptryoruz.


private void Form1_Load(object sender, EventArgs e)
{
MessageBox.Show("Hello World");
}

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.

Kullancya mesaj grntlendikten sonra Tamam butonuna basarak bu pencereyi


kapatabiliriz. Burada ki buton isimlerinin Trke veya ngilizce olmas iletim sisteminin
diliyle ilgilidir.

1.6.2. Event Detaylar

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.

Hazrladmz projede yapmak istediimiz, Checkbox kontrolne tklandka butonun


aktifliini deitirmektir. Biz checkbox kontroln iaretlediimizde buton aktif olacak,
iareti kaldrdmzda ise pasif olacaktr.

Bu ilemi yapabilmek iin ncelikle checkbox kontrolnn seiminin deitii zaman


kontrol eden eventi bulmalyz. Checkbox kontrolnde bu ii stlenen event
CheckedChanged eventidir. Checkbox iaretlendiinde ve iaret kaldrldnda bu
event alr.

Checkbox kullancdan seimler yapmasn istediimizde kullandmz bir kontroldr.


Aadaki kodlar Checkbox kontrolmzn CheckedChanged eventine yazmamz
gerekmektedir.

private void chkAktifMi_CheckedChanged(object sender, EventArgs e)


{
btnTikla.Enabled = chkAktifMi.Checked;
}

= (eittir) C Sharpda atama operatr olarak kullanlmaktadr. Sadaki deeri sol


tarafa atar. Buradaki nemli nokta birbirine eitlenebilir deerler birbirine
eitlenebilirdir.

1.7. VARIABLES (DEKENLER)


Bizler projelerimizde her zaman sabit verilerle almayz.
Kullancdan veri almamz gereken durumlar olabilir veya biz
projemiz alrken baz verileri deitirmek isteyebiliriz. te
byle bir durumda kullanabileceimiz yaplar olan
Deikenleri kullanrz.

Deiken, verilerimizi ram zerinde saklayan alanlardr. Biz


bilgisayarlarmzda yaptmz her ilemi RAM isimli para zerinden yaparz.

Random Access Memory (RAM)

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.

RAMin amac bizler bilgisayarlarmzda ilem yaparken, Hard Disk gibi


yaplarn yava almasndan dolay, ilemlerde bekleme yaamamamz iin
vardr. RAM yap olarak yksek hza sahip olan donanmlardandr.

C Sharpta tipler Reference Type ve Value Type olarak ikiye ayrlr. Bunlara veri tipleri
denir.

Veri tipleri, bellekte ayrlacak blgenin bykln belirlemek iin kullanlr.

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.

1.7.1. Saysal/Metinsel Trler

C#'ta hem metinsel hem de saysal olmayan trler de vardr:

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.

Tr Boyut Aklama rnek

DateTime 8 byte Tarih ve Zaman Tutar Datetime zaman = Datetime.now

Deikenler trlerine gre ikiye ayrlr;

1.7.2. VALUE TYPE ve REFERENCE TYPE


Deikenlere giri yaptmzda, deikenlerin Value Type (Deer Tipi) ve Reference
Type (Reference Tipi) olarak ikiye ayrldn sylemitik. Yukarda C Sharp dilinde
bulunan veri tiplerinden bahsettik.

imdi veri tiplerimizin neden Reference Type ve Value Type olarak ikiye ayrldndan
bahsedeceiz.

Daha nceki konularmzda RAMin yapsndan bahsetmitik. RAM temel olarak


baktmzda iki blmden oluur. Bu blmler HEAP ve STACK blmleridir.

1.7.3. HEAP ve STACK


.Net uygulamalarnda kullanlan deikenlerin ve nesnelerin RAM bellek zerinde
sakland alanlardan en temel olanlardr. Bu veri alanlar .net Framework tarafndan
ynetilirler. C++ gibi dillerde, deikenlerin hangi blmde, ne kadar sre duracan
yazlmc belirliyordu. Ama yeni nesil programlama dillerinde bu ilem framework
tarafndan ynetilir. Kullanlan veri tipleri, belirli kurallara gre bellein ilgili ksmlarnda
saklanr.

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.

Tip belirlemesinden sonra deiken ad belirlenir. = den sonra oluturduumuz


deikene deer atayabiliriz.

Deiken Tanmlarken Dikkat Etmemiz Gerekenler;

Bir deerleri olmaldr veya mutlak suretle null olarak tanmlanmaldr.


Deikenin deeri oluturulduu anda verilmek zorunda deildir.
Tanmlama yaparken byk-kk harf ayrm vardr.
Deiken adlar rakamla balayamaz.
Class, namespace ve kontrol isimleri gibi program tarafndan kullanlan isimler
verilemez.
Ayn kod blou ierisinde ayn isimden birden fazla deiken tanmlanamaz.
zel karakter iermez rnein /,*,-,+.
Boluk kullanlamaz.
Trke karakter kullanlmamaldr. , ,,,, gibi
zel szckler (if, else, random, vb.) kullanlmaz.

Textboxa Girilen Yazy Deikene Atamak


//Formun Load Eventini Oluturuyoruz.
private void Form1_Load(object sender, EventArgs e)
{

29 | S a y f a
string degisken = textBox1.Text; //Textbox'dan gelen deeri, deikenimize aktaryoruz.
}

1.7.4. Local ve Global Deikenler


C Sharpda oluturduumuz yaplarn scope alanlarna gre eriilebilirlik durumlar
vardr. Bunlara yaam alan denir. Bir event ierisinde tanmlanan bir deikene baka
bir event ierisinden eriemeyiz. Bir deikene birden fazla event ierisinde erimek
istediimizde deikeni scope alanlar darsnda yani global alana tanmlamamz
gerekmektedir.

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.

1.7.4.1. Local Deikenler


Belirli bir event veya metoda bal deikenlerdir. Yaam alanlar (eriilebilecek yer)
sadece bal olduklar scope alanlaryla snrldr. rnein Formun Load eventinde
tanmladmz bir deikene baka bir eventten eriemeyiz.

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.

Global Deiken Tanmlama


public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

//Global Deiken Tanmlama


string globalDegisken = "Bu Global Bir Deikendir.";

//Forma ift tklayarak Load Eventini oluturabiliriz.


private void Form1_Load(object sender, EventArgs e)
{
globalDegisken = "Formun Load Eventinden Global'de Tanmlanan Deikene Eriebiliriz.";
}

//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.";
}
}

1.7.5. Atama Operatr


Yazld yerin sanda bulunan deer, eittirin soluna aktarlr.

Yukardaki rnekte Textbox kontrolnn Text zelliinde ki (Property) deer string


tipindeki deikenimize aktarlmtr.

Atama Operatrnde dikkat edilmesi gereken ok nemli bir nokta vardr.

SADECE ETLENEBLR DEERLER BRBRNE ETLENR.

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.

1.8. CONVERT LEMLERI


Veri tipler arasnda dnm yapmak iin kullanlr. rnek vermemiz gerekirse C#
programlama dilinde string ifadeler ift trnak arasnda yazlr. Ayn zamanda 23 de
bir string ifadedir. Ama 23 ayn zamanda bir saydr. 23 ifadesini ift trnak ierisine
aldmzda string ifade elde etmi oluruz. Ancak biz 23 saysn bir matematiksel ileme
tabi tutacamz zaman, 23 deerini say olarak elde etmeliyiz.

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...

1.9. HATA YNETIMI


1.9.1. Exception Handling
Hata ynetimidir. Yazlmclar farkl trlerde, bir ok hata ile karlaabilirler. nemli olan
nokta karlatmz hatalar zebilmek ve bu hatalar ksa srede doru bir ekilde
kontrol altna alabilmektir. Bir hata ile karlatmzda bu hatalarn ncelikle ne tr bir
hata olduunu bilmemiz gerekmektedir. Hatalar kendi ierisinde gruplara ayrlr.

1.9.2. Syntax Errors (Derleme Zaman Hatalar)


Syntax hatalar, bir yazlmcnn en ok karlaaca hata eitidir. Hatay bulmak ve
ynetmek kolaydr. Error List penceresinde hata mesaj grnr. Syntax Hatalarn
dzeltmediimiz zaman program almayacaktr.

Gelimi bir IDE olan Visual Studio anlk olarak kodlarmz kontrol edecek ve bize yardm
edecektir.

1.9.3. Runtime Errors (alma Zaman Hatalar)


Programda bir syntax hatas olmamasna kar, kullancnn yanl bilgi girmesi veya
programcnn kontrol altna almad bir durum sonucu karlalan hatalard. Bu tr
hatalardan korunmak iin kullanlan yaplar bulunmaktadr.

1.9.4. Logical Errors Mantksal Hatalar


Mantksal hatalar, tespit edilmesi en zor hata eitidir. Syntax olarak hata vermemekle
birlikte, runtime hatalar gibi programda bozuklua sebep olmaz. Yazdmz kodlar
istediimiz sonucu dndrmyorsa Mantksal bir hata ile kar karya olabiliriz. Mantksal
hatalar tespit etmek iin Runtime srasnda kodlarmz adm adm kontrol etmemiz
gerekebilir.

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.

1.9.5. Error List


Syntax hatalarmz grntleyebileceimiz penceredir. Projeyi derlediimiz zaman
projede ki syntax hatalar Error List penceresinde grntlenecektir.

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.

Error List penceresinde hatalarmz dnda Warnings sekmesi altnda uyarlarda


grnr. Warnings sekmesinde kan mesajlar hata deildir. Projemiz ierisinde
bulunan kodlar hakknda bize uyar verirler. rnein bir deiken oluturduysak ve bu
deikeni kullanmadysak, RAMde gereksiz yer kaplad bilgisini verir. Projenizin
almasna engel deildir.

1.9.6. Try Catch Finally


Runtime hatalarn ynetmek iin kullanlr. Yazlmcnn n gremedii durumlarda
hatay engellemek veya kullanc kaynakl hatalar kontrol altna almak iin kullanlan
yapdr.

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.

Try Catch Finally Bloklar


try
{
string deger = "5";
int sayi = Convert.ToInt32(deger); //Eer gelecek deer bir say ise dntrme ilemi baaryla
gerekleecektir. Eer deger deikeninden gelen bir harf veya farkl bir karakter ise kod blou
hata verecektir.
}
catch
{
//deger deikeninden bir harf veya zel karakter geldiinde catch blou almaya balar.
MessageBox.Show("Ltfen say girin.");
}
finally
{
//Form Temizleme
//Textbox Odaklanma
//gibi ilemler yaplr.
}

Try Catch Kullanm Hatay zelletirme


try
{
double sayi1 = Convert.ToInt32(txtSayi1.Text);
double sayi2 = Convert.ToInt32(txtSayi2.Text);
double sonuc = sayi1 / sayi2;
lblSonuc.Text = sonuc.ToString();
}

catch (FormatException ex) // Format Hatas olduunda hata verir.


{
MessageBox.Show("Ltfen doru formatta veri giriniz.");
}
catch (OverflowException ex) //Deiken snrlar dna ktgnda hata verir
{
MessageBox.Show("Deiken snrlar dna ktnz.");
}
catch (DivideByZeroException ex) //Saylar sfra blmeye alrsan yakalar
{
MessageBox.Show("Sfra blnme hatas .. Say Sfr 'a blnemez");
}
catch (Exception ex) //Geri kalan tm hatalar denetler
{
MessageBox.Show(ex.Message);
}
Exception ex kod satrndaki ex catch blounun zelliidir.. Bu zellik ierisinde
karlalan hata ile ilgili tm bilgileri tutar. MessageBox.Show(ex.Message); gibi bir komutla
altrdgmzda yakalanan hatann mesajn kullancya gsterir. Tm catch
bloklarnda hatalar ex ismi ile yakalyoruz. Ayn isme sahip baka exler olmasna

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.

1.9.7. Break Point


Break Point (Duraklama Noktas) debug ilemi srasnda kod akn takip
edebileceimiz ve Runtimeda dnen deerleri program alrken izleyebileceimiz
zelliktir. Proje alrken verileri anlk olarak izlememize hangi kod satrnda hangi ilem
yapldn program alrken incelememize olanak tanr.

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.

Shift + F11 : Kod blounda ki ak bitirir.

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.

1.10.1. Aritmetik Operatrler

35 | S a y f a
1.10.1.1. Matemetik Operatrleri

Operatr lem Grevi


+ Toplama lemi Verilen saylar matematiksel toplama ilemine tabi
tutar.
- kartma lemi Verilen saylar matematiksel kartma ilemine tabi
tutar.
* arpma lemi Verilen saylar matematiksel arpma ilemine tabi
tutar.
/ Blme lemi Verilen saylar matematiksel blme ilemine tabi tutar.
% Mod Alma lemi Saynn xe blmnden kalan verir.
1.10.1.2. Arttrma Operatrleri

Operatr lem Grevi


Sayi++ Arttrma Yanna yazld saynn deerini 1 arttrr. Baka ilem varsa
nce sayy arttrr ve daha sonra ileme devam eder.
Sayi-- Azaltma Yanna yazld saynn deerini 1 azaltr. Baka ilem
varsa nce sayiyi azaltr ve sonra ileme devam eder.
++sayi Arttrma Yanna yazld saynn deerini 1 arttrr. Baka ilem varsa
nce o ilemi yapar ve sayy sonra arttrr.
--sayi Azaltma Yanna yazld saynn deerini 1 azaltr. Baka ilem
varsa nce o ilemi yapar ve sonra sayy azaltr.
1.10.1.3. Birleik Operatrler

Operatr lem Grevi


+= Topla ve Aktar Toplama ilemlerini daha ksa yoldan yapmak iin
kullanlan operatrlerdir. Grevi sonuc = sonuc + 5 gibi
bir ifadeyi ksa yazmaktr. sonuc += 5 dediimizde iki
ifade ayn ilemi yapacaktr. Bunun danda string
birletirme iinde kullanlabilir.
-= kart ve Aktar karma ilemlerini daha ksa yoldan yapmak iin
kullanlan operatrlerdir. Grevi sonuc = sonuc 5 gibi
bir ifadeyi ksa yazmaktr. sonuc -= 5 dediimizde iki ifade
ayn ilemi yapacaktr. Bunun danda string birletirme
iinde kullanlabilir.
*= arp ve Aktar arpma ilemlerini daha ksa yoldan yapmak iin
kullanlan operatrlerdir. Grevi sonuc = sonuc * 5 gibi
bir ifadeyi ksa yazmaktr. sonuc *= 5 dediimizde iki
ifade ayn ilemi yapacaktr. Bunun danda string
birletirme iinde kullanlabilir.
/= Bl ve Aktar Blme ilemlerini daha ksa yoldan yapmak iin kullanlan
operatrlerdir. Grevi sonuc = sonuc / 5 gibi bir ifadeyi
ksa yazmaktr. sonuc /= 5 dediimizde iki ifade ayn
ilemi yapacaktr. Bunun danda string birletirme iinde
kullanlabilir.

1.10.2. Mantksal Operatrler

Operatr lem Grevi

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.

1.10.3. likisel Operatrler

likisel operatrler boolean sonu dndrr.

Operatr lem Grevi


== Eit Mi Verilen iki deerin eit olma durumunu kontrol eder.
!= Eit Deil Mi Verilen iki deerin eit olmama durumunu kontrol eder.
> Byk M Birinci deerin, ikinci deerden byk olma durumunu
kontrol eder.
< Kk M Birinci deerin, ikinci deerden kk olma durumunu
kontrol eder.
>= Byk Eit Mi Birinci deerin, ikinci deerden byk veya eit olma
durumunu kontrol eder.
<= Kk Eit Mi Birinci deerin, ikinci deerden kk veya eit olma
durumunu kontrol eder.

1.11. RANDOM SINIFI


Rasgele say retmemiz gereken durumlarda kullanabileceimiz snftr. Rasgele say
retme ilemi, bilgisayardan veriler toplayarak bu verilerin belirli bir algoritmadan
geirilerek say dorusu zerinde belirttiimiz deerler arasnda bize bir say retmesi
sonucuyla oluur.

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.
}

1.12. DATETIME SINIFI


Tarih ve saat formatnda bilgi tutabileceimiz snftr. eitli formatlarda tarih bilgisi
tutabiliriz. Tarih bilgisinin ierisinden istediimiz deeri ekebilir, istediimiz formatta
bilgileri gsterebiliriz. DateTime snfnda veri tutmak iin;

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.

1.12.1. Timer Kontrol


Milisaniye cinsinden belirtilen zaman aralklarnda kodlarmz altrmak iin
kullandmz kontroldr. rnein bir ilemin 10 saniyede bir kez yaplmasn
istediimizde kullanabiliriz. Bu ilemi yapmak iin kullancnn herhangi bir butona
tklamas gerekmez. Timer kontrol otomatik olarak 10 saniyede bir alacaktr.
Aadaki projeyi gelitirebilmek iin timer kontroln kullanacaz. Timer kontrol
alrken kullanc baka ilemler yapabilir.

Timer ierisinde altrlacak kodlar Timern Tick eventi ierisinde yazlr. Timer ile ilgili
baz ayarlar aada grebilirsiniz.

Timer ile lgili Ayarlar


timer1.Start(); //Timer altrmak
timer1.Stop(); //Timer durdurmak
timer1.Interval = 10000; //Timern ka milisaniyede bir alaca..

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
}

//Timer Kontrolnn Tick Eventi


private void timer1_Tick(object sender, EventArgs e)
{
lblGorunum1.Text = DateTime.Now.ToString(); //u anki tarih ve saati Bilgisini Verir.
lblGorunum2.Text = DateTime.Now.ToShortTimeString(); //Saat:Dakika Bilgisini Verir.
lblGorunum3.Text = DateTime.Now.ToShortDateString(); // Gn.Ay.Yl Bilgisini Verir.
lblGorunum4.Text = DateTime.Now.ToLongTimeString(); // Saat:Dakika:Saniye Bilgisini Verir.
lblGorunum5.Text = DateTime.Now.ToLongDateString(); //Tarih ve Saat Bilgisini Detayl Verir.
}

1.13. KARAR YAPILARI


C Sharp programlama dilinde, kod ak yukardan aaya doru hi bir satr
atlanmakszn devam eder. Ama programclarn baz durumlarda kod akna yn
vermesi gerekebilir. te bu tr durumlarda kod akna yn vermek iin kullanacamz
yaplara Karar Yaplar denir.

Verilen arta gre, kod akna yn verebiliriz yani istediimiz kodlar programdan
saklayabilir veya istediimiz kodlar altrabiliriz.

1.13.1. IF Else Else IF

En ok kullanlan karar yapsdr. Tm gelimi programlama dillerinde karar yaplar


bulunmaktadr. Verdiimiz arta gre;

art salanyorsa : istediimiz kodlar altrabiliriz.

art salanmyorsa : belirttiimiz kodlar program tarafndan okunmadan geilir.

IF Else yaps verilen artlar tek tek kontrol ederek, artn saland durumda ilemleri
gerekletirir.

Bir rnekle aklayalm;

BilgeAdamda ubeye geldiniz. lk ders gnnzde Labnz bulmanz gerekiyor.


Sadece Lab bilgisine sahipsiniz. Labn hangi katta olduunu bilmediinizden tek tek
Lablar dolap, dersinizin olduu Lab bulmanz gerekir. Her Laba baktnzda
elinizde ki Lab bilgisi ile kapda yazan Lab bilgisini karlatrrsnz ve doru sonuca
ulaana kadar bu ilem devam eder.

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.

likisel Operatr rnekleri

5 < 10 True (5 says 10 saysndan kktr.)

7 > 11 False (7 says 11 saysndan kktr.)

3 == 3 True (3 says 3 saysna eittir.)

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;

if (sayi == 3) //Say 3'e Eitse


{
MessageBox.Show("Say 3'e eittir.");
}
else if (sayi < 3) //Say 3'den kkse
{
MessageBox.Show("Say 3'den kktr");
}
else //Say eit veya kk deilse else basama alr
{
MessageBox.Show("Say 3'den byktr.");
}

Mantksal Operatrler

3 < 10 && 3<15 (3 says, 10 ve 15 saysndan kktr.)

Yukardaki ilemde

3 < 10 True sonucu dndrr.

3 < 15 True sonucu dndrr.

&& 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.

Switch Case rnek Uygulama


//Buttonun Click Eventi
private void btnHesapla_Click(object sender, EventArgs e)
{
int sonuc = 0; //Sonucu tutacamz deiken
switch (cbOp.SelectedText)
{
case "+": //Eer ComboBox'da Toplama ilemi seildiyse
sonuc = Convert.ToInt32(txtSayi1.Text) + Convert.ToInt32(txtSayi2.Text);
break;

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");
}

Yukardaki rnei Ternary IF kullanmadan yapmak istediimizde aadaki gibi


yazmamz gerekirdi.

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.

Bu tr durumlarda kodlarmz yaplacak ilem says kadar yazmak yerine dng


yaplarn kullanabiliriz. Belirlediimiz sayda ayn ilem gerekleecektir.

C Sharp programlama dilinde drt dng eidi bulunmaktadr. Her bir dngnn
kendine gre kullanlaca yerler ve durumlar olabilir.

1.15.1. For Dngs


Bir ii belirli sayda yapmamz salayan dngdr. Dng ierisinde, dngnn
balang deeri, biti deeri ve art miktarn berlileyebiliriz.

For dngsnn yaps

Dngnn Balang Deeri : Dngmzn hangi deerden balayacan belirtiriz.

Dng Biti Deeri : Dngnn art olarak dnebiliriz. Dngnn balang ve biti
deerini kontrol ederek dngmzn ne kadar alacan belirleyebiliriz.

terasyon : Dngnn balang deerini arttrmak iin kullanlr.

For Dngs - Syntax


for(<donguBaslangicDegeri); <Sart>; <iterasyon>)
{
//Dng Her dndnde alacak kodlar
}

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 rnek iin; forma ift tklayarak Load eventini oluturuyoruz.

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.

rnek 2015 ile 1935 aras yllar ComboBoxa Listeleyen Program

private void Form1_Load(object sender, EventArgs e)//Form altnda


{
for (int i = 2015; i >= 1935; i--)
{
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.

1.15.2. While Dngs


For dngs gibi, bir ii belirli sayda yapmamz salayan dngdr. For dngsnden
farkl olarak dng balang deeri ve iterasyon bilgisi dng ierisinde belirtilmez.

Syntax
int deger = <baslangicDeger>;
while(sart)
{

47 | S a y f a
alacak Kodlar
alacak Kodlar
alacak Kodlar
alacak Kodlar
}

rnek 10 kez dnen While Dngs


int deger = 0;
while (deger < 10)
{
deger++;
}

1.15.3. Do While Dngs


Do while dngs, while dngs ile ayn yapya sahiptir. While dngsnde ki gibi
iterasyon ve dngnn balang deeri dng darsnda belirtilir. Tek fark, Do While
dngs ne olursa olsun en az 1 kez alr. Dier dngler art salandnda alrken,
do while dngs art ne olursa olsun bir kez alacaktr. Bunun sebebi do while
dngsnde artn dngnn sonunda kontrol edilmesidir.

Syntax
do
{
//YAPILACAK LEMLER
} while (<sart>);

1.15.4. Foreach Dngs


Koleksiyon yaplarnda kullanlacak bir dng eitidir. Dizi, Generic List gibi yaplarda
kullanlr. Foreach dngsne mdehale edilemez.

Foreach Syntax
<KoleksiyonTipi>[] <koleksiyonAdi> = {<deger>, <deger>, <deger>};
foreach (<Tip> <gelenDeger> in <Koleksiyon>)
{
//Yaplacak lemler
}

Foreach Dngs rnei


private void Form1_Load(object sender, EventArgs e)//Form altnda
{
//Dizimizi tanmlyoruz.
string[] ogrenciler = { "Ozan", "Alp", "Tuberk", "Mustafa", "Murat" };

//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

Bizler, projelerimizde belli bal nesneleri program hazrlarken olutururuz. Bu oluturma


ilemini tm nesnelerimiz zerinde kullanabiliriz. Fakat kullanc program kullanrken yeni
bir nesne oluturma talebinde bulmak isterse, proje alrken yeni bir nesne
oluturmamz gerekebilir. Bunun en gzel rnei Upload sitelerinde ska rastladmz
birden fazla dosya seme ilemi olabilir.

Program alrken bir Button Oluturma


private void Form1_Load(object sender, EventArgs e)//Form altnda
{
Button btn = new Button();
}

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.

Intance alma ilemi, RAM zerinde oluturduumuz bir nesneye, nesneyi


oluturduumuz snftaki tm zellikleri aktarmak olarak tanmlayabiliriz. Instance
ilemini Object Oriented Programming (Nesneye Ynelik Programlama) konusunda
detayl olarak inceleyeceiz.

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.

Runtimeda oluturulan Buttonun Eventini Kullanmak


private void Form1_Load(object sender, EventArgs e)//Form altnda
{
Button btn = new Button();
btn.Click += btn_Click; //Click eventini ardktan sonra += yazar ve TAB tuuna iki kez
basarsak Event Runtime'da oluturulur.
}

void btn_Click(object sender, EventArgs e) //Runtime'da oluturulan Buttonun Eventi


{
//Yaplacak lemler
}

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.

Gelitirilebilir bir yap sunar.


Kod kalabaln engeller.
Tek elden ynetim salar.
Merkeziyeti kod yaps gder.

Metotlar yaplarna gre drt balk altnda incelenebilir.

Geriye Deer Dndrmeyen ve Parametre Almayan Metotlar


Geriye Deer Dndrmeyen ve Parametre Alan Metotlar
Geriye Deer Dndren ve Parametre Almayan Metotlar
Geriye Deer Dndren ve Parametre Alan Metotlar

Yapacamz ilere gre yukardaki metot yaplarndan birini kullanabiliriz. Metot


oluturmaya balamadan nce metot oluturmann Syntaxn dan ve Standartlarndan
bahsedelim.

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.

1.17.2. Metot simlendirme


Metotlar isimlendirirken dikkat etmemiz gereken nemli standartlar bulunmaktadr.
Metot isimlerinde kullanlan kelimelerin ilk harfi byk yazlr ve metot isimleri Emir
Kipleriyle yazlmaldr.

1.17.3. Geriye Deer Dndrmeyen ve Parametre Almayan Metotlar


Geriye deer dndrmeyen ve parametre almayan bir metodu oluturmak iin
ncelikle bilmemiz gereken geriye dn tipini belirtmektir. Eer bir metot geriye dn
yapmayacaksa bu metot void olarak iaretlenmelidir.

Geriye deer dndrmeyen ve parametre almayan bir metodun syntax aadaki


gibidir.

Geriye Deer Dndrmeyen ve Parametre Almayan Metotlarn Syntax


<GeriyeDonusTipi> <MetotAdi>()
{
//Metot ierisinde Yaplacak ilemler
//Metot ierisinde Yaplacak ilemler
//Metot ierisinde Yaplacak ilemler
//Metot ierisinde Yaplacak ilemler
}

Geriye Deer Dndrmeyen ve Parametre Almayan Metot rnei


void IkiSayiyiTopla()
{
int sayi1 = 10;
int sayi2 = 15;
int sonuc = sayi1 + sayi2;
MessageBox.Show(sonuc.ToString());
}

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());
}

//Formun Load Eventi


private void Form1_Load(object sender, EventArgs e)
{
IkiSayiyiTopla(); //Metodumuzu aryoruz.
}

//Buttonun Click Eventi


private void button1_Click(object sender, EventArgs e)
{
IkiSayiyiTopla();
}

//TextBox'n Text Change Eventi


private void textBox1_TextChanged(object sender, EventArgs e)
{
IkiSayiyiTopla();
}

Yukarda ki kod rneinde Buttonun Click Eventinde, TextBox kontrolnn


TextChanged Eventinde ve Formun Load eventinde ayn kodlar sadece metodu
ararak altrm olduk.

1.17.4. Geriye Deer Dndrmeyen ve Parametre Alan Metotlar


Bir metot dardan parametrelerde alabilir. Bunun iin metodun syntaxn
incelediimizde metot adndan sonra ap kapattmz (parantez) ler ierisinde
parametrelerimizi belirleyebiliriz. Metot yannda alan bu parantezlere Metot
Parantezleri denir. Eer metot bir parametre almayacaksa (Geriye Deer
Dndrmeyen ve Parametre Almayan metotlarda ki gibi) metot parantezleri alr ve
kapanr. erisine herhangi bir parametre tanmlamas yaplmaz. Bir metot snrsz sayda
parametre alabilir.

Snytax
<GeriyeDonusTipi> <MetotAdi>(<ParametreTipi> <ParametreAdi>, <ParametreTipi>
<ParametreAdi> ...)
{
//Metot ierisinde Yaplacak ilemler
//Metot ierisinde Yaplacak ilemler
//Metot ierisinde Yaplacak ilemler
//Metot ierisinde Yaplacak ilemler
}

Dardan gnderilen iki sayy toplayan bir metot yazalm.

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());
}

Metodumuzda dardan girilen iki sayy toplatmay amaladk. Parantezler ierisinde


tanmladmz sayi1 ve sayi2 bizim dardan metodumuza gndereceimiz
parametrelerdir. Peki parametre gnderme ilemini nasl yapacaz. Metodu birden
fazla event altnda armay deneyelim.

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.");
}
}

//Buttonun Click Eventi


private void button1_Click(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.");
}
}

//TextBox'n Text Change Eventi


private void textBox1_TextChanged(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.

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.

1.17.5. Geriye Deer Dndren ve Parametre Almayan Metotlar


u ana kadar geriye deer dndrmeyen metotlar inceledik. Bir metot geriye deer
dndrmediinde void olarak geriye dn tipi belirtiyoruz. Peki bir metot geriye bir
deer dndrecekse ne yapmamz gerekiyor. Geriye deer dndren bir metot
yazmak iin ilk adm geriye dn tipimizi belirlemektir..

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.

Kullanc Bilgileri girdikten sonra butona tkladnda bilgiler istediimiz formatta


MessageBoxda grntlensin. Kodlarmz yazmaya balayalm. ncelikle
Metodumuzu oluturalm.

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.

MessageBox.Show(bilgi);//Dnen bilgiyi ekranda gsterdik.


}

//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.

int yas = DateTime.Now.Year - Convert.ToInt32(dogumYili); //imdiki tarihten doum yln


karyoruz ve ya elde ediyoruz.

//String format ile bilgileri gsteriyoruz.


return string.Format("Sayn {0} {1}, Yanz : {2}", ad, soyad.ToUpper(), yas);

//ToUpper() metodu, yaznn tamamn byk harfe evirir.


}

Yukardaki kodlar altrdmzda, butona tklandnda aadaki resimdeki mesaj


gsterilecektir.

1.17.6. Geriye Deer Dndren ve Parametre Alan Metotlar


Geriye deer dndren parametre alan metotlar, girilen parametrelerin sonucunda
ilemler yaplarak geriye bilgi gnderen metotlardr.

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.

MessageBox.Show(bilgi);//Dnen bilgiyi ekranda gsterdik.


}

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.

//String format ile bilgileri gsteriyoruz.


return string.Format("Sayn {0} {1}, Yanz : {2}", ad, soyad.ToUpper(), yas);

//ToUpper() metodu, yaznn tamamn byk harfe evirir.


}

1.18. STRING METOTLAR


String veri tipine zellemi metotlardr. String ifadeler zerinde deiiklik ve dzenleme
yapmak iin kullanlr. ok sayda string metot bulunmaktadr.

1.18.1. Trim Metodu


Trim metodu string ifadede bulunan belli karakterleri batan ve sonran silen metotdur.
Trim metodu boluklar temizleyebilir. Metot kullanmnda dilersek kendi karakterlerimizi
belirleyebiliriz. Verilen string ifadenin banda ve sonunda bulunan karakterleri
temizlemek iin kullanlr.

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.
}

1.18.2. Equals Metodu


Eitlik sorgulamas yapar verilen iki string ifadenin birbirine eit olup olmadn kontrol
eder. Eitlik durumu sonucunda boolean deer dner. Boolean deeri kullanarak bu
metodu karar yaplarmz iinde 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);
}
}

Yukardaki program derlediimizde, butona her tkladmzda 15FT-98AA-4FT9-


CC37 gibi bir kt sunacaktr.

1.20. MATH KTPHANESI


Hazr olarak onlarca matematiksel fonksiyonu bize sunan temel snftr. Yuvarlama
islemleri, PI bilgisi, karekk, kuvvet vs...

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..

Biz kendi ihtiya duyduumuz yaplar


nasl tanmlayacaz. .Net Framework
bize ok gelimi ve kolay kullanlan bir
yap sunar. Kendi ihtiya duyduumuz
yaplar Framework ortamnda tanml
olmayacak. Button, Random vb snflar
Framework ortamnda tanmldr. Artk
kendi snflarmz oluturabilmemiz
gerekiyor.

Nesneye Ynelik Programlama, istediimiz nesneyi bilgisayar ortamna tayabilir.


rnek vermek gerekirse Word programndaki bo sayfa.. Gnlk hayattan bir A4
sayfay bilgisayar ortamna tamaktr.

Sa tarafta bulanan resimdeki nesneyi (Tablet Bilgisayar) bilgisayar ortamna tayalm.

ncelikle bir class olutururken sormamz gereken sorular vardr.

Oluturmak istediiniz nesne nedir? (rnekde : Tablet)

Bu sorunun cevab bana oluturacam classn adn verir.

Bir nesnenin zellii vardr.

Bu sorunun cevaplar oluturacamz classda hangi zelliklerin olacan bulmamz


kolaylatrr.

Bir tabletin arl vardr. (double)

Bir tabletin genilii vardr. (double)

Bir tabletin ykseklii vardr. (double)

63 | S a y f a
Bir tabletin markas vardr. (string)

Bir tabletin modeli vardr. (string)

Bir tabletin mac adresi vardr. (string)

Bir tabletin ilemci modeli vardr. (string)

Bir tabletin ekran znrl vardr. (string)

Bir tabletin rengi vardr. (Color)

Bir tabletin 3G vardr. (bool)

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.

2.2. Class Object Mentality Snf ve Nesne Mant


Nesneye Ynelik Programlamay kullanabilmek iin iki yapy ok iyi anlamamz
gerekmektedir.

2.2.1. Class - Snf


Snflar (Class); nesne retmek iin kullandmz kalplardr. Bilgisayar ortamnda
tanmlayacamz her bir class, bizim nesneler retmemizi salar. rnein ben bir insan
class tanmlamak istediimde oluturacam class tm insanlarda bulunan zellikleri
tar. Sa rengi, gz rengi, boy, kilo ve dier zellikler snf ierisinde tanmlanr ama
ierisine deer atanmaz.

2.2.2. Object Nesne


Oluturduumuz snflardan nesneler retebiliriz. Nesne retmek iin classmzn bir
rneini RAM zerine kartmamz gerekir. Bu ileme instance alma ad verilir. Class
zerinde deer atamas yaplamaz, ama classdan rettiimiz nesneler zerinde deer
atamalar gerekletirir.

zetlemek gerekirse, Class genel bir tanmdr. Tm nesnelerdeki zellikleri ierisinde


barndrr ama nesne, classdan retilecei iin snfda ki tm zellikleri tar ve ierisine
deer alabilir.

2.2.3. Field and Property


Bizler verileri saklamak iin deikenleri kullanrz. Deikenler RAM zerinde verileri
saklamak iin kullanlan yaplardr. Bizler classlar ierisinde bir deiken oluturup bu

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.

Peki neden deiken deilde, Field-Property yapsn kullanyoruz.

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.

Field ve Property ilikisini bir rnekle aklayalm.

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.

Arka plan kodlarn gizleme : Oluturulan class ierisinde kullancnn ilemlerini


daha kolay gerekletirmesi iin baz ilemleri birletirerek (kapsllenerek) tek
ilem gibi gsterilir. rnein veritabanna balant ileminde, biz sadece
balant deikeninin Open() metodunu kullanmaktayz. Fakat class ierisinde
kullancdan ald parametreleri kullanarak balanty gerekletirmek iin
birok metot bulunmaktadr. Bu metodlar kullancya gsterip balanty
saglayabilmek iin bunlari su sekilde birlestirin demek yerine bu islem sinif
ierisinde yapilmis ve kullancnn kolaylikla kullanabilmesi iin Open() metodu
oluturulmutur.

Deikenlere tam eriimi engelleme : Class ierisinde olusturduumuz global


deikenlere dardan erimek iin public olarak tanimlama yapmaktayiz.
Fakat bazen bu degkenlerin deerlerini deitirmek istemeyebiliriz. Fakat
kullanmamz da gerekebilir. Bu durumda deikenimizi kapsllememiz
gerekmektedir. Yani, bu deikeni private olarak tanmlamak ve bir read-only
property ile bu deikenin yazma iznini ortadan kaldrmamz gerekmektedir.

Class
class Urun
{
int _id; //id bilgisine dardan eriimi engelledik.

public int Id //_id field'na dardan eriilemeyecek fakat field'tan


tretilen property daryla haberleip field'tan deer alp darya atacak,
dardaki deeri alp field'a ulatracaktr.
{
get { return _id; } // field'taki deeri d dnyaya gnderir
set { _id = value; } // dardan alnan deeri field'a basar
}

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:

2.3. Methods in Class


Classlar sadece ierisinde zellikleri tamaz ayn zamanda metodlarda barndrabilir.
Bir classn zelliklerini belirlemek iin Bir classn .. s vardr sorusunu kullanyorduk.
Metotlar iin ise, Bir class .. yapabilir mi sorusunu sorabiliriz.

Class ierisinde kullandmz metotlar, hazrladmz snf ile ilgili ilemleri yapar.

2.4. Constructor Yapc Metot


u ana kadar instance alma ileminde Button btn = new Button(); eklinde bir kod
kullandk. imdi instance alma ilemini detayl inceleyip Constructorn ne olduundan
bahsedelim.

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();
}

private void Form1_Load(object sender, EventArgs e)


{

}
}

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.

2.5. This Keyword


This; bu anlamna gelmektedir. Programlama dilindeki anlam zerinde altmz
sayfa olarak tanmlanabilir. rnein Form1 classn da Runtimeda yeni bir kontrol
oluturup kontrol forma eklemek istediimizde

this.Controls.Add(kontrolAdi);

Komutunu kullanrz. Burada kullandmz this zerinde altmz class temsil


etmektedir. This yazarak altmz sayfa zerindeki tm property ve metotlara
eriebiliriz.

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.

Private : Bu eriim belirteci ile tanmlanan eler sadece tanmlandklar snf


(class) ya da yap (struct) iinde eriilebilirler. En kstlayc belirtetir.
Public : Kstlama yoktur. Public olarak tanmlanan eler ayn projeden ya da
kendisini referans olarak gsteren dier projeler tarafndan eriilebilirler.
Protected : Bu ekilde tanmlanan eler, tanmlandklar snf (class) ya da yap
(struct) veya bu snflardan tretilmi dier snflar ierisinden eriilebilirler.
Internal : Internal tanmlanan classlar bulunduklar proje ierisinde her yerden
eriilebilir ancak baka bir proje tarafndan kullanlamazlar.
Protected Internal : Bu belirte uygulanan enin Protected ya da Internal
olduunu vurgular. Yani Protected Internal bir e ayn proje iindeki tm
snflardan eriilebilecei gibi, bulunduu snftan tretilmi dier snflardan da
eriilebilir.

2.7. Static Class ve Static Members


Static olarak iaretlenen bir class veya classn ierdii bir eleman proje altrldnda
dorudan RAM bellek zerine kartlr. Static olarak iaretlenmi bir yapy kullanmak
iin instance alma ilemeni yapmak zorunda kalmayz. Instance alma ilemi
kullanlacak yapnn RAM bellek zerine kartlmasn salar. Fakat static olarak
iaretlenmi bir yap proje altnda zaten RAM bellek zerine kartlaca iin
instance alma ilemine gerek kalmamaktadr.

Static olarak iaretlenmi ve .net Framework ortamnda tanml olan classlarda vardr.
Bu classlara rnek vermek gerekirse;

MessageBox Snf
Math Snf
Guid Snf

2.8. Reference Type ve Value Type


CSharpta tipler referans type ve value type olmak zere ikiye ayrlrlar.

2.8.1. Value Type (Deer Tipi)


Value Type deer tipleri, RAM zerinde ki STACK alannda yaarlar. STACK alannda
alan yerde dorudan deiken ierisindeki bilgi tutulur. Int,bool, double, float vb.
deerler STACK alannda saklanmaktadr. Deer tiplerinin belli aralklar bulunmaktadr.

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.

Aadaki resimde deer tiplerini ve sahip olduklar deer aralklarn grmektesiniz.

2.8.2. Reference Type (Referans Tipi)


Referans Type ise deiken RAMin HEAP alannda yaar. String, object veri tipleri ve
classlar RAMin Referans Tipleri arasndadr. Referans tiplerinin deerleri HEAP alannda
tutulurken, STACK alannda, deeri iaret eden bir adres bulunur. Biz veriyi okumak
istediimizde, STACK zerinde ki referans adresinden, HEAPde verinin tutulduu alana
giderek veriye ulaabiliriz.

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.

Biyolojide ki kaltm zellii, canllardaki zelliklerin yeni canllara aktarlmasdr. Ayn


yntemle bizde oluturduumuz classlar arasnda bir kaltm zellii salayabiliriz. Bu
kaltm zelliini kullanarak zellik ve yetenekleri Base class olarak tabir edilen ana
classdan retilmi olan classlara miras brakabiliriz.

Inheritance bize ne salar?

Gelitirilebilir bir yap


Kontrol edilebilir classlar
Tek elden ynetim

En sade ekli ile: inheritance sayesinde bir snfn metodlarn ve propertylerini kullanan
baka snflar tretilebilmesini salar diyebiliriz.

Aadaki rnekte bir irketin departmanlarn oluturalm. Firmamzda bulunan


departmanlar

Muhasebe Departman
nsan Kaynaklar Departman
Teknik Servis Departman

Yukarda bulunan departmanlar OOP ile oluturalm. Buradaki nemli nokta bu


departmanlarda alan her bir kii bir insandr.

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; }

//Muhasebe Departmanna Ait zellikler


public bool MaasBilgileriniGorebilir { get; set; }
public bool MaasBilgileriniDegistirebilir { 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; }

//nsan Kaynaklar Departmanna Ait zellikler


public bool IseAlabilir { get; set; }
public bool UcretBelirleyebilir { get; set; }
public bool CalismaSaatiBelirleyebilir { 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; }

//Teknik Servis Departmanna Ait zellikler


public bool AgKurabilir { get; set; }
public bool TeknikDestekVerebilir { get; set; }
public bool BilgisayarAlabilir { get; set; }
}

Yukardaki classlarda farkl departmanlara ait bilgileri grmektesiniz. Bu


departmanlarda tekrarlayan bilgiler dikkatinizi ekmitir. Insana ait zellikler tm
departmanlarda ayn olmaldr. Yukardaki yapda bir OOP yaps oluturduumuzda
gelitirilebilirlik ve ynetilebilirlik zor olmaktadr. Firmaya ait onlarca departman
olduunu dndmzde Insana ait yeni bir zellik eklediimizde veya bir zellii
kaldrdmzda tm classlar ierisinde bu deiiklii yapmamz gerekmektedir. Bunun
dnda insana ait bilgileri tm classlarda tanmlamamz gerekmektedir bu da bizim iin
kod tekrar demektir.

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..

ncelikle insana ait bir class oluturup tm departmanlarda bulunan insanlarn


zelliklerini bu class ierisine ekliyoruz.

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; }
}

Yukardaki kod satrlarnda class adndan sonra yazdmz : Insan tanmlamas,


classmzn Base Class tanmlamasdr. Yani propertyleri, metotlar vb. dier yaplar
Insan classndan miras alabilecei anlamna gelir. Miras alnan class, Base classn tm
zelliklerini kullanabilir.

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.)

2.9.1. Birden Fazla Classdan Miras Almamz Gerektiinde Ne Yapmamz


Gerekir?
Aadaki class rneide; bir timsahn bilimsel snflandrlmas yaplmaktadr. Timsah bir
hayvandr. Ayn zamanda timsah bir srngendir. Bu rnekten yola karak;

Timsah ve Bukalemunun kaltm zelliklerini hazrlayalm.

Dikkat etmemiz gereken nokta, C Sharp dilinde Multi-Inheritance zellii


bulunmamaktadr. Yani yukarda da bahsettiimiz gibi bir classn birden fazla Base
Class olamaz.

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; }
}

2.10. Abstract Class


Abstract Class, ortak zellikli Classlara Base Class olma grevini stlenir. Abstract
Classlar, dier snflara base Class olmak iin yazlr. Bu nedenle Abstract Classdan
nesne tretilemez.

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.

Deikenleri abstract olarak iaretleyemeyiz.

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.

rnein; bir firma iin hazrladmz programda

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, Musteri.cs, Firma.cs isimleriyle class oluturuyoruz. Srasyla classlarmzn


ieriini aadaki gibi dzenleyin.

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.

ToString() metodu virtual olarak iaretlenmitir.

2.12. Delegates ve Eventler


Bir olay gerekletiinde birden fazla fonksiyonu armak istediinizi dnelim.
rnein kullanc bir dmeye tkladnda birden fazla method'un otomatik olarak
arlmasn istiyorsunuz. Bunun iin delegate kullanabilirsiniz.

2.12.1. Deletegate Olutururken izlenecek admlar

1.Tanmlama-Declare
2.rneklenme-Instance
3. arma - Invoke

Delegateler baka fonksiyonlara araclk eden zel fonksiyonlardr.

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);

//Delegate ierisinde kullanlacak metot.


static int Carp(int sayi1, int sayi2)
{
return sayi1 * sayi2;
}

//Console Uygulamas
static void Main(string[] args)
{
//Delegate' in instance' n oluturalm.
MyDelegate delege = new MyDelegate(Carp);

//Deleagate aralm ( invoke)

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.

Program zaman aralklarna gre ynetebiliriz, kullancnn ilem yapt zamanlar


programlayarak ilemlerimizi yapabiliriz.

C Sharpda en ok kullanlan eventler ve aklamalar aadadr.

Kontrol Event Aklama


Tm Kontroller Click Kullancnn kontrole tklad zaman aralnda tetiklenen eventtir.
Tm Kontroller DoubleClick Kullancnn kontrole ift tkl zaman aralnda tetiklenen eventtir.
Tm Kontroller MouseClick Kullancnn kontrole mouse ile tklad zaman aralnda tetiklenen
eventtir.
Tm Kontroller MouseDoubleClick Kullancnn kontrole mouse ile ift tklad zaman aralnda tetiklenen
eventtir.
Tm Kontroller MouseMove Kullancnn ilgili kontrol zerinde fare imlecini hareket ettirdiinde
tetiklenen eventtir.
Tm Kontroller MouseEnter Kullancnn ilgili kontrol zerine mouse ile geldiinde tetiklenen eventtir.
Tm Kontroller MouseLeave Kullancnn kontrol zerinden ayrlndnda tetiklenen eventtir.
Tm Kontroller MouseDown Mouse tuuna basldnda tetiklenir. Click olayndan nce alan bir
olaydr.
ComboBox, SelectedIndexChanged Seili index deitiinde tetiklenen eventtir.
Listbox, ListView

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.

Genelde byk lekli projelerde nem kazanmaktadrlar. Interface yaplarn


interface anahtar szc ile tanmlarz. Ara birimleri snflar zerinde uygulamak iin
ise : iareti kullanlr ve standart olarak interface isimleri I harfi ile balar, tabi bu bir
zorunluluk deildir. Fakat bu ekilde kullanlmas standart olarak kabul edilir. Burada ki
I harfi Interfacein ilk harfidir.

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

Garsonun servis yapma yetenei vardr. Ama patronun ve mterinin bu


yeteneklere sahip olmamas gerekir.
Patronun ve mterinin deme Yapma yetenei vardr. Ama garsonun deme
yapma yetenei olmamal.

Yukarda bahsettiimiz Garson, Mteri ve Patron classlarnn hepsi insan classndan


tremi olacaktr. Biz ParaOde(), ServisYap() gibi metotlar insan classnda m
tanmlamalyz?

ParaOde Metodu -> Mteri ve Patron Classnda tanmlanacak

ServisYap Metodu -> Garson Classnda tanmlanacak

Yukardada belirttiimiz gibi ParaOde metodu birden fazla yerde kullanlacak. Peki
ben metodumu her class iin ayr ayr tanmlamak zorundamym?

ParaOde yeteneini Insan classnda tanmlarsak, garsona da ParaOde yeteneini


kazandrm oluruz.

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 Classn, Birden fazla Base Class olamaz!

te bu durumda interface devreye giriyor.

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.

Dosyay oluturduumuzda aadaki kodlar bize oluturacaktr.

IUcabilir.cs
public interface IUcabilir
{
//Aada geriye dn tipi int olan Uc isimli bir metot tanmlyoruz.
int Uc();
}

Interfaceler ierisinde metodun gvdesi doldurulmaz ve eriim belirtei belirlenmez.


Sadece metod tanmlamas yaplr. Biz interface ierisinde sadece yapmz
tanmlyoruz.

Yukarda oluturduumuz interfacei uabilen kulara yetenek olarak kazandrabiliriz.


Bu ileme Interface Implament etmek denir. Oluturduumuz yetenei classmza
kazandrmak iin aadaki kodlar inceleyiniz.

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.
{

Yukardaki ilemi tamamladktan sonra projeyi derlediimizde aadaki hata ile


karlaacaz.

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.

Yetenei classa kazandrmak iin virglden sonra yazdmz IUcabilir tanmlamasnn


zerine tklyoruz ve CTRL+. (Kontrol + nokta) tu kombinasyonunu kullanyoruz.
Implament Interface IUcabilir seeneine tklyoruz ve classmzn ierisinde metodun
gvdesiyle birlikte olutuunu grebiliriz.

Karga.cs
public class Karga : Kus, IUcabilir //Yeteneimizi ekledik.
{
public int Uc()
{
throw new NotImplementedException();
}
}

Dosyamz Implament ettiimizde metodumuzu gvdesi doldurulmak zere hazrlad.


imdi yapmamz gereken tek ey metodumuzun gvdesini doldurmak Metod
ierisinde kargann uu mesafesini dndryorum.

Karga.cs
public class Karga : Kus, IUcabilir //Yeteneimizi ekledik.
{
public int Uc()
{
return 50; //Karga 50 birim yksekten uabilir
}
}

Peki mart uabilirmi? -Evet..

Yukarda yaptmz ilemi yapalm. IUcabilir interfaceini yetenek olarak ekleyip,


dosyamz implament edelim. Artk mart classmzda Uma yetenei kazanm
olacaktr.

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
}
}

Penguen ve Tavuk Uabilir Mi? Hayr..

O zaman IUcabilir interfaceini penguen ve tavuk classlarna yetenek olarak


kazandrmyoruz. Yani uabilenler iki tane ama hepsi kutur.

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.

Forma eklediimiz butonun Click Eventi


private void btnDoldur_Click(object sender, EventArgs e)
{
//Ku classndan rettiimiz tm classlardan instance alyoruz.
Marti m = new Marti();
Karga k = new Karga();
Tavuk t = new Tavuk();
Penguen p = new Penguen();

//Instance aldmz nesneleri listbox'a ekliyoruz.


lstClasslar.Items.Add(m);
lstClasslar.Items.Add(k);
lstClasslar.Items.Add(t);
lstClasslar.Items.Add(p);
}

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
}
}

Gzel, Penguen classna yzme yeteneini kazandrdk. Martda yzebilecei iin,


mart classnada yzme yetenei kazandryoruz. Daha nceden mart classna uma
yetenei kazandrmtk. kinci yetenek olarak yzme yeteneinide kazandryoruz.

Marti.cs
public class Marti : Kus, IUcabilir, IYuzebilir //Yzme yeteneimizi , den sonra ekliyoruz.
{
public int Uc()
{
return 100; //Marti 100 birim yksekten uabilir
}

public int Yuz()


{
return -50; //Marti -50 birimden yzebilir
}
}

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.

Microsoft SQL SERVER

3.1. MS SQL Kavramlar & Terimleri


Microsoft SQL Servern ne olduuna gemeden nce veritaban kavramn
aklayalm;

3.1.1. Veri Taban (Database) Nedir ?


Veritaban, dzenli veriler topluluudur. Birbirleri ile ilikili verilerin tekrarna yer
vermeden ok amal olarak depolanmasna olanak salayan yapya Veritaban
denir.

3.1.2. MS-SQL Server Nedir ?


Microsoft SQL Server en ok kullanlan veritaban sunucu yazlmdr. Veritabanlarnn
oluturulmasn ve ynetilmesini salayan kurumsal apl Veritaban Ynetim Sistemidir.

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.3. SERVER TYPE


Server Typeda Database Engine dnda servislerimiz bulunur. RDB-MSde MS ksm
veritabanlarn ynetme farkl farkl hizmetler sunmay salar. Burda ki servisler
Raporlama Servisi, Analiz Servisi, Entegrasyon servisi gibi. Bizler veritabanlarn ynetmek
iin Database Enginei kullanacaz.

3.1.4. SERVER NAME


Server name; bir ip adresidir. Hangi servera balanmak istiyorsak ip adresini Server
Name alanna yazarz. Biz kendi bilgisayarmzda alacamz iin, kendi
bilgisayarmz server olarak kullanacamz iin, kendi bilgisayarma girmek iin Server
Namee Bilgisayar Adn, Bilgisayarmn IP Adresini, localhost, . yazabilirim. Farkl farkl
yazmak balant yolunu deitirir.

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.

3.1.5.2. Windows Authentication


Kendi bilgisayarmzdaki Sql Servera balanyorsak kullanrz. Windows Authentication
seili iken bizden kullanc ad ve ifre istemez. Eer seersek, bilgisayarda oturum
atm kullancnn girii ile balanmay dener.

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.

3.2. MS SQL Tantm


3.2.1. Object Explorer
Veritabanlarn ynetebildiimiz
pencere. tanmlama, servisler gibi
ilemlerin tanmland yerler bulunur.
Biz security ve databases ile
ilgileneceiz.

Databasede sorgulama yapmay


renmek iin Microsoftun bize sunduu hazr bir DataBasei kullanacaz. Northwind
diye geer. Hazr tablolar ve verileri bulunan zerinde sorgulamalar yapabildiimiz bir
veritabandr. Sqlin renilmesi iin hazrlanmtr.

3.2.2. New Database

DATABASE NAME : Veritabanmza vermek istediimiz isim.

OWNER : Default braktnzda giri yaptnz kullancnn bu veritabanna sahip


olduunu syler. Bazen sknt karabiliyor. stersek direkt olarak yneticinin adn
yazabiliriz.

LOGICAL NAME : Database iin alacak dosyalarn isimleridir.

FILE TYPE : Dosya tipimizi belirler. SQLde dosya tipi ikiye ayrlr.

1. MDF (Meta Data File)


2. LDF (Log Data File)
Mdf : Veritabanna girmi olduum verilerin asl tutulur. Yani veritabanna eklediim
bilgilerin kendisi tutulur.

88 | S a y f a
Ldf : Log dosyasdr. Veritabannda yaplan ilemlerin loglarn tutar. (u kullanc u
ipden giri yapt, u bilgiyi gncelledi gibi..)

FILE GROUP : Veritabann paralamak iin kullanlr. Primary yazyor. stersem


Secondary diye bi grup daha aarm bu da farkl bi diskte farkl bir alan tutabilirim. Veri
kurtarmakda ve performansl almasnda ie yarar.

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.

AUTOGROWTH : Otomatik art deeridir. Veritaban ierisindeki veriler veritaban


boyutunun snrna ulatnda bu alanda belirlenen deer kadar veritaban boyutu
arttrlr.

3.2.3. Database erisindeki Yaplar

Database Diagrams : Database tablolarn ve tablolar arasndaki ilikiyi grp


ynetmek iin kullandm grsel ksmdr.

Tables : Database ierisinde bulunan tablolarmzn bulunduu ksmdr.

Views : Viewlarmzn bulunduu ksmdr.

Security : Database gvenliidir. Databasee hangi kullanclar balanabilir ve hangi


ilemleri yapabilir gibi bilgilerin tutulduu ksmdr.

Programmability : Kendi yaplarmz tanmlayp veritabanna aktarabildiimiz ksmdr.

3.2.4. SQLde ki Data Typelar

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)

char(10) : Belirlediim kadar boluk aar ve sylediim karakter saysndan az ka


karakter kullanrsam kullanaym verdiim karakter says kadar yer tutar.

nchar(10) : Charn tm karakterleri destekleyen hali

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.

nvarchar(10) : varcharn tm karakterleri destekleyen hali

int : Saysal deerleri tutar.

bit :Boolean deer tutar.

datetime : Tarih ve saat formatnda deer tutar.

date : Tarih formatnda deer tutar.

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.

Normalizasyon (Ayrtrma), veritabanlarnda ok fazla stun ve satrdan oluan bir


tabloyu tekrarlardan arndrmak iin daha az satr ve stun ieren alt kmelere
ayrtrma ilemidir.

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

Primary Key : Referans veren taraf. Anahtar ile simgelenir.

Foreign Key : oklu tabloda bulunan taraftr.

Bire Bir liki


Bire ok liki
oka ok liki

3.4. Veritaban Tama ve Yedekleme lemleri


3.4.1. Back-Up Restore Yntemi
Databasee sa tklanr. Task sekmesi altnda Back-Up seenei seilir. (rnein C:nin
altna bir BackUp klasr oluturalm.) Dilersek Management klasrnden bir i
tanmlayarak belirtilen tarih ve saatte yedek alnmasn salayabiliriz.

Database : Hangi databasein backup alnacaksa o database seilir.

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.

**********************

BACKUP Dosyasndan Veritabann Ykleme : Databasee Sa Tklayp > Restore


Database

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.

3.4.2. ATTACH DETACH Yntemi


DatabaseI baka bir yere tamak veya tanan bir eyi Sql Servera eklemenin bir
baka yntemidir. Bilgisayarm ayoruz..

ProgramFiles>Microsoft Sql Server > MSSQL11.MSSQLSERVER >MSSQL > DATA klasr


ierisinde bizim btn databaselerimiz mevcuttur. Bunlar kopyala yaptr ile buradan
alabiliriz.

**********************

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.

**********************

3.4.3. GENERATE SCRIPTS


Tamak istediimiz Databasee sa tklayp Task > Generate Scripts diyoruz. Alan
wizardda ki ynergeleri izliyoruz. lk pencerede scripti karlacak olan bilgileri
seiyoruz. (Databasein tamam veya istediimiz tablolar).

Advance seeneinden Type of data to script seeneini dzenlememiz gerekir.

Schema Only : Sadece emann scriptini karr.

Data Only : Sadece verilerin scriptini kartr.

Schema and Data : Database emasn ve datalar birlikte script olarak karr.

File Name : Database scriptinin nereye kayt edileceinin bilgisini ister.

3.5. TRANSACT SQL

New Query : Sql sgularn yazdmz alandr.

Execute (F5) : Sql sorgularn altrmak iin kullandmz butondur.

Veritaban Seimi : Hangi veritaban ile alacaksan seim yapmamz gerekir.

Not : Query dosyasn kayt etmek istediimizde uzants .sql olur.

92 | S a y f a
MS-SQLde Bizim kullandmz dil T-SQLdir.

T-SQLde Diller e Ayrlr.

1. DDL (Data Definition Language)


2. DML (Data Manupulation Language)
3. DCL (Data Control Language)

3.5.1. Data Definition Language DDL


Create, Alter, Drop komutlarn ierir. Databasede nesne oluturur. Create ile oluturur,
Alter ile gnceller ve Drop ile nesneyi silebiliriz. Bir nesne oluturmak istediimizde DDL
komutlarn kullanrz.

Database Nesnelerinden Bazlar

Database
Tablolar
Diagram
View
Stored Procedure
Trigger
Bunlar olutururken DDL komutu kullanlr.

Kod ile yeni bir veritaban oluturmak


CREATE DATABASE KodIleDB
ON PRIMARY --Datalarin tutuldugu dosya
(
Name = "KodIleDB_Data",
FileName = 'C:\Backups\KodIleDB.mdf', --Slash iaretine dikkat
Size = 4mb, --Boyutu Size
FileGrowth = 1mb
)
LOG ON --Dikkat
(
Name = "KodIleDB_Log",
FileName = 'C:\Backups\KodIleDB.ldf',
Size = 1mb,
FileGrowth = 10%
)

Kod ile yeni bir tablo oluturmak


use KodIleDB
CREATE TABLE Tablom --Tablo Adi
(
ID int identity(1,1) primary key, --Ad ID olsun, tipi int olsun, identity kolonu (1 den
balasn 1-1 artsn ve primary key olsun)
Ad nvarchar(50) not null, --Bo geilemez

93 | S a y f a
Soyad nvarchar(50)
)

3.5.2. SYSTEM DATABASES


New Query ekran atmda burda System Database ierisinde

Master
Model
Msdb
Tempdb veritabanlar vardr.
Sistemden gelen veritabanlardr. Bunlar hi bir ekilde silmememiz gerekir. Bunlar
silmek demek SQL Server silmek anlamna gelir.

Master : Sql ierisindeki hazr yaplar barndran databasedir.

Select * from sys. --Yazdmda gelen tm veriler masterdan 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.

3.5.3. Northwind Script


Microsoftun SQLi renme amal bize sunduu bir database dosyasdr. Sorgulamay
bu database zerinde reneceiz. Northwind kurarken ki hata kacaktr bu hatalar
stored procedure ile ilgilidir.

3.5.4. Data Manupulation Language DML


Select, Insert, Update ve Delete komutlarn ierir. Veritabanma kayt olmu veya kayt
olacak verileri ynetebilmek iin kullanlan dildir. Kayt eklemek iin Insert, kayt
gncellemek iin Update, kayt silmek iin Delete, kaytlar listelemek iin select komutu
kullanlr.

3.5.4.1. SELECT SORGULARI


rnek Sorgu
--Urunleri listeleyen sorgu
use Northwind
SELECT
* --Benim iin * tm kolonlar simgeler
FROM Products

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.

Tablolarmza isim verip bu isimleri kullanarak intellisense desteini arttrabiliriz.


Tablomuzu temsil edecek bir isim kullanarak kolon eriimlerini daha hzl bir ekilde
salayabiliriz. Yukarda ki rnekte Products tablosunu temsil etmesi iin p harfini
atadm. Ben sorgu ierisinde p harfini yazdmda bu harf Products tablosunu temsil
edecektir.

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

Address kelimesi keli parantezler ierisine alndnda, rengi deiecektir. Sql de


tanml kelimeler darsnda arasnda boluk olan kelimelerde keli parantez iinde
yazlarak tek bir ifadeye dntrlebilir.

3.5.4.2. Kolonlara sim Vermek


Yazdmz sorgularda kolonlarn isimlerini daha anlaml olarak gstermek isteyebiliriz
veya kullanclara verilecek bir sorgu sonucunda kolon isimlerimizi kullanclara
gstermek doru bir yntem deildir. Aadaki rnek sorguyu inceleyecek bir kolonu
farkl bir isimle sorguda gsterme yntemlerini bulabilirsiniz.

rnek : Kolonlara isim vermek


--Tedarikciler(Suppliers) tablosundan Sirket Adi, Yetkili Kisi, Telefon, Sehir, Ulke ve Adres
bilgilerini getiren sorgu
SELECT

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.

3.5.4.4. WHERE Sorgusu


Sql de listeleme ilemi sonucunda dnen listedeki deerleri filtrelemek iin kullanlan
sz dizimidir. Select sorgusu ile birlikte kullanlr. Select sorgusundan sonra yazlan where
sorgusu, select ile listelenecek olan verileri belirlediimiz arta gre listeler.

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

3.5.4.5. BETWEEN Kullanm


ki deer aralnda sonular listelemek iin kullanabiliriz. Belirtilen aralktaki sonular
listeler. Select sorgularnda, Where ile birlikte kullanlr.

rnek Sorgu : Between


--Fiyat 20 ile 50 arasnda olan rnlerin urunadi, fiyat bilgilerini getiren sorgu
SELECT
*
FROM Products p
WHERE p.UnitPrice BETWEEN 20 and 50 --20 dahil, 50 dahil deil

97 | S a y f a
nemli : Sql'de String ifadeler iin 'tek trnak' kullanlr.

rnek Sorgu Where


--Londra(London) veya Paris de olan mterilerin(Customers) irket adi, Yetkili kisi bilgisi, sehir
ve adres bilgilerini getiren sorgu
SELECT
c.CompanyName,
c.ContactName,
c.City,
c.[Address]
FROM Customers c
WHERE c.City = 'Paris' OR
c.City = 'London'

rnek Sorgu Where Kullanarak


--Londra(London) olmayan mterilerin(Customers) irket adi, yetkili kisi bilgisi, sehir ve adres
bilgilerini getiren sorgu
SELECT
c.CompanyName,
c.ContactName,
c.City,
c.[Address]
FROM Customers c
WHERE c.City != 'London'

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.

rnek Sorgu IN Kullanarak


--Londra(London), Berlini Madrid veya Paris'de olan mterilerin(Customers) irket adi, yetkili
kisi bilgisi, sehir ve adres bilgilerini getiren sorgu
SELECT
c.CompanyName,
c.ContactName,
c.City,
c.[Address]
FROM Customers c
WHERE c.City IN ('London', 'Paris', 'Madrid', 'Berlin')

rnek Sorgu NOT IN Kullanarak


--Londra(London), Berlini Madrid veya Paris'de olmayan mterilerin(Customers) irket adi,
yetkili kisi bilgisi, sehir ve adres bilgilerini getiren sorgu
SELECT

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.

rnek Sorgu - LIKE


--Sirket Adinda 'restaurant' gecen musterilerin(Customers) bilgilerini getiren sorgu
SELECT
*
FROM Customers c
Where c.CompanyName LIKE '%restaurant%' --Saga ve sola koyulan yuzdeler, yuzde olan
yerde kac karakter ve bu karakterlerin ne oldugu fark etmez anlamina gelir.

Bilgi : Arama srasnda byk kk harf duyarll yoktur.

REGULAR EXPRESSION REGEX METOTLARI

% Eklendii yerde ka karakter ve hangi karakter olduu nemli deil


_ Tek karakter ama hangi karkater olduu nemli deil
^x Verilen karakter olmayan

REGEX rnekleri

__a% 3. Harfi a olan rnler.


__a_ 4 karakterli ve 3. Harfi a olan rnler

SORGU YAZARKEN ZLENECEK YNTEM

1. Hangi komutu kullanacana karar ver. (SELECT)


2. Hangi tablo ile alacana karar ver.
3. Hangi kolonlar grntleyeceine karar ver.
4. Varsa kullanacan kriterleri belirt.

rnek Sorgu : Like


--rn Ad c ile balayan ve 3. harfi a olan rnlerin bilgilerini getiren sorgu
SELECT
*

99 | S a y f a
FROM Products p
Where p.ProductName LIKE 'c_a%'

rnek Sorgu : Like


--c ile balayan 4. harfi a olan ve 5 harfli rnleri getiren sorgu
SELECT
*
FROM Products p
WHERE p.ProductName LIKE 'c__a_'

rnek Sorgu : Like


--c ile balayan 3.harfli a ile k arasnda olan rnleri getiren sorgu
SELECT
*
FROM Products p
WHERE p.ProductName LIKE 'c_[a-k]%'

rnek Sorgu : Like


--c ile balayan ve 3. harfi a olmayan rnleri getiren sorgu
SELECT
*
FROM Products p
WHERE p.ProductName LIKE 'c_[^a]%'

rnek Sorgu : Like


--kinci harfi o olan ve meat ile biten rnlerin bilgilerini getiren sorgu
SELECT
*
FROM Products p
WHERE p.ProductName LIKE '_o%meat'

rnek Sorgu : Like


--Fax numaras bo olan (Null) mterilerin bilgileri --DKKAT : '' olan deil
SELECT
*
FROM Customers c
WHERE c.Fax Is NOT Null

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.

ASC (Ascending) : Numeric ve Alfanumeric olarak artan sralama yapar.

DESC (Descending) : Numeric ve Alfanumeric olarak azalan sralama yapar.

Order By sz diziminin default olarak ald deer ASC deeridir.

100 | S a y f a
rnek Sorgu : Order By
--rnleri isimlerine gre sralama
SELECT
*
FROM Products p
ORDER BY p.ProductName

rnek Sorgu : Order By


--rnlerin rn ad, fiyat ve stokdaki miktarn rn fiyatna gre tersten sralayan sorgu
SELECT
p.ProductName,
p.UnitPrice,
p.UnitsInStock
FROM Products p
ORDER BY p.UnitPrice DESC

rnek Sorgu : Order By


--Kolon adlarn istersek sra numaras ile verebiliriz. Ama bunun bir zarar vardr. Kolon
sralamas deiebilir..
SELECT
p.ProductName,
p.UnitPrice,
p.UnitsInStock
FROM Products p
ORDER BY 2 DESC

rnek Sorgu : Order By ve Between


--01.01.1996 ile 31.12.1996 tarihleri (1996 ylndaki) arasndaki siparilerin SipariID, SipariTarihi,
Sehir ve lke Bilgilerini tarih kolonuna gre tersten sralayan sorgu
--1.Yntem
SELECT
o.OrderID,
o.OrderDate,
o.ShipCity,
o.ShipCountry
From Orders o
--Where o.OrderDate >= '01.01.1996' and o.OrderDate <= '12.31.1996'
WHERE o.OrderDate BETWEEN '01.01.1996' and '12.31.1996'
ORDER BY o.OrderDate DESC

--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.

YEAR(tarih) : Girilen tarihin yl bilgisini verir.

MONTH(tarih) : Girilen tarihin ay bilgisini verir.

DAY(tarih) : Girilen tarihin gn bilgisini verir.

GETDATE() : u anki sistem tarihini verir.

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.

AVG() : Ortalama Almak iin kullanlan fonksiyondur. Verilen deerlerin ortalamasn


alr.

Count() : Verilen tablodaki satrlar sayan metotdur.

MAX() : Verilen kolondaki maximum deeri bulur.

MIN() : Verilen kolondaki minimum deeri bulur.

ROUND() : Dnen sonuta virglden sonraki deeri yuvarlar.

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

rnek Sorgu : Round ve Sum


--Noktadan sonra bir ok deer var bunu dzenlemek iinde Round metodu kullanlr.
SELECT
ROUND(SUM(od.Quantity * od.UnitPrice*(1-od.Discount)), 2) AS 'Toplam Ciro' --Round
deeri yuvarlar.
FROM [Order Details] od

/******AGGREGATE FUNCTION'LAR BANA TEK BiR DEER DNDRR********/

rnek Sorgu : Sum


--Bgne kadar ka rn satlm
SELECT
SUM(od.Quantity) AS 'Toplam Adet'
FROM [Order Details] od

rnek Sorgu : Count


--Bugne kadar ka adet sipari alnm
SELECT
COUNT(o.OrderID) AS 'Toplam Sipari Says' --Count kullanrken herhangibi bir kolonu
verebiliriz.
--Kolon yerine * dersek kolon ad vermemiz gerekmez.
FROM Orders o

rnek Sorgu : Max


--u an ki fiyat en pahal rnn fiyat nedir
SELECT
MAX(p.UnitPrice) as 'En Pahal Fiyat'
FROM Products p

--2.Yntem
SELECT TOP 1
p.UnitPrice
FROM Products p
Order By p.UnitPrice DESC

rnek Sorgu : AVG


--rnlerin ortalama fiyat bilgisi
SELECT
AVG(p.UnitPrice) AS 'Ortalama Fiyat'

103 | S a y f a
FROM Products p

3.5.4.11. SUB QUERY ALT SORGULAR


Sql sorgularmzda gerekli durumlarda alt sorgular kullanmamz gerekebilir. Alt
sorgulardan dnen deerler kullanlarak eitli sorgulama ilemleri yaplr. Alt sorgu
kullanrken dikkat etmemiz gereken noktalar vardr.

Alt sorgular her zaman tek bir deer dndrmelidir.


Alt sorgular parantezler ierisinde yazlr.
Alt sorgularda matematik de ki gibi nce parantez ilemi ierisinde ki sorgu
altrlr.
Alt sorgular performans olumsuz etkiler.

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

--Fiyat ortalama fiyatn altnda rnleri getiren sorgu


SELECT --Yanl gsterim Syntax olarak hata vermez ama gsterim yanltr.
*
FROM Products p
WHERE p.UnitPrice < AVG(p.UnitPrice)

Yukardaki sorgu syntax olarak hata vermez ama mantksal olarak hataldr.

Yukardaki Kod altnda aadaki hata verilecektir.


AGGREGATE FUNCTION'LAR Where ierisinde kullanlamaz. Ya Having Kullanm yada
dardan aldn deeri referans olarak gsterin. (yani Sub Query Kullanm)

AVG'yi kullanp tm rnleri hesaplayabilmek iin tm rnlerin bilgisine ihtiyacmz var.


Bu ilemi yapabilmemiz iin tm rnlerin bilgisinden bir ortalama karp daha sonra
rnleri listelemem gerekmektedir.

rnek : Tm rnlerin ortalama fiyat bilgisini getiren sorgu


SELECT
AVG(p.UnitPrice)

104 | S a y f a
FROM Products p

Yukardaki kod ile ortalama fiyat hesaplatp aaya sonucunu yazabiliriz. ama bu
bizim iin dinamik olmaz.

rnek : rnlerin Ortalama Fiyatn Bulmak


SELECT
*
FROM Products p
Where p.UnitPrice < 28.65

Sub query kulanarak, fiyat ortalama fiyatn altnda olan rnleri listeleyelim.

rnek : Fiyat Ortalama Fiyatn Altnda Olan rnleri Listeleyen Sorgu


SELECT
*
FROM Products p
WHERE p.UnitPrice < (
SELECT
AVG(p.UnitPrice) --Alt sorgudan dnen deer st sorguya kriter olarak gitti
FROM Products p
)

--Alt Sorgulardada matematikde ki gibi nce parantez ierisindeki ilem yaplr.*/

--Alt sorgular performans olumsuz etkiler ama kullanmamz gereken durumlar olur.

--Alt sorgular yanlzca bir deer dndrmelidir.

3.5.4.12. TOP ve DISTINCT


Top : Yazlan sorgudan dnen sonu iinde en stte kan x adet sonucu gsterir.

rnek : Top
--En pahali 3 urunu getiren sorgu
SELECT TOP 3
*
FROM Products p
Order By p.UnitPrice DESC

Distinct : Tekrar eden deerleri egale etmek iin kullanlr.

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

rnek : Aggregate Function ve Distinct


--Kac Farkli ulkeye siparis gonderilmis Ulke Says
SELECT
COUNT(DISTINCT o.ShipCountry)
FROM Orders o
--Yukardaki rnekde tm satlar sayyor. Ama benim lkeleri nce ayrp sonra saydrmam
gerekiyor.

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.

3.5.4.14.1. Join eitleri

Inner Join : Eleen kaytlar getirir.

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>

Yukarda birbirine eitlenen iki kolon referans kolonlardr.

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.

rnek Sorgu : Outer Join


--Hangi alanm hangi alanma bal ? (Patron, Personel) + Calisanlarin yasi
SELECT
calisan.FirstName + ' ' + calisan.LastName as 'Calisan',
patron.FirstName + ' ' + patron.LastName as 'Patron',
DATEDIFF(YEAR,calisan.BirthDate, GETDATE()) as 'Yas'
FROM Employees calisan
LEFT JOIN Employees patron ON calisan.ReportsTo = patron.EmployeeID
--LEFT OUTER JOIN Employees patron ON calisan.ReportsTo = patron.EmployeeID

OUTER yazmak zorunda deiliz. Left/Right yazmamzda yeterli.

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.

Cross join c sharpda ki i ie dng mantnda alr. Tm deerleri birbirleriyle


apraz olarak karlatrr. (arpm tablosu yapar gibi..)

rnek Sorgu - CROSS JOIN


--Iki tablo arasinda cross baglanti
SELECT
calisan.FirstName + ' ' + calisan.LastName as 'Calisan',
patron.FirstName + ' ' + patron.LastName as 'Patron'
FROM Employees calisan
CROSS JOIN Employees patron

Employees tablosunda bulunan 8 alan cross olarak birbirleriyle karlatryor. 8


alann bulunduu bir tabloda apraz sorgulama ile 81 satr veri dnyor. Sipariler
tablosu gibi zamanla iebilecek ve yavalayabilecek tablolarda performans sorgusu
yapmak iin kullanlr.

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.

rnek Sorgu : Yanl


--Toplam satis miktari 1200un uzerinde olan urunlerin urun adlarini ve satis miktarlarini getiren
sorgu
SELECT
p.ProductName,
SUM(od.Quantity) as 'ToplamAdet'
FROM [Order Details] od
INNER JOIN Products p ON p.ProductID = od.ProductID
GROUP BY p.ProductName
WHERE (SELECT
SUM(o.Quantity)
FROM [Order Details] o) > 1200
ORDER BY 2 DESC

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.

HAVING paralar deerleri where kriterine sokmay salar.

rnek Sorgu : Doru


--GROUP BY kullanlan sorgularda where yerine having kullanlr.
SELECT
p.ProductName,
SUM(od.Quantity) as 'ToplamAdet'
FROM [Order Details] od
INNER JOIN Products p ON p.ProductID = od.ProductID
GROUP BY p.ProductName
HAVING SUM(od.Quantity) > 1200
ORDER BY 2 DESC

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

3.5.4.16. Zaman Metotlar


DATEDIFF(YEAR, x.Date, GETDATE()) : ki tarih arasnda ki fark bulur. lk deeri geriye
hangi deeri dndreceidir. kinci deer hangi tarihler arasndaki fark bulacadr.

3.5.4.17. INSERT COMMAND


Insert komutu varolan bir kaynaa veri ekleme ilemi iin kullanlr. Insert komutunda
dikkat edilmesi gereken nokta null geilemez olan kolonlara insert komutunda yer
vermek zorundayz.

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)

--Ekleyip eklemediini kontrol ediyoruz.


Select * from Categories

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

nemli : Eer tm kolonlar srasyla biliyorsam, ilemi yaparken kolonlar ksmn


yazmayabilirim.Yalnz burada dikkat edilmesi gereken degerleri verirken kolon
sralamasna gre vermektir ve her kolon iin deer girmektir.

rnek Sorgu
Insert Into Shippers
Values
('Aras Kargo','(503) 444-8598')

NULL deer girmek iin deer yerine null yazmalyz.

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.

SCOPE_IDENTITY() : Mevcut oturumda eklenen son kaytn idsini dndrr.

@@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')

Select SCOPE_IDENTITY() - Mecvut Oturumda Son girilen kaydn IDsini dndrr.

116 | S a y f a
Select @@IDENTITY -- Scope identity ile ayn ii yapar. Fark bandaki @@ den gelir. @@ sql de
global alan temsil eder.

rnek Sorgu : Deikensiz


--Sipariler tablosuna yeni bir kayt ekleyin ve o siparie bir detay ekleyin.(5. numaral rnden
10 adet 10 lira zerinden sat bilgileri iersin)
--Deikensiz Yntem
Insert Into Orders
(CustomerID,EmployeeID, OrderDate, RequiredDate, ShippedDate, ShipVia, Freight,
ShipName, ShipAddress, ShipCity, ShipRegion, ShipPostalCode, ShipCountry)
Values
('ALFKI', 2, '09.09.2013', '09.09.2013','09.09.2013', 2, 25.85, 'SatilanUrunler', 'Beykoz', 'Istanbul',
NULL, NULL, 'Turkey')

--Urun Detaylarini Eklemek


Insert Into [Order Details] (OrderID, ProductID, UnitPrice, Quantity, Discount) Values
(SCOPE_IDENTITY(), 10, 95.25, 20, 0.75)

Select * from Orders


Select * from [Order Details]
3.5.4.19. UPDATE (GNCELLE)
Tablomuzda hali hazrda bulunan verileri gncellemek iin kullanlan sorgudur.
Kullanrken dikkatli olmak gerekmektedir. Eer sorgulama ileminde bir art belirtilmezse
tabloda ki tm veriler belirtilen deerler ile gncellenecektir. Bu ilemin geri dn
yoktur.

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

Yukardaki sorgu 1 nolu id ye sahip rnn adn Chai rn gncellendi olarak


deitirecektir. Sorguyu altrdktan sonra Select * from Products yazarak sorgu
sonucumuzu kontrol ediyoruz.

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>

rnek Sorgu : Delete


DELETE FROM Products
Where ProductID = 79

3.5.4.21. DECLARE DEKENLER


Sql de deikenler @ ile tanmlanr global deikenler @@ ile tanmlanr.

118 | S a y f a
Syntax : Declare
Declare @<degiskenadi> <degiskentipi>

rnek Sorgu : Declare


Declare @sonid int --sonid yi aadaki kod a dahil etmeden (seilmeden) altrrsak hata
alrz.
Insert Into Orders
(CustomerID, EmployeeID, OrderDate, RequiredDate, ShippedDate, ShipVia, Freight,
ShipName, ShipAddress, ShipCity, ShipRegion, ShipPostalCode, ShipCountry)
Values
('ALFKI', 2, '09.09.2013', '09.09.2013','09.09.2013', 2, 25.85, 'SatilanUrunler', 'Beykoz', 'Istanbul',
NULL, NULL, 'Turkey')

Set @sonid = SCOPE_IDENTITY()

Insert Into [Order Details] (OrderID, ProductID, UnitPrice, Quantity, Discount) Values (@sonid,
10, 95.25, 20, 0.75)

3.5.4.22. VIEWS SANAL TABLOLAR


Bir sorgu ierisinde ok fazla ilem gerekletiriyorsak ve bu sorguyu defalarca
kullanyorsak kullanmamz gerekiyorsa bu sorguyu defalarca yazmak yerine sql Serverin
bize sunmus oldugu nesne olan view nesnelerini kullanlrz. View ayn zamanda
gvenlikde salar.

Syntax : Views
Creat VIEW <viewadi>
AS
<sorgu>

View Yazarken kolon adlarn yazmamz gerekir.* ile tm kolonlar yazdrmaya


alrsak ayn kolonlar olacandan (uniq kolonlar) hata verecektir.

rnek Sorgu : Views


--Dumon id sine sahip mterinin alm oldugu siparilerin siparisID, SiparisTarihi, MusteriId ve
SirketAdi
Create View vw_DumonSiparisleri
AS
Select
o.OrderID,
o.OrderDate,
c.CustomerID,
c.CompanyName
From Orders o
Inner Join Customers c On c.CustomerID = o.CustomerID
Where c.CustomerID = 'DUMON'

119 | S a y f a
--Sanal Tabloyu gerek bir tabloymu gibi kullanabiliriz.
Select
*
From vw_DumonSiparisleri d
Where d.OrderID > '10650'

rnek Sorgu : Views


--Speedy Express ile tanm, nancy nin almis oldugu, DUMON yada ALFKI id li msteriler
tarafndan verilmi olan siparisleri saklayan view olusturunuz.
--Shippers, Customers, Employees, Orders
CREATE View vw_SpeedyIleTasinmis
As
Select
s.CompanyName as 'ShipperCompanyName',
e.FirstName + ' ' + e.LastName as 'SiparisAlan',
c.CustomerID,
c.CompanyName as 'CustomerCompanyName'
From Orders o
Inner Join Shippers s on s.ShipperID = o.ShipVia
Inner Join Customers c on c.CustomerID = o.CustomerID
Inner Join Employees e on e.EmployeeID = o.EmployeeID
Where (s.CompanyName = 'Speedy Express') and (e.FirstName = 'Nancy') and (c.CustomerID
= 'DUMON' or c.CustomerID = 'ALFKI')

Sorguyu gncellerken CREATE yerine ALTER kullanlr. CREATE yeni bir view olutururken
kullanlr.

Bir sorguyu gncellemek iin CREATE yerine ALTER kullanlr.

rnek Sorgu : View Silmek


DROP VIEW vw_SpeedyIleTasinmis -- Bu sorgu altgnda olusan view sorgusunu silecektir.

rnek Sorgu : Views


--Ortalama sat miktarnn (para bazl) zerine kan satlarm nelerdir. (Viewli)
--(Orders details)
GO
Create view vw_DetaySorgusu
AS
Select
od.OrderID,
ROUND(SUM(od.UnitPrice * od.Quantity *(1-od.Discount)),2) as 'ToplamTutar'
From [Order Details] od
Group by od.OrderID
Having SUM(od.UnitPrice * od.Quantity *(1-od.Discount)) > (Select
AVG(t.SiparisBazliPara) as 'Toplam'
From (
Select

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)

3.5.4.23. WITH ENCRPYTION


Oluturduumuz viewlar ifreli view olarak oluturabiliriz. Viewa sa tklayp Desing
seeneini setiimizde, view kodlarn ve ieriklerini grebiliriz. With Encryption bu
opsiyonu kaldrr.

Tm database nesnelerine uygulanabilir.

rnek Sorgu : Database Nesnelerini ifreleme


CREATE View vw_SpeedyIleTasinmisSifreli
WITH ENCRYPTION --(bu satr ekleyerek sifreli oluturabiliriz. Dzenleme iin Create yerine alter
yazmalyz.)
As
Select
s.CompanyName as 'ShipperCompanyName',
e.FirstName + ' ' + e.LastName as 'SiparisAlan',
c.CustomerID,
c.CompanyName as 'CustomerCompanyName'
From Orders o
Inner Join Shippers s on s.ShipperID = o.ShipVia
Inner Join Customers c on c.CustomerID = o.CustomerID
Inner Join Employees e on e.EmployeeID = o.EmployeeID
Where (s.CompanyName = 'Speedy Express') and (e.FirstName = 'Nancy') and (c.CustomerID
= 'DUMON' or c.CustomerID = 'ALFKI')

3.5.4.24. VIEW ile INSERT Sanal Tablolar Kullanarak Insert lemi


Bir view zerinden tabloya insert yaplmak istenirse.. sorgunun birden fazla tablodan
(inner join), group by ve benzeri yaplarn olmamas gerek. Bo geilemeyen kolon
viewda yoksa o view zerinden insert gerekletirilemez.

rnek Sorgu : View ile Insert


--SanalTabloya insert etmek.. (zorunlu kolonlara deer vermediimizde hata verir. rn
CategoryName)
Create View vw_KatDesc
As
Select
c.CategoryName,
c.Description
From Categories c
GO

--SanalTabloya insert etmek.. (zorunlu kolonlara deer vermediimizde hata verir. rn


CategoryName)
Insert into vw_KatDesc

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

Insert into vw_CalisanlaraKayitEkle


(FirstName,LastName)
Values
('Alp', 'Kurt')
GO

Select * from vw_CalisanlaraKayitEkle


GO

3.5.4.25. FQN Fully Qualified Name


FQN dediimiz yap; tam isim anlamna gelir. Biz bir sorgu ekerken aslnda bu tam ismi
kullanarak sorgularmz ekmeliyiz.

FQN Yaps
[ServerName].[DatabaseName].[SchemaName].[ObjectName]

--Database de ki nesnelere tam isim ile ulalr. Sralamas nemlidir.(aadaki gibi)

--DBO : Database Owner (Database Sahibi)

--ObjectName nesnedir. VIEW de bir objedir.

SELECT * FROM sys.servers -Bu satr ile ServerNamee ulasabiliriz.

SELECT * FROM [ALP1-BILGISAYAR\EMPATI].Northwind.dbo.Categories

3.5.4.26. STORED PROCEDURE SAKLI YORDAM


kili iletiim salayabilen (ben parametre vericem o bana sonuc getiricek) Insert-
Update-Select-Delete kullanlabilir. Gvenli yaplardr. Veritabanmzn iindeki
Programmability ierisindeki stored procedure iinde bulunurlar.

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)

--Verileri eklemek iin aadaki satr kullanlr.


EXECUTE prc_KategoriEkle 'Kategori1', 'Aciklama1' --Ekleme insert ile deil Execute ile yaplr.
Exec olarakta yazlabilir.

--Ekleme ileminden sonra tabloya insert yapldg iin tabloyu arabiliriz.


Select * From Categories

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

Exec prc_StokGosterimi 20,50,20,50,'Pasta'

3.5.4.27. IF ELSE Karar Yaplar


Sql tarafndaki karar yaplardr. IF ierisinde verilen sorgudan dnen sonu (etkilenen
satr says) 0dan bykse True, 0a eitse False deer dndrr. C# tarafndaki
scopelar yerine Begin End Kullanlr. Bu taraftaki if verinin databasede olup olmadn
sorgulamak iin yaplr.

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.

IF EXISTS (Select * from Shippers s Where CompanyName='Aras Kargo')


BEGIN
Update Shippers Set Phone = '(222) 111-2244' Where CompanyName='Aras
Kargo'
END
ELSE
BEGIN
PRINT 'Kaytl Deil'
END
GO

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.

3.5.4.29. FUNCTION YAPISI


Fonksiyon yaps bir database nesnesidir. Kullanc ile iletiime geebilen bir yapdr.
Stored Procedure gibidir. Ama tek fark tablodan bamszdr.

Funtionlarn Yaps Sqlde Tanml Function

SELECT GETDATE()

SELECT DATEDIFF(YEAR, '06.09.1991', '12.25.2014')

--Bir takm ilerden bize bir dizi deer dndren nesnelerdir.

--Fonksiyon ierisinde insert update delete gibi ilemler

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

--Tablodan Bamsz Kullanm


Select dbo.fnc_yashesapla('01.01.1991')

--Tablodan veri ekerek kullanm


Select
e.FirstName + ' ' + e.LastName as 'FullName',
dbo.fnc_yashesapla(e.BirthDate) as 'Yas'
From Employees e

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

Select dbo.fnc_EmailOlustur('Alp', 'Kurtbogan','Bilgeadam')

--Tabloda Kullanmak
Select
e.FirstName,
e.LastName,
dbo.fnc_EmailOlustur(e.FirstName, e.LastName, 'SirketAdi')
From Employees e

3.5.4.30. TRIGGER - TETKLEYC


Database zerinde bir ilem yapldgnda otomatik olarak arka planda baka bir ilemin
yaplmasn salayan veritaban nesnesidir. ki durum iin kullanlabilir.

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

Delete from Products where ProductID = 2


Select * from Products
GO

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

Select * from Musteriler

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

3.5.4.32. SQLde PERFORMANS


Yazlmclar, SQLde performansdanda sorumludur. Tablo ok itiinde tabloda
arama yapmak zorlamaya balyor yani sorgu sonucunu almak zorlayor. Ama Sql
Serverda ok gzel bir yntem sz konusudur.

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.

Indexler ikiye ayrlr Clustered Index ve Non-Clustered Index, bu ayrm indexlenen


yapnn ne olduu ile ilgilidir. Birinde datalar indexlenir, dierinde sadece referanslar
indexlenir.

3.5.4.33. INDEX YAPISI


Indexler SQLde performansdan sorumlu nesnelerdir. 2ye ayrlrlar. Clustered Index (PK
Kolonuna uygulanr.) Bir tabloda yanlzca bir tane olabilir. Sayfa seviyesinde verinin
kendisi tutulur.

Non-Clustered Index Genel olarak WHERE, Order By ve Group By sorgularnda sk


kullanlan kolonlar iin uygulanr. Sayfa seviyesinde datann referans (yani adresi)
tutulur.

3.5.4.33.1. CLUSTERED INDEX

Bir tabloda PK kolonu yaptmzda o kolona gre bir indexleme yaplr. Datalarn
kendisi indexlenir.

Root Level ()

Non-Leaf Level (Sayfa Olmayan Seviye)

Leaf Level (Sayfa Seviyesi)

3.5.4.33.2. NON-CLUSTERED INDEX

Clustered indexI biz oluturamayz. Ama Non-Clustered index oluturabiliriz.

133 | S a y f a
Syntax
CREATE NONCLUSTERED INDEX <IndexAdi>
ON <TabloAdi>(<KolonAdi)>

rnek Sorgu
CREATE NONCLUSTERED INDEX ind_PostalCode
ON Customers(PostalCode)

Oluturduumuz index, tablomuzun altnda Indexes ierisinde bulabiliriz.

Design alanndanda index oluturabiliriz. Design sekmesine gidip, kolon setikten


sonra Indexes and Keys seenei seilir. Var olan tablo zerindeki indexleri gsterir.
Add dediimizde yeni bir tane ekler.

Name : Index Ad

Column : Hangi Kolona gre

Fill Specificitions : Fill Factor sayfann doluluk oranna gre sayfalar. Life level yapsna
gre. (Sayfann doluluk oran kullanmna gre deiir.)

3.5.4.33.3. Index Durumunu Sorgulama

Veritabannda bulunan indexler bir sre sonra bozulabilir. Performans olumsuz


etkilediinde, indexleri tekrardan oluturmam gerekir. Index durumlarn sorgulamak
iin aadaki komutu kullanabiliriz.

Index Durumunu Sorgulama

134 | S a y f a
DBCC SHOWCONTIG

Yukardaki sorguyu altrdmzda seili olan veritabannn tablolarnn index


durumlar rapor olarak listelenir.

Yukardaki raporda en ok dikkat etmem gerekenler;

Paged Scanned : Veriler ka sayfada bulunuyor.

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.

Logical Scan Fragmentation : Bozulma yzdesi anlamna gelir. Bozulma %10


zerindeyse indexleri yeniden dzenlememiz gerekmektedir.

ShowContig yapsn zelletirebiliriz. Tm veritaban yerine sadece belirttiimiz tabloda


tarama yapabiliriz.

Tek Bir Tabloda Tarama Yapmak


DBCC SHOWCONTIG([Order Details])

Yukardaki sorguyu altrdmzda tablomuz ile ilgili deerler grnecektir.

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.

Tablomuzdaki index yapsn dzenlemek iin aadaki komutu kullanabiliriz.

Syntax
DBCC DBREINDEX ('<TabloAdi>', '<IndexAdi>', '<DolulukOrani>')

Yukardaki komutu kullanarak tablomuzdaki indexlemeyi yeniden yapabiliriz. Index adi


alann bo braktmda tm indexler yenilenecektir.

rnek
DBCC DBREINDEX('Order Details', '', 90)

Yukardaki mesaj ile karlatnzda, indexleme ilemi baaryla gerekletirilmi


anlamna gelir. imdi tekrar index yapmz kontrol edelim.

DBCC SHOWCONTIG([Order Details])

Ve sonu aadaki resimde olduu gibidir.

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.

Alan pencerede alacak sorgular iin zamanlar belirleyebiliriz. Belirli saatlerde


alacak sorgular atayarak bu ilemi gerekletirebiliriz.

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.

3.5.4.35. Kullanc Oluturma ve Rol Belirleme

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.

Server Roles penceresi kullancmzn veritabanlar zerindeki yetkisini belirlemek iin


kullandmz sekmedir. Serverda tanml olan sabit roller vardr. Oluturulan kullanc bir
role dahil edilir. Kullanc oluturulur oluturulmaz public rolne dahil edilir. Public rolnn
bir yetkisi yoktur.

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.

Status penceresinde ise kullancy Enable veya Disable edebiliriz.

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.

4.1. Veritaban Balant Yntemleri


4.1.1. SqlConnection
SqlConnection nesnesi veritaban ilemlerimizi gerekletirmek iin kullanacamz
nesnemizdir. System.Data.SqlClient ktphanesi altnda bulunur. Grevi, bizim Sql
sorgularmz altrmak iin gereken veritaban balantsn kurmaktr.

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.

SqlConnection; Arkatarafta temel mantkta yaplan ilem, Sql Management Studioyu


aar, giri yapar, veritabann seer, new query ekran aar.

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.3. System.Data.Sql ve System.Data.SqlClient


Sqle zellemi yaplardr.

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..)

4.1.3. ConnectionString Yazmak

1.Yntem : ConnectionStringi Constructerda yazmak


SqlConnection baglan = new SqlConnection("Server=<ServerAdi>; Database=<VeritabaniAdi>;
UID=<KullaniciAdi>; PWD=<Sifre>");

2.Yntem : ConnectionStringi Propertyde yazmak


SqlConnection baglan = new SqlConnection();
baglan.ConnectionString = "Server=<ServerAdi>; Database=<VeritabaniAdi>; UID=<KullaniciAdi>;
PWD=<Sifre>";

3.Yntem : ConnectionStringi Classda yazmak


public static class BaglantiCumlesi
{
private static string _connectionString;
public static string ConnectionString
{
get { return "Server=<ServerAdi>; Database=<VeritabaniAdi>; UID=<KullaniciAdi>;
PWD=<Sifre>"; }
}
}

Yntem 4 : ConnectionStringI Globalde Yazmak


SqlConnection baglan = new SqlConnection("Server=<ServerAdi>; Database=<VeritabaniAdi>;
UID=<KullaniciAdi>; PWD=<Sifre>");

private void Form1_Load(object sender, EventArgs e)


{

4.1.4. AppConfig dosyas ierisinde ConnectionString Kullanmak


Namespacelere System.Configuration dosyasn eklememiz gerekir.
System.Configuration ktphanesi, bizim configuration dosyamz ynetmemizi salar.

Ktphaneyi referanslara eklemek iin; References Sa Tk > Add Reference Arama


alanna Configuration yazdmzda kan System.Configuration eklememiz
gerekmektedir.

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. CONNECTED MMAR


Ado balantldr. Bu yapda SQLe balanty kendimiz ynetiriz. Balanty amak ve
kapatmak yazlmc tarafndan ynetilir.

4.2.1. SqlConnection Balanty Ynetmek

Balanty Amak ve Kapatmak


SqlConnection baglan = new
SqlConnection(ConfigurationManager.ConnectionStrings["Baglan"].ConnectionString);

if (baglan.State == ConnectionState.Closed) //Balant kapalysa, sonu True Dner..


{
baglan.Open(); //Balanty Aan metot.
MessageBox.Show("Balant Ald!");
}
else
{
baglan.Close(); //Balanty Kapatan metot
baglan.Dispose(); //Balanty RAM'den drr.
MessageBox.Show("Balant Kapand");
}

ConnectionState: Bize balantnn durumunu true ve false olarak geri dnecektir.

4.2.2. SqlCommand

u ana kadar sadece veritaban balantsn oluturduk. Balantlar atk veya


kapattk. Ama henz veritaban ile ilgili ilem yapmadk. Artk balantlarmz atktan
sonra Sql sorgularn altrmaya balayabiliriz. Bu ilem iin SqlCommand nesnesini
kullanabiliriz.

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)

Connection : altrlacak sql cmlesinin, hangi veritaban balantsn kullanacan


gsterir.
CommandType : altrlacak sql cmlesinin tipini belirler. Query, StoredProcedure,
TableDirect deerlerini alr.
Query : Sql cmlesinin plak olarak kullanld zellik
StoredProcedure : Sql cmlesinin Stored Procedure olarak kullanld zellik
TableDirect : Sql cmlesi yerine direk olarak tablo ismi verilerek kullanld zellik. (Birden fazla
tablo kullanlacak ise, tablo isimleri , iareti ile ayrlr. )
CommandText : CommandType zellii gz nnde bulundurularak sql cmlesi, stored
procedure veya tablo isminin yazld zelik.
CommandTimeout : Sql cmlesinin altrlmas ve cevap dnme sresi iin bekleme
zamann belirtir. Varsaylan deeri 30dur. Sre saniye cinsinden verilir.
Transaction : altrlan sql cmlesine, oluturulan transaction nesnesi balanlarak,
ADO.NET dzeyinde kontrol yaplmas salanabilir. Bu uygulamann bize salad
fayda, altrlan sql cmlesinin, altrlmas sonucu oluan hatalarda geriye dn
yaplabilmesine imkan vermesidir.
ounlukla, Insert/Update/Delete ilemlerinde kullanlr.
Parameter : SqlCommand nesnesi aracl ile altrlan Sorgulara ve Stored
Procedurelere tanmlanan parametrelere deer gndermek iin kullanlr.

1.Yntem : Query String


SqlCommand cmd = new SqlCommand("Select * from Categories", baglan);

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

SqlCommand cmd = new SqlCommand("Insert Into Categories (CategoryName, Description)


VALUES ('Yeni Kategori', 'Aklamas')", baglan); //baglan nesnesini kullanarak kategoriler
tablosuna insert yapan sorguyu verdik.

if (baglan.State == ConnectionState.Closed) baglan.Open(); //Balanty aar.

Int etkilenen = cmd.ExecuteNonQuery(); //Etkilenen kayt saysn dner

baglan.Close(); //Balanty kapattk


baglan.Dispose(); //RAM'den drdk
4.2.2.2. SqlCommand Metotlar
ExecuteNonQuery : Etkilenen satr saysn geriye dndrr.

ExecuteScalar : Result setin birinci sutununun birinci satrn geri dndrr.

143 | S a y f a
ResultSet : Select * from dediimizde dnen tablodur.

ExecuteReader : ResultSetin tamamn geriye dndrr.

Execute metotlarndan bana dnen deeri kullanabilirim. rnein


ExecuteNonQuery() bana etkilenen satr saysn dndrr. Ben bu sayy kontrol ederek
ekleme ileminin gerekleip gereklemediine bakabilirim.

Execute Nesnesinden Dnen Deerin Kontrol


1.Yntem
int etkilenenSatirSayisi = cmd.ExecuteNonQuery(); //Etkilenen satr saysn elde ederiz.

2.Yntem
bool sonuc = cmd.ExecuteNonQuery() > 0; //Etkilenen satr says 0'dan bykse true deer dner.
Buda ilemin baaryla gerekletiini gsterir.

Insert lemi Yapmak


//Dardan girilen kategori ad ve aklamasna insert yapan kodlar
SqlConnection baglan = new SqlConnection("Server=.; Database=Northwind; UID=sa;
PWD=123");

SqlCommand cmd = new SqlCommand("Insert Into Categories (CategoryName,


Description) VALUES ('" + txtKategoriAdi.Text + "', '" + txtAciklama.Text + "')", baglan);

if (baglan.State == ConnectionState.Closed) baglan.Open();


bool sonuc = cmd.ExecuteNonQuery() > 0; //Etkilenen satr says 0'dan bykse deikene
true deer atar.

if(sonuc) //Eer etkilenen satr says 0'dan bykse true dner


MessageBox.Show("Kategori baaryla kayt edildi.");
else
MessageBox.Show("Kategori kayt edilirken bir hata olutu.");
baglan.Close();
baglan.Dispose();

4.3. DISCONNECTED MMAR


Disconnected Mimari; sql sorgularmz altrmak iin oluturduumuz balanty
ama/kapama ilemini stlenir. Disconnected mimaride balantlar yapnn kendisi
ynetir.

Bunun dnda disconnected mimaride veri ekme hz connected mimariden daha


yksektir. Connected mimari ile dnen ResultSeti satr satr okumak durumundayz.
Ama disconnected mimari, veri okuma ilemleri iin kullanlan hazr yaplar kullanarak
daha hzl bir ekilde verileri eker.

Veri ekme ilemi arasnda ki hz farkn Entity Frameworkde inceleyeceiz. imdi


Disconnected Mimaride kullanlan yaplar inceleyelim.

144 | S a y f a
4.3.1. SqlDataAdapter

Veritabanndan ekilen veriyi DataTablemza doldurmak veya


DataTablemzda gncellenerek cachelenmi verilerinizi veri kaynanzda da
gncellemek iin kullanlr.

- DataAdapter Disconnected Data ile almak iin tasarlanmtr.


- DataAdapter ve DataSet arasnda direkt olarak bir balant yoktur.

DataAdapter ile DataSete veri doldurulurken database balants kapal ise


alr, DataSet doldurulur ve ilem bittii anda otomatik olarak kapatlr. Eer
balant halihazrda aksa herhangi bir hata vermeden ilemi yapar ve
balanty kapatarak ilemini sonlandrr. Bylece bizlerin de fazla detayla
uramadan hzlca ilemlerimizi yapmamz salar.

Constructorda iki parametre ister. Birinci parametre Sql Sorgusu, ikinci


parametre ise SqlConnection nesnesidir. Son olarak DataSete veriyi
doldururken de Fill() methodu kullanlr.

4.3.2. DataTable

Veri Kaynaklarndan elde ettiimiz bilgileri, veritabanndan bamsz olarak tablo


formatnda tutmamza olanak salayan yapdr.
ADO.NET .Net Framework 2 ile birlikte veritabanndan verileri alarak Dataset'e ihtiya
duymadan direkt Datatable'e aktarabilme gibi bir yetenek kazandrlmtr.

Disconnected Mimari kullanarak Northwind veritabanmzda bulunan rnleri


projemizde bulunan DataGridView kontrolne aktaralm. Connected veya
Disconnected mimari kullanrken SqlConnection nesnesi tanmlamalyz. Sql
Connection bizim sorgularmzn hangi server ve hangi veritaban zerinde
hangi kullanc yetkisi ile alacanz belirler.

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.

//Formun Load Eventi


private void Form1_Load(object sender, EventArgs e)
{
SqlConnection baglan = new SqlConnection("Server=ALP1-BILGISAYAR\\EMPATI;
Database=Northwind; UID=sa; PWD=123");

//DataAdapter kullanarak 3 farkl DataTable'a veritabanndaki tablolarmz dolduruyoruz.


SqlDataAdapter dap = new SqlDataAdapter("Select * from Categories", baglan);
DataTable dt = new DataTable();//Yeni bir DataTable nesnesi oluturuyoruz.
dap.Fill(dt);

SqlDataAdapter dap2 = new SqlDataAdapter("Select * from Products", baglan);


DataTable dt2 = new DataTable();
dap2.Fill(dt2);

SqlDataAdapter dap3 = new SqlDataAdapter("Select * from Orders", baglan);


DataTable dt3 = new DataTable("Tablom"); //Constructor'da tabloya bir isim veriyorum.
dap3.Fill(dt3);

//Oluturduumuz DataSet nesnemizin ierisinde DataTable nesnelerimizi tablo olarak


ekliyoruz.
ds.Tables.Add(dt);
ds.Tables.Add(dt2);
ds.Tables.Add(dt3);
}

//Kategori listelemek iin kullanlacak butonun click eventi

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
}

//rn listelemek iin kullanlacak butonun click eventi


private void btnUrunleriListele_Click(object sender, EventArgs e)
{
dataGridView1.DataSource = ds.Tables[1]; //DataSet ierisinde bulunan DataTable'lar dan
indexi 0 (dt Tablosu) olan
}

//Sipari listelemek iin kullanlacak butonun click eventi


private void btnSiparisleriListele_Click(object sender, EventArgs e)
{
dataGridView1.DataSource = ds.Tables["Tablom"]; //DataTable ismi ilede arabilirim.
}

4.3.4. DataColumn & DataRow

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.

Aadaki rnekde; YeniDoganBebekler isimli bir DataTable nesnesinde, doan


bebeklerin bilgileri tutulmaktadr. Kod ile yeni doan bebeklerin bilgilerini ekleyip bu
bebeklerden bir tanesini DataRow nesnesine aktarma ilemini gerekletireceiz.

147 | S a y f a
rnek Uygulama
public partial class Form5 : Form
{
public Form5()
{
InitializeComponent();
}

DataSet ds = new DataSet("Uyelik");

private void Form5_Load(object sender, EventArgs e)


{
//Tablo olusturulur...
DataTable dt_Uyeler = new DataTable("Uyeler");

//Primary key kolonu olusturulur...


DataColumn dc_UyeID = new DataColumn("UyeID");
dc_UyeID.DataType = typeof(int);
dc_UyeID.AllowDBNull = false;
dc_UyeID.AutoIncrement = true;
dc_UyeID.AutoIncrementSeed = 1;
dc_UyeID.AutoIncrementStep = 1;

//Diger kolonlar olusturulur..


DataColumn dc_UyeAdi = new DataColumn("UyeAdi");
dc_UyeAdi.DataType = typeof(string);
dc_UyeAdi.AllowDBNull = false;
dc_UyeAdi.MaxLength = 24;
dc_UyeAdi.Unique = true;

DataColumn dc_Telefon = new DataColumn("UyeTelefonu");

148 | S a y f a
dc_Telefon.DataType = typeof(string);
dc_Telefon.AllowDBNull = false;

//Olusturulmus olan kolonlar tabloya eklenir....


dt_Uyeler.Columns.AddRange(new DataColumn[] { dc_UyeID, dc_UyeAdi, dc_Telefon });

//Tablonun primary key kolonu atanir...


dt_Uyeler.PrimaryKey = new DataColumn[] { dt_Uyeler.Columns[0] };

//Tablo tamamen hazir olduguna gore db icerisine (dataSet) eklenir...


ds.Tables.Add(dt_Uyeler);
}

private void btnUyeKaydet_Click(object sender, EventArgs e)


{
//Eklenecek satir olusturulur...
DataRow dr_Eklenecek = ds.Tables[0].NewRow();
dr_Eklenecek[1] = txtUyeAdi.Text;
dr_Eklenecek[2] = txtUyeTelefonu.Text;

//Satiri olusturmak yetmez, o satiri ilgili tabloya eklemeniz gerekmektedir...


ds.Tables[0].Rows.Add(dr_Eklenecek);

//Son olarak dataSet uzerinde yapilan tum degisikler onaylanir...


ds.AcceptChanges();

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.

Piyasada bir ok ORM Framework'leri bulunmaktadr. rnek olarak; DataObjects.Net,


NHibernate, OpenAccess, SubSonic etc. Entity Framework vs..

5.1. ORM Nedir ?


ORM, Object Relational Mapping anlamna gelmektedir. likisel veritaban (RDBMS) ile
nesneye ynelik programlamann (OOP) arasnda bir tr kpr zellii gren ve ilikisel
veritabanndaki bilgilerimizi ynetmek iin, nesne modellerimizi kullandmz bir
tekniktir.

Basite indirgemek istersek: Nesnelerimizi ilikisel veritabanndaki tablomuza balayan


ve veri al-veriini bizim iin yapan bir tekniktir. ORM teknii belli bir programlama
diline bal deildir ve her OOP dilinde yazlabilir.

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

5.2. Entity Framework


Entity Framework, bizim iin databasei mizin yansmasn proje tarafna tamamz
salayan veya projemizde rettiimiz databasei veritaban tarafna tamamz
salayan bir yapdr.

Entity Frameworkn yaps bulunmaktadr.

Database First
Model First
Code First

5.2.1. Database Yansmasn Almak


Veritabannn yansmasn almak, MsSQLde bulunan veritabanmzdaki schema
bilgisinin visual studio tarafna yanstlmasdr. Visual studio MsSQLden gelen tablolar
class olarak tanr, tablolarda bulunan kolonlar ise property olarak okur.

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.

3.Sol tarafta bulunan Data sekmesine geiyoruz.

4.Ado.Net Entity Data Model seeneini seip Tamam butonuna tklyoruz.

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.

4.Oluan connection stringi grebileceimiz alandr.

5.Oluan Connection String web config dosyasna hangi isim ile kaydedilecek. smi
belirleyebiliriz.

153 | S a y f a
Next butonuna basarak devam ediyoruz.

Yukardaki ekranda hangi database nesnelerini yansmaya dahil edeceini soruyor.


Sadece istediimiz tablolar, viewlar ve stored procedureleri yansmaya dahil
edebiliriz.

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.

5.2.2. Database First


Hazr bir databasei miz varsa, o databaseden Visual Studio tarafna yansma
almamz salar. Yani tablolar Class olarak, kolonlar ise property olarak aktarr.
Bizler o class kullanarak veritaban ilemlerimizi gerekletirebiliriz. Byk
databaseler iinde kullanlabilir. Ama tablo says ok fazla artyorsa sktlar
kartabiliyor.

154 | S a y f a
Anlatlacak rnek- Listeleme lemi
NorthwindEntities db = new NorthwindEntities();
dataGridView1.DataSource = db.Customers.ToList();

Entity Frameworkde listeleme yaparken tabloyu belirtmek yeterlidir. Ama sadece


tabloyu belirttiimizde, bize bir hata kartr. Bunun sebebi tablodan sonra gelecek
deerlerin bir liste olduunu (Generic List) belirtmemi olmamzdan
kaynaklanmaktadr.

Tablodan sonra ToList() metodunu eklersek dnen verilerin listesi DataSource olarak
kullanlabilir duruma gelir.

5.2.3. Code First


Kod ile daha fazla ileme mdehale ederek, SQL tarafnda olmayan bir
veritabann oluturmak iin kullanlr. Bir program birden fazla sisteme kurmak
iin kolaylk salar. Program ierisinde veritabannn olumasn salar. Bunun
dnda deiiklik yapldnda veritabannda da bu deiiklikleri yapmay
salayabiliriz.

Ayrca Entity Framework Code First yaklamnda 15-22 tablo aras tablo
oluturmaya alldnda skntlar kartabiliyor. Entity Framework ok byk
projelerde kullanlamaz.

Code First yaklamn kullanarak bir veritaban oluturma ilemi yapalm. Bu


ilem iin ncelikle Windows Forms Application projesi ierisinde aada ki
classlar oluturalm.

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; }
}

Yukarda oluturduumuz classlar bizim veritabannda bulunan tablolarmzn


classlar olacaktr. Code First yaklamnda oluturduumuz classlar kullanarak
veritaban oluturulur.

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.

Entity Framework mimarisinin gzellii burada devreye girer.


NorthwindShopEntities classn doru bir biimde ekillendirdiimizde ierisine
verdiimiz classlar veritabannda dzgn bir ekilde oluturulabilir.

Bu ilemi yapmak iin projemize Entity Framework.dll yklememiz gerekiyor.

NorthwindShopEntities.cs
public class NorthwindShopEntities : DbContext //Miras Aldk
{

Yukarda oluturduumuz class ierisinde istediimiz yapy kullanabilmek iin,


classmz dier classlardan ayrmamz gerekmektedir. Bunun iin
NorthwindShopEntities classmza DbContext classmzdan miras almamz
gerekmektedir. DbContext, System.Data.Entity namespace altnda
bulunmaktadr. Daha sonra oluturduumuz NorthwindShopEntities classmz
ierisinde propertyleri belirtmemiz gerekiyor.

NorthwindShopEntities
public class NorthwindShopEntities : DbContext //Miras Aldk
{
/* Syntax */

156 | S a y f a
/* DbSet<KolonlarHangiClassaGoreOlusturulacak> <TabloAdiNeOlacak> { get; set; } */

public DbSet<Product> Products { get; set; }


public DbSet<Category> Categories { get; set; }
}

NorthwindShopEntities.cs classmz yukardaki ekilde dzenliyoruz. imdi


yukarda bulunan class tetikleterek veritabanmz oluturmamz salayabiliriz.
Formumuzun Load eventinde aadaki kodlar yazarak veritabanmz
oluturabiliriz.

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?

Tabikii de sebebi bu yapy veritabanna oluturabilmesi iin gerekli


ConnectionString tanmlamasn yapmadk. Bu sebeple arka tarafta bu ilemi
localdb olarak oluturdu. Biz bir connection string tanmlayp bu ilemi
veritaban zerinde yaptrmamz gerekmektedir.

Bu ilem iin ilk adm App.config ierisinde bir ConnectionString tanmlamas


yapmalyz. App.config ierisinde ConnectionStrings ierisinde aadaki
balanty tanmlyoruz. ConnectionString ierisinde verdiimiz veritaban ismi ile
Database oluturulacaktr. Bizim database oluturma ilemini Sql Management
Studio tarafnda yapmamza gerek yoktur.

ConnectionString olutururken dikkat etmemiz gereken ok nemli bir nokta


daha var.

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()
{

public DbSet<Product> Products { get; set; }


public DbSet<Category> Categories { get; set; }
}

DbContextden miras almtk. imdi bu miras kullanarak veritabanmza


oluturma ilemlerimizi gerekletiriyoruz. Bu ilem iin base classmza
(DbContext) connection string gndermemiz gerekiyor. Bu ilem iin aadaki
kodlar uygulayalm.

NorthwindShopEntities.cs
public class NorthwindShopEntities : DbContext //Miras Aldk
{
public NorthwindShopEntities():base("NorthwindShopDbCon") //Buradaki balanty
kullanacak
{

public DbSet<Product> Products { get; set; }


public DbSet<Category> Categories { get; set; }
}

Yukarda DbContext classnn hangi ConnectionStringi kullanacan


belirtiyoruz. Verdiimiz ConnectionString zerinden veritabanna balantlar
oluturacaktr. Sql Server Management Studioyu arayzmz ap
veritabanmz kontrol edelim.

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.

rnein kategori ad kolonumuz nvarchar(MAX) olarak belirlenmitir. Ayn


ekilde Products tablosunda ki UnitPrice kolonu decimal olarak belirlenmitir.
Ayrca string tipte olan kolonlar bo geilebilir olarak iaretlenmitir. Bunun
dnda Propertylerde ilk yazlan property Uniq kolon olarak seilmi. Bu bilgilerin
ardndan diagrama bir gz atalm.

Aadaki resimde diagram grebilirsiniz.

Yukardaki bilgilere el ile mdehale edebilmemiz gerekmektedir. Bunun iin C


sharp tarafnda bu bilgilere el ile mdehale edebileceimiz bir yer var. Model

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.

Ezmek istediim yer OnModelCreating yani modelin oluturulduu andr.


Burada modelimi yakalar ve ierisinde istediim deiiklii yapabilirim.

Aadaki kodlar dzenleyip altrdktan sonra, Sql Server Management


Studioda bulunan NorhwindShopDB veritabann silelim. Daha sonra aadaki
kodu altralm.

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();
}

IsRequired => Bo Geilemez.


HasMaxLength => Maximum karakter says

Yukardaki ilemden sonra veritabanmz kontrol edelim. Kolonumuzun zellikleri


max length deeri 100 ve bo geilemez olarak dzenlenmi olacaktr.

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>());

//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();
}

5.2.3.1. Tablolar Aras Balanty Ayarlamak


u ana kadar modellerimizi, veritabanmz, tablolarmz ve kolonlarmz
oluturduk ama yaptmz ilemlerde bir eksik var. Bu eksik tablolar aras

162 | S a y f a
balantlarn kurulmam olmasdr. Oluturduumuz modeller zerinden
tablolarmz arasnda balantlarmz kurabiliriz.

Product ve Category tablomuzda bire ok bir balant sz konusudur. Bizim iki


tablo iin bire ok balanty uygulayabilmemiz gerekiyor. Bu ilem iin
modellerimiz ierisinde bu balanty tanmlamalyz. Bu ileme Mapping ad
verilir.

5.2.3.1.1. Mapping Uygulamak

Mapping ilemi tablolarmz arasnda balant kurmamz salar. Classlarmz


aada ki gibi dzenlediimiz de Mapping ilemini tamamlam oluruz. Burada
dikkat etmemiz gereken nokta, veritabanndaki normalizasyon kurallarmzdr.
Northwind veritaban zerinden hareket ettiimizde aadaki sonuca ularz.

Bir rnn, bir kategorisi vardr.


Bir kategoriye ait birden fazla rn vardr.

Yukardaki bilgilere gre balantmz kurmamz gerekmektedir. Tablolar aras


balanty hem Product.cs, hemde Category.cs class ierisinde
tanmlamalyz.

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; }
}

Product.cs ierisine eklediimiz Category tipindeki property bu classlarn


balantsn salamak iindir. Bu property her rnn bir kategorisi olduu
anlamna gelir. Ayn zamanda Category.cs ierisine eklediimiz List<Product>
tipindeki property ise bir kategoriye ait birden fazla rn olaca anlamna
gelecektir.

Yukarda ki resimde grdnz gibi tablolarmz arasndaki balant


olumutur. Peki Categories tablosunda bulunan CategoryID ile Products
tablosunda bulunan CategoryIDyi balayacan nasl anlad?

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.

Not : MigrationHistory : SQLe aktarlrken tutulan bilgiler tablosudur. Entity


Framework 5e kadar el ile oluturulurdu. Default olarak oluturulacak bilgiler
tanmlanrd. Yeni versiyonlarda otomatik olarak oluturuluyor.
5.2.3.2. Primary Key Belirlemek
Oluturduumu modeller zerinde PrimaryKey kolonunu belirleyebiliriz. Primary
Key kolonunu iki yntem ile belirleyebiliyoruz. Birinci yntem Primary Key
kolonunu bir attribute ile iaretlemektir. kinci yntem ise property ismi ieriside
ID tanmlamasn kullanmaktr. Aada iki yntemide inceleyebiliriz.

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

Oluturduumuz bir property sonuna ID eklediimizde bu kolon PK kolonu


olarak alglanacaktr.
5.2.3.3. ModelBuilder lemleri
Yukarda oluturduumuz yapy gelitirmeye devam ediyoruz. nceki
kodlarmzda oluturduumuz veritabannda ki kolonlar istediimiz gibi
dzenlemeliyiz. rnein UnitPrice kolonu decimal oluturulurken, aslnda bu
kolon money tipinde oluturulmalyd.

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.

modelBuilder.Entity<Product>().Property(p => p.UnitPrice).HasColumnType("money");

HasColumnType ile kolon tipini belirleyebilirim. Burada dikkat edilmesi gereken


nokta string olarak verilecek kolon tipi Sqlde bulunan kolon tipleri ile uyumlu
olmak zorundadr. Varsaylan olarak verilen IsRequired ve IsOptional deerler,
belirtilen kolon tipine gre ayarlanr. Mdehale edilmediinde Reference Type
ve Value Typelara gre deiiklik gsterir. Reference Typelar null deer
alabileceinden veritaban tarafndan null geilebilir olarak alglanmaktadr.
Yukardaki kodu ekledikten sonra classmz aadaki gibi grnecektir.

NorthwindShopEntities.cs
public class NorthwindShopEntities : DbContext
{
public NorthwindShopEntities() : base("NorthwindShopDBCon")
{

}
public DbSet<Product> Products { get; set; }
public DbSet<Category> Categories { get; set; }

protected override void OnModelCreating(DbModelBuilder modelBuilder)


{
Database.SetInitializer<NorthwindShopEntities>(new
DropCreateDatabaseIfModelChanges<NorthwindShopEntities>());

modelBuilder.Entity<Product>().Property(p =>
p.ProductName).HasMaxLength(100).IsRequired();

//Aadaki satr ile veritipini money tipi yapyoruz.


modelBuilder.Entity<Product>().Property(p => p.UnitPrice).HasColumnType("money");
}
}

UnitsInStock int tipinde, Required olarak aktarlacak bir propertydir. Bu


sebeple UnitsInStock bilgisini burada belirtmemize gerek yoktur.

Categories tablosunda CategoryName bo geilemez olmas gerektiinden


bu kolonu ynetmemiz gerekir. Ayrca CategoryName iin maximum karakter

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();

Yukarda CategoryName kolonunu IsRequired komutu ile bo geilemez


olarak belirledik. HasMaxLength komutu ile CategoryName kolonunun snrn
50 karakter olarak belirledik.

Description kolonunu IsOptional, yani bo geilebilir olarak belirledik. IsOption


komutunu kullanmasaydm varsaylan olarak bu kolon bo geilebilir
braklacaktr.

Yukardaki yeni kodlar NorthwindShopEntities.cs dosyas ierisine ekledikten


sonra projeyi altralm ve veritabanmz inceleyelim.

Grld zere modeli ezmemize bal olarak istediimiz zellikler


belirlenmitir. Dikkat etmemiz gereken bir nokta veritaban zerinde bir tablo
veya diagram aksa deiiklikleri uygulayamayabiliyor. Bu sebepten projeyi
tekrar altrrken veritabanna ait tm pencerelerin kapal olduuna emin
olmalyz.

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);

Yukardaki satr projenize eklediinizde Description kolonu olumayacaktr. Bir


property sadece kullanlmak iin oluturulduunda veritabanna
oluturulmasna gerek yoktur.

Kolonlar oluturma ilemlerini inceledik, imdide propertylerimiz ile


veritabannda bulunan kolon isimlerini farkl kullanmak istediimizde, nasl isim
belirleneceini incelyelim. Aadaki kod satr bir property kolon olarak
oluturulurken ismini farkl vermek iin kullanlmaktadr.
modelBuilder.Entity<Product>().Property(p =>
p.ProductName).HasColumnName("UrunAdi");

Farkl isim kullanma ilemini tablolar iinde yapabiliriz.


modelBuilder.Entity<Product>().ToTable("Urunler");

5.2.4. Entity Framework Performans Karlatrma


Connected, Disconnected ve Entity Framework performans kyaslamas yapacaz. Bu
100%lk bir kyaslama olmayacaktr. nk bu ilemi ayr ayr projelerde yapmamz
gerekecektir. Ama yinede bize bir fikir verecektir.

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;

SqlDataAdapter dap = new SqlDataAdapter("Select * From Orders", "Server=.;


Database=Northwind; UID=sa; PWD=123");
DataTable dt = new DataTable();
dap.Fill(dt);
lstDisconnected.DataSource = dt;
lstDisconnected.DisplayMember = "OrderID";

DateTime bitis = DateTime.Now;


TimeSpan fark = bitis - baslangic;

lblDisconnected.Text = fark.Milliseconds.ToString();

Disconnected mimari her almasnda hzl alacaktr. Bunun sebebi veriyi


cacheden ekmesidir.

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.

Entity Frameworkun instance n globale tadmzda proje derlenirken yansma


alnaca iin hz artacaktr.

5.2.5. Entity Framework Veritaban lemleri


5.2.5.1. Entity Framework Insert lemi
ncelikle veritabanmz ierisinde bir tane veritaban oluturuyoruz.

Veritaban Ad : TelefonRehberiDB

Tablo Ad : Kisiler

Kisiler Tablosunda Bulunan Kolonlar :

169 | S a y f a
KisiID int
Adi nvarchar(50)
Soyadi nvarchar(50)
TelefonNumarasi nvarchar(50)

Daha sonra veritabanmzn yansmasn alyoruz ve resimde grnen form grnmn


hazrlyoruz.

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.

5.2.5.3. Entity Framework IDye Gre Veri Getirme lemi


Gncelleme ilemi yapmamz iin kaytl olan verinin ilgili kontrolden ID deerini elde
etmemiz gerekiyor. Bu IDye gre Classmzn tipinde nesnemizi elde edeceiz. Elde
ettiimiz nesne zerindeki bilgileri deitirip gncelleme ilemini yapacaz. Burada
dikkat edilmesi gereken nokta; gncellenecek olan nesneyi globalde tanmlamaktr.
Birden fazla Event ierisinden eriebilmemiz iin (Gncellenecei DataGridView
ierisinde yakalyoruz, Gncelleme ilemini Buttonda yapyoruz gibi..) globalde
tanmlamak gerekmektedir.

Yukardaki ilemi DataGridView nesnesi iin uygulayacaz. rnek kodlar aadadr.

ID ye Gre Nesne Getirme

Kisiler guncellenecek; //Gncellenecek nesnemizi globalde tanmlyoruz.

private void dgvKisiler_DoubleClick(object sender, EventArgs e)


{
//DataGridView kontrolnn MultiSelect zellii kapatlmal ve FullRowSelect zellii almaldr.
if (dgvKisiler.SelectedRows.Count > 0) //Eer DataGridView kontrolnde seim yaplmamsa
{
int id = Convert.ToInt32(dgvKisiler.SelectedRows[0].Cells[0].Value); //DataGridView'da
bulunan ID hcresindeki deeri yakala
guncellenecek = db.Kisiler.Find(id); //Bu ID'ye gre nesnemizi getiriyoruz.
txtTelNo.Text = guncellenecek.TelefonNumarasi;
txtSoyad.Text = guncellenecek.Soyadi;
txtAd.Text = guncellenecek.Adi;
}
}

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();

db.Kisiler.Find ile ID ile veritabanndaki bilgiyi gncellenecek olarak tutmu oluyoruz.

db.Entry(guncellenecek).CurrentValues.SetValues(yeniHali); satrnda ise


veritabannda bulunan gncellenecek ile yeni halinin deien deerlerini
gncellemesini sylyoruz.

Bunun bize ne gibi bir yarar var?

Birinci Yntemde; biz 20 kolonluk bir tabloda gncelleme yaptmzda ilk yntem tm
kolon bilgilerini veritabanna gnderecektir.

kinci Yntemde ise; sadece deiiklik yaptmz kolonlar veritabannda


gncellenecektir. Bylece gncelleme ileminde performans kayb azalacaktr.

5.2.5.4. Entity Framework Silme lemi

Silme lemi
int id = Convert.ToInt32(item.Cells[0].Value);
Kisiler silinecek = db.Kisiler.Find(id);
db.Kisiler.Remove(silinecek);

db.SaveChanges();

Silme lemi Ksa Yntem


int id = Convert.ToInt32(item.Cells[0].Value);
db.Kisiler.Remove(db.Kisiler.Find(id));

db.SaveChanges();

Toplu Silme lemi


private void btnSil_Click(object sender, EventArgs e)
{
if (dgvKisiler.SelectedRows.Count > 0)
{
foreach (DataGridViewRow item in dgvKisiler.SelectedRows)
{
int id = Convert.ToInt32(item.Cells[0].Value);
db.Kisiler.Remove(db.Kisiler.Find(id));
}
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.

Where Kriteri Kullanma


dgvKisiler.DataSource = db.Kisiler.Where(k => k.Adi.StartsWith(txtArama.Text) ||
k.Soyadi.StartsWith(txtArama.Text)).ToList();//lambda expression

Yukardaki kodda Kisiler.Whereden sonra Kisileri bundan sonra k harfi ile


aracam belirtiyorum.

=> : yleki anlamna gelir.

k yleki dedikten sonra bool bir deer vermeliyim. Bu art salayan deerler
DataSource olarak verilecektir.

Anlatlacak rnek Extension Metotlu Yntem


//Fiyati 20 ile 50 arasinda olan urunlerin UrunId,UrunAdi,Fiyati,StoktakiMiktari ve KategoriAdini
getiren sorguyu yazalm.
dgvSonuclar.DataSource = db.Products.Where(p => p.UnitPrice > 20 && p.UnitPrice < 50).Select(p
=> new
{
UrunId = p.ProductID,
UrunAdi = p.ProductName,
Fiyati = p.UnitPrice,
StoktakiMiktari = p.UnitsInStock,
KategoriAdi = p.Category.CategoryName
}).ToList();

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.

UrunID, UrunAdi, Fiyati, StoktakiMiktari ve KategoriAdi yazdmz yerler bizim kolonlara


verdiimiz isimleri temsil eder.

Entity Framework sorgusu yazmann iki yntemi var.


1.Extension Metotlu Yntem

2.Linq Sorgusu olarak yazmak (Language Integrated Query)

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.

rnek Bir Extension Metot


public static int ToInt32Ext(this string s) //this keyword ile extension metot tanmlyoruz.
{
return Int32.Parse(s);
}
Kullanm
string s = "9";

int i = s.ToInt32Ext(); //Extension method kullanm


label1.Text = i.ToString();

Kullanrken metot parantezleri arasnda parametre gndermek yerine, tipimizin sonuna


.ToString metodunu ekler gibi, oluturduumuz metodu ekledik.

5.2.5.6.1. Lambda Expression

Lambda fadeleri, deikenlere deer atamak iin kullanlan sadeletirilmi anonim


(isimsiz) fonksiyonlardr. Bu fonksiyonlar matematikteki ve bilgisayar bilimlerindeki
Lambda Calculus'un C# ve Visual Basic uygulamasdr.

Lambda fadeleri kullanarak parametre geilebilen ve deer dndren isimsiz yerel


fonksiyonlar oluturabilirsiniz. Bu ifadeler genelde basit ilemleri bildirmekte kullanlabilir
ve LINQ sorgularnn yazmnda ok ie yararlar.

Lambda Expression Oluturmak


i => i * 2

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 alt balktan oluur.

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();

rnek 2 : Siparisler tablosundan MusteriSirketiAdi


,CalisanAdiSoyadi,SiparisIdsi,SiparisTarihi ve KargoSirketiAdini getiren sorgu

rnek 2 Extension Metot


dgvSonuclar.DataSource = db.Orders.Select(o => new
{
MusteriSirketi = o.Customer.CompanyName,
CalisanAdiSoyadi = o.Employee.FirstName + " " + o.Employee.LastName,
SiparisID = o.OrderID,
SiparisTarihi = o.OrderDate,
KargoSirketi = o.Shipper.CompanyName
}).OrderByDescending(o => o.CalisanAdiSoyadi).Skip(10).Take(3).ToList();
rnek 2 : Linq
var result = from o in db.Orders
select new
{
MusteriSirketi = o.Customer.CompanyName,
CalisanAdiSoyadi = o.Employee.FirstName + " " + o.Employee.LastName,
SiparisID = o.OrderID,
SiparisTarihi = o.OrderDate,
KargoSirketi = o.Shipper.CompanyName
};
dgvSonuclar.DataSource = result.ToList();

rnek 3 : Company name icerisinde restaurant gecen musteriler

rnek 3 : Extension Metot


dgvSonuclar.DataSource = db.Customers.Where(c =>
c.CompanyName.Contains("restaurant")).ToList();
rnek 3 : Linq
var result = from c in db.Customers
where c.CompanyName.Contains("restaurant")
select c;
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.

rnek 4 : Extension Metot


db.Categories.FirstOrDefault(c => c.CategoryName == "Beverages").Products.Add(new Product
{
ProductName = "Kola3",
UnitPrice = 5.00m,
UnitsInStock = 500
});
db.SaveChanges();

dgvSonuclar.DataSource = db.Products.ToList();

rnek 5 : alanlarn adn,soyadn,doum tarihini ve yan getiren sorgu

rnek 5 : Extension Metot


dgvSonuclar.DataSource = db.Employees.Select(emp => new
{
Adi = emp.FirstName,
Soyadi = emp.LastName,
DogumTarihi = emp.BirthDate,
Yasi = SqlFunctions.DateDiff("Year", emp.BirthDate, DateTime.Now)
}).ToList();

rnek 6 : Kategorilere gore stoktaki rn saysn veren sorgu

rnek 6 : Extension Metot


dgvSonuclar.DataSource = db.Products.GroupBy(p => p.Category.CategoryName).Select(g =>
new
{
KategoriAdi = g.Key,
ToplamStok = g.Sum(p => p.UnitsInStock)
}).ToList();

Avantajlar

Daha az kod yazarak projelerimizi ksa srede gelitirmemize olanak salar


Performans salar
ORM kullanarak proje gelitirmemizi salar
Sql bilgisi olmadan proje gelitirilebilir

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.

ok katmanl yazlm mimarisi tam bu noktada devreye girer. Eer sisteminizi ok


katmanl bir mimari olarak hazrlarsanz ok ksa srede farkl platformlarda (web,
desktop, mobil) uyumluluu salayabilirsiniz.

ok katmanl yazlm mimarisi, kodlarn yaptklar ilere gre ayrlmas prensibine


dayanr. Kodlar oluturulan Class Library projelerinin ierisinde gruplanarak tutulur.

Katman says arttka proje karmak hale gelebilir. Biz rneklerimizde drt katmanl
mimari rneini inceleyeceiz.

Katmanlar ile almann Avantajlar


Gelitirilebilirlik : Projedeki kodlar paralanaca iin daha ksa srede farkl
platformlar iin kod yazabiliriz.
Kontrol Edilebilirlik : Kodlarmz paraland iin hata vermesi durumunda, daha
az kod arasnda hata aramamza olanak salar.
Temiz Kod Yazmak : Kodlar yaptklar ilere gre ayrlacandan daha kolay kod
okuyabilir ve kodlarmz daha kolay kontrol edebiliriz.
Performans: Her katman kendi zerine den grevi yapaca iin, grev
dalmndan ve gerekli zamanda kullanmdan dolay performans seviyesi
artacaktr.
Katmanlar ile almann Dezavantajlar
Zaman : Katmanlar ile altmzda normal bir projeye oranla biraz daha fazla
zaman harcam oluruz. Fakat bu durum projeyi farkl platformlar iin
hazrlamamz durumunda avantaja dnecektir.
Katman says arttka, katmanlar aras balantlar kurmakta zorlanabiliriz ve
katmanlarmz kafa kartrc bir hal alabilir.

177 | S a y f a
6.1. KATMANLAR
ok katmanl mimaride inceleyeceimiz katman says drtdr. Katman says
yazlmcnn isteine gre artabilir.

6.1.1. Presentation Layer (WinUI (Windows User Interface), WEB)


Uygulamalarda ki, grnm katmandr. Uygulamamzda kullanc ile iletiime
geebilen katmanlardr. Kullancdan bilgi almak, kullancya bilgi gstermek iin
kullanlrlar.

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.

6.1.3. Business Logic Layer (BLL)


Uygulamamzdaki verilerin kontrol ve gvenliinden sorumlu olan katmandr.
Kullancdan aldmz verileri kontrol eder ve gvenlik kontrollerinden geirir. Eer
kullancdan gelen veriler gvenli ve doru formatta ise verileri Data Access Layer
katmanna gnderir. Business Logic Layer katmannn bir dier grevi ise, Presentation
Layer ile Data Access Layer katman arasnda bir kpr grevi grmesidir.

6.1.4. Data Access Layer (DAL)


Veriye eriim katmandr. Facade katman olarakta geer. Data Access Layer
katmannn grevi veritaban ilemlerini ynetmektir. Veritaban balantsn kurar, veri
gnderir veya veri ekerek bu ilemlerin bilgilerini ve sonularn BLL yardmyla
Presentation katmanlarna gnderir.

6.2. Katmanl Mimarinin alma Mant


Katmanl mimarinin grevi kodlara tekrar kullanabilirlik salamak, kolay ynetmek ve
gelitirilebilirlik salamaktr. Bu grevi yerine getirebilmek iin kodlarmz yaptklar ilere
gre katmanlara ayrrz. Kullanc ile iletiime geecek olan katman (Presentation
Layer) sadece kullancdan bilgi almak ve bu bilgileri ilgili katmanlara gndermektir.
Ayn zamanda kullanclara gsterilecek bilgileri listelemek ve mesajlar gstermekte
Presentation katmannn grevidir.

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.

Katmanl mimari uygulamas iin aadaki projeleri tiplerini kullanacaz.

Windows Forms Application


Class Library

rneimizde katmanl mimari kullanarak Northwind veritabanndan alan bilgilerini


listeleyeceiz. Amacmz kodlarmz paralara ayrarak Windows Forms Application
projesinde alanlar listeleyeceiz.

ncelikle bir solution oluturuyoruz. Solution oluturmak iin Visual Studio programmz
altryoruz ve aadaki admlar takip ediyoruz.

Projemizin adn NorthwindEmployees olarak belirliyoruz. Solution olutu imdi ierisine


katmanlarmz eklemeye balayacaz. ncelikle Entity katmanmz ekliyoruz.

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)

Yukarda ki class libraryleri oluturduktan sonra BLL katman ierisindeki Class1.cs


dosyasn siliyoruz ve daha sonra yeni bir class ekliyoruz. Classmzn ad BEmployee.cs
olacak ekilde ayarlyoruz.

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.

uanda katmanmz oluturduk. Son olarak Presentation Layer mz olan WinUI


katmanmz oluturmamz gerekiyor. Solutiona sa tklyoruz ardndan Add > New
Project seeneine tklyoruz alan pencereden Windows Form Application projesini
seip ismini NorthwindEmployees.WinUI olacak ekilde yazdktan sonra WinUI
katmanmz oluturmu oluyoruz.

Katmanlar aras balantlar belirlememiz gerekiyor.

6.2.1. Referans Alma lemi

Projemizin ierisinde bulunan References a sa tklyoruz alan penceredeki Add


Reference a tklyoruz.

Karmza gelen Reference Manager (Referans Ynetimi) penceresidir.


Referanslarmza ekleme ilemi yapmak iin setiimiz referanslardan sonra OK
butonuna tklayarak reference ekleyebiliriz.

181 | S a y f a
Referans ekleme ileminide inceledikten sonra aadaki referans verme ilemlerini
yapabiliriz.

WinUI katmanmzn Referanslarn aadaki listeye gre dzenliyoruz:

182 | S a y f a
WinUI katmanmz Entity katmanmzdan referans alr.
WinUI katmanmz BLL katmanmzdan referans alr.

Tm katmanlarmz Entitiy katmanmzdan aldmz referans sayesinde katmanmzn


ierisinde tanmlam olduumuz modellere ve modellerimizin ierisindeki propertylere
eriebilmemize olanak salam oluyoruz.

WinUI katman ierisinde, BLL katmanmzdan aldmz referans sayesinde BLL


katmannda tanmlam olduumuz metotlara eriim salayabiliriz ayn zamanda BLL
katmanmz WinUI katman ile DAL katmanmz arasnda kpr grevi gryor.

WinUI katmanmz ierisinde, DAL katman ile dorudan bir balant yoktur. letiim BLL
katman zerinden salanr.

WinUI katmanmzn referanslarn yukardaki gibi oluturduktan sonra BLL katmanmzn


referanslarn oluturmaya balayabiliriz. BLL katmanmzn referanslarn aadaki
listeye gre dzenliyoruz:

BLL katmanmz Entity katmanndan referans alr.


BLL katmanmz DAL katmanndan referans alr.

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.

BLL katmanmzn referanslarn yukardaki gibi oluturduktan sonra Entity katmanmz


oluturmaya balayabiliriz. Entity katmanmzn referanslarn aadaki listeye gre
dzenliyoruz.

Entity katmanmz WinUI, BLL ve DAL katmanlarmza referans verir.


Entity katmanmz hibir katmanmzdan referans almaz.

Entity katman modelleri tek at altnda tutar. Entity katmanmzn referanslarn


yukardaki gibi oluturduktan sonra DAL katmanmz oluturmaya balayabiliriz. DAL
katmanmzn referanslarn aadaki listeye gre dzenliyoruz:

DAL katman, Entity katmanndan referans alr.

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.

Referanslarn son durumunu aadaki resimden kontrol edebilirsiniz.

Referanslar doru olarak ayarladysanz, yukarda ki gibi olmas gerekmektedir.

Srada classlarmz ierisinde bulunan metotlarn ieriini doldurmak var. Metotlar


yaptklar ilere gre dolduracaz.

lk olarak DAL katmanmzda bulunan DEmployee.cs class ierisinde ki


CalisanlariListele() metodumuzun gvdesini dolduruyoruz.

DEmployee.cs > public List<EEmployee> CalisanlariListele() Metodu


public List<EEmployee> CalisanlariListele()
{
SqlConnection baglan = new SqlConnection("Server=.; Database=Northwind; UID=sa;
PWD=123");

List<EEmployee> calisanListesi = new List<EEmployee>();


try
{
SqlCommand cmd = new SqlCommand("Select EmployeeID, FirstName, LastName, Title,
City from Employees", baglan);
if (baglan.State == ConnectionState.Closed) baglan.Open();

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;
}
}

Not : Yukardaki connection stringi kendinize gre dzenleyiniz.

DAL katmannda bulunan metodumuzun gvdesini doldurduktan sonra BLL


katmanmzda WinUIdan gelen istei, DAL katmanna iletiyoruz.

Bemployee.cs > public List<EEmployee> CalisanlariListele() Metodu


public List<EEmployee> CalisanlariListele()
{
DEmployee de = new DEmployee(); //DAL katmanndaki CalisanlariListele metodunu
kullanmak iin instance alyoruz.
return de.CalisanlariListele(); //DAL katmanndan gelen sonucu dndryoruz.
}

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.

WinUI katman >


private void btnCalisanlariListele_Click(object sender, EventArgs e)
{
BEmployee be = new BEmployee();
dataGridView1.DataSource = be.CalisanlariListele();
}

Yukarda yaptmz rnekde, kullanc butona tkladnda alanlar listeleme istei

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.

Projeyi altrmak istediimizde proje almayacaktr. Bunun sebebi Class Librarynin


Executible olmamasndan kaynaklanmaktadr. Hatay dzeltmek iin, WinUI
katmanna sa tklayp Set as Startup Project seeneini semeliyiz. Daha sonra
projemizi derleyip altralm.

Grdnz gibi alanlarmzn hepsi listelendi..

WCF - Windows Communication Foundation


Windows Communication Foundation (WCF) Nedir?
.Net Framework 3.0 ile hayatmza giren WCF, istemciler ve servisler arasndaki mesajlar
gndermek iin oluturulan sistemleri gelitirmek iin kullanlan API topluluudur. Bu
mesajlar, TCP, HTTP, MSMQ, Web Servisleri vb. gibi ortak tama protokolleri kullanarak
Intranet ve Internet zerinden gnderilebilir.

Windows Communication Foundation servis-ynelimli mimariyi temel alarak datk


uygulamalar gelitirmek iin kullanlan, datk mimari modelleri ve teknolojileri tek at
altnda birletiren ve ierisinde bir ok hazr bileen barndran bir Framework APIsidir.

Windows Communication Foundation Temelleri

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.

Service Oriented Architecture Nedir?


SOA, i srelerine katlan deiik yazlm uygulamarnn birbiriyle haberlemek zere
yazlmam olmalarna ramen veri alveriinde bulunmalarn salar.

Servis odakl mimari, bilgisayarda sistemlerin ilevselliklerini, i sreleri etrafnda


gruplatrarak sistem gelitirmesi ve btnletirilmesinde yol gsteren bir yazlm tasarm
felsefesidir.

SOA altyaps, i srelerine katlan deiik yazlm uygulamalarnn birbirleriyle


haberlemek zere yazlmam olmalarna ramen veri alveriinde bulunmalarn
salar.

SOA, gelitiricilerin baka kullanclar tarafndan kullanlmas amacyla bir iletiim a


zerinden sunduklar ilevleri ayr birimlere ya da hizmetlere bler.

SOA, uygulamaya ait i katmanlarnn, farkl servisler zerinden kullanlmasna olanak


salar. Bu durumda hangi platformu kullanrsanz Kullanm hazrlam olduunuz web
servisler araclyla i katmanlarn uygulamanzda kullanabilirsiniz. Unutulmamas
gereken bir konu da SOA bir teknoloji deil farkl platformlarn ve programlama
dillerinin birbiriyle haberlemesini salayan bir mimari dncedir.

7.1. Service Oriented Architecture


7.1.1. SOAnn Hedefleri
Servislere tekrar kullanlabilirlik kazandrmak,

Uygulamalar arasnda bir standart belirlenerek birlikte almay arttrmak,

187 | S a y f a
srelerinin ve ihtiyalarnn daha ksa srede karlanmasn salamak,

7.1.2. SOAnn Standartlar


Hizmetlerin mevcutta belirlenmi olan standarlara uygun ekilde tanmlanm
olmas,

Hazrlanan hizmetlerin farkl uygulamalar iin kolay ve pratik bir ekilde entegre
olmas,

Bir servisin baka bir servise bal kalmadan alyor olmas,

Bir servisin birden fazla yerde kullanlabilicek ekilde tasarlanmas,

Hizmetlerin tanmlanrken en bata bir i srecine dahil olucak ekilde


tanmlanmas,

Hizmetin zerinde bir deiiklik yaplrken bu hizmete bal olan uygulamalarn bu


sre zarfnda etkilenmeyecekleri bir yap oluturulmas,

Hizmet servisinin iyi bir ekilde ayarlanarak iyi bir performans salanmas,

7.2. WCF Temelleri

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.

Yukarda bahsettiimiz teknolojileri daha detayl olarak inceleyeceiz. imdi rneimiz


zerinden WCFi tanmlayalm.

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.

7.2.1. WCF ats Altnda Toplanan Modeller


.Net Remoting
XML Web Servisleri
COM+ ve MSMQ
7.2.1.1. XML Web Services
XML mesajlama tabanl bir sistem entegrasyon yntemidir. W3C tarafndan yaplan
resmi tanmyla web servisi, bilgisayarlar arasnda a zerinden etkileimi ve uyumluluu
salayacak yazlm sistemidir.

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 protokol ile paylam yapar.

7.2.1.3. Microsoft Message Queuing


Microsoft Message Queue(MSMQ), Windows NT srmnde gelen bir bileendir. MSMQ
deiik zamanlarda birbirinden bamsz olarak alan uygulamalar veya sistemler
arasnda veri transferi yaplabilmesini salayan bir teknolojidir. MSMQ , sistemler
arasnda srekli bir balant gerektirmemektedir. Bu da sistemlerin asenkron olarak
yksek performansl ve veri kayb olmakszn almalarn salar.

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.

Baz gerek hayat senaryolarnda, sistemin taraflar olan istemci, sunucu, a


bileenlerinin kmesi durumlarnda dahi ilevselliin devam edebilmesi istenebilir.
Bunun dnda, alan sistemin ierisindeki bileenlerin srekli bir balantda olmad
durumlarda bu tip iletiimleri zorlatrmaktadr. Bir baka deyile aa srekli olarak
balanamayan ama offline olarak alabilen istemcilerin bu tip bir mesajlama
sisteminin paras olmas istendiinde senkronizasyon glkleri ortaya kmaktadr.

7.2.1.4. COM+ (Component Object Model)


COM, programlama dilinden bamsz, program paracklar gelitirmek iin belirlenen
standartlar topluluudur.

COM+, COM teknolojisinin ikinci jenerasyonudur. COM teknolojisine yeni zellikler


eklenerek datk yapda snflar ieren uygulamalarn gelitirilmesi kolaylamtr.

7.3. Genel Kavram ve Terimler


7.3.1. Message
Veri paralarnn birbirinden bamsz hali olan paketlerdir, balk (header) ve gvde
(body) dahil olmak zere blmlerden olumaktadr. Bir mesajn balk dnda, tm
paralar ifreli ve dijital imzalanm olabilir.

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.5. Service Contract


Contract servisin adnn, namespaceinin ve dier global niteliklerinin tanmland
bileendir. Uygulamalarmzda Contract, bir interface oluturularak bu interfacee
[Service Contract] attributeu eklenilerek kullanlmaktadr.

7.3.6. Operation Contract


[ServiceContract] etiketi uygulanlarak oluturulmu interfacein ierisinde bulunan
metodlarn (operasyonlarn) servis tarafnda kullanlabilmesi iin uygulanan etikettir.
Interface ierisindeki metodlara [OperationContract] etiketi uygulanarak kullanlr. Bu
attribute o metodun servisin bir paras olaca anlamna gelir.

7.3.7. Data Contract


Servisi kullanan istemciler ile ortak almay salamak iin servisin kulland veri
nesneleri hakknda bilgi veren veriler olarak tanmlanabilir.

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.

Genel kavram ve terimleride rendiimize gre, bir WCF projesi gelitirmeye


balayabiliriz.

7.4. Windows Communication Foundation rnei


Visual Studioda yeni bir proje oluturuyoruz. Daha nce Windows Form Application ve
Class Library projeleriyle almtk. Yeni proje penceresinden WCF Service Library
projesi oluturuyoruz. WCF, standart olarak kullandmz Class Library gibidir. Class
Libraryden farkl servis mimarisi iin gerekli ktphaneler referanslarna tanml olarak
gelmektedir. Bu ktphaneler;

System.Runtime.Serialization
System.ServiceModel

Projemizin adn WCFSample olarak belirleyelim.

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">

App.config ierisinde yukarda ki satr buluyoruz, ve aada ki satr ile deitiriyoruz.

<service name="WCFSample.Servisim"> <!-- Classmzn adn yazyoruz -->

Bu ilemi yaptktan sonra aadaki deiiklikleride yapmamz gerekmektedir.

<endpoint address="" binding="basicHttpBinding" contract="WCFSample.IService1">

Tekrar yukarda ki satr bulun ve aadaki ekilde kodu dzenleyiniz.

<endpoint address="" binding="basicHttpBinding" contract="WCFSample.IServisim">

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.

Interfaceimiz ierisinde bir metot belirliyoruz. Oluturacamz metot, servise


gndereceimiz iki sayy toplayp, sonucunu bize geri gnderecek. Aadaki metodu
IServisim.cs ierisinde tanmlayalm.

IServisim.cs
interface IServisim
{
int SayiTopla(int sayi1, int sayi2);
}

Yukarda metodumuzu interface ierisinde tanmladk. Hatrlayacanz zere interface


ierisinde belirlenen yeteneklerde eriim belirteci (access modifiers) kullanmyorduk.
Ayrca oluturduumuz metodun gvdesini oluturmuyorduk. Interfaceler ile ilgili ufak
bir hatrlatmadan sonra servis yapsna geelim.

Servis mimarisinde, szlemeler zerinden hareket edilir. Bizim oluturduumuz interface


dosyasnn ve ierisinde oluturduumuz operasyonlarn (method) servise alacan
bildirmemiz gerekiyor. Bu bildirimler, attributelar ile iaretlenerek yaplr. Bir metodu,
servis operasyonu haline getirebilmek iin, ierisinde yer alan interfacei
[ServiceContract], ierisinde bulunan metodu ise [OperationContract] olarak
iaretlemeliyiz.

Yukardaki interfaceimizde aadaki dzenlemeleride yapalm.

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.

Dosyamz implament ettikten sonra metod gvdesini aadaki gibi dolduralm.

Servisim.cs > SayiTopla(int sayi1, int sayi2)


Public class Servisim : IServisim
{
public int SayiTopla(int sayi1, int sayi2)
{
return sayi1 + sayi2;
}
}

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

7.4.2. HTTP Nedir


Http bir kaynaktan datlan ve ortak kullanma ak olan hiperortam bilgi sistemleri iin
uygulama seviyesinde bir iletiim kuraldr.

7.4.3. TCP Nedir


TCP (Transmission Control Protocol), TCP/IP protokol takmnn iki aktarm katman
protokolnden birisidir.

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?

Windows Azure, Microsoftun Genel Bulut Uygulama ve alt yap platformudur.


Bu platformu pek ok ekilde kullanabilme imknna sahibiz.

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.

Windows Azureu gelitirme ve test ilemleri veya SharePoint ve dier


uygulamalar altrmak amacyla sanal makineler oluturmak iin de
kullanabilirsiniz.

Windows Azureu ok ama ok sayda kullancya sahip ok byk


leklendirilebilir uygulamalar oluturmak iin de 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.

Bulut biliim eitlerine bakldnda 4 temel yapnn kt grlmektedir;

Public Cloud; nternet zerindeki sunucular ile verilen cloud hizmetidir.

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

ekil 1: Windows Azure, Microsoft veri merkezleri zerinde alan, internet


zerinden eriilebilir uygulama hizmetleri sunmaktadr.

202 | S a y f a
8.3. Bulut Biliim

8.3.1. IAAS ( Infrastructure )


Infrastructure As A Service yapsnda, altyap Microsoft tarafndan bize servis
olarak salanyor.

Network ayarlar ve ynetimi, disk seimi, sunucu ynetimi ve sanallatrma gibi


yaplar Microsoft tarafndan ynetilir.

8.3.2. PAAS ( Platform )


Platform As A Services seeneinde, IAAS yapsna ek olarak iletim sistemi,
runtime ve sql gibi yaplar kurulu gelmektedir. Buna ek olarak altyapnn bakm
ve ynetimi gibi konularda salayc tarafndan salanyor.
Sunucu alm, network ayarlanmas, ynetilmesi, sanallatrlmas, iletim sistemi
lisans alnmas ve iletim sisteminin ayarlanmas, runtime kurulumlar yapp
gvenlik ayarlar yaplmas ve patch ynetimini gibi konularda ynetim
tamamen salayc tarafndan yaplmaktadr.

8.3.3. SAAS (SoftWare)


Software As A Services modelinde, tm yap tamamiyle salayc tarafndan
salanmaktadr. Buna rnek olarak hotmail ve gmail gibi yaplar rnek
verebiliriz. Tm yap salayc tarafndan ynetilir.

203 | S a y f a
8.4. Gvenlik

24 saat izlenen fiziksel gvenlik

Verilerin ve hizmetlerin yetkisiz eriim ve evresel tehditlere kar korunmas iin


fiziksel olarak veri merkezleri oluturulur, ynetilir ve izlenir.

zleme ve gnle kaydetme

Gvenlik, ortamdaki cihazlarn rettii byk miktarda bilgiyi yneten ve


zamannda uyarlar salayan merkezi izleme, bant ve analiz sistemlerinin
yardmyla izlenir.

Ayrca, kullanclara grnrlk salamak iin birden fazla dzeyde izleme,


gnle kaydetme ve raporlama kullanlabilir.

Dzeltme

Tmleik datm sistemleri gvenlik dzeltme eklerinin datmn ve


yklenmesini ynetir.

Kullanclar, Azure' da datlan Sanal Makineler iin benzer dzeltme eki


ynetim srelerini uygulayabilir.

Virsten/Kt amal yazlmdan korunma

Microsoft Kt Amal Yazlmdan Korunma, Bulut Hizmetleri'nde yerleiktir ve


virslerin, casus yazlmlarn ve dier kt amal yazlmlarn belirlenmesi ve
kaldrlmasna yardmc olmak ve gerek zamanl koruma salamak amacyla
Sanal Makineler iin etkinletirilebilir.

204 | S a y f a
Kullanclar ayn zamanda Sanal Makinelerinde bulunan i ortaklarnn kt
amal yazlmdan korunma zmlerini de altrabilirler.

Yetkisiz giri alglama ve DDoS

Yetkisiz giri alglama ve nleme sistemleri, hizmet reddi saldrsndan korunma,


dzenli szma testi ve forensic aralar Azure' un hem dndan hem de iinden
gelen tehditlerin belirlenmesine ve azaltlmasna yardmc olur.

Kalc sfr ayrcalk

Microsoft operasyon ve destek personelinin kullanc verilerine eriimi varsaylan


olarak reddedilir.

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

Azure datmlar arasnda istenmeyen iletiimlerin olumasn nlemek iin a


izolasyonu kullanr ve eriim denetimleri yetkisiz kullanclar engeller.

Sanal Makineler, mteriler yaplandrmad srece Internet'ten gelen trafik


alamaz.

Azure Sanal Alar

Mteriler, izole edilmi bir Sanal Aa birden fazla datm atamay ve bu


datmlarn zel IP adresleri araclyla birbirleriyle iletiim kurmasna izin
vermeyi seebilir.

ifreli iletiimler

Yerleik SSL ve TLS ifrelemesi, kullanclarn Azure'dan irket ii veri merkezlerine


ve Azure'dan yneticilere ve kullanclara yaplan datmlar iindeki ve
arasndaki iletiimleri ifrelemesini salar.

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

Azure Active Directory, kullancnn Azure, Office 365 ve dier bulut


uygulamalar dnyasna eriimi ynetmesini salar.

Multi-Factor Authentication ve eriim izleme gelimi gvenlik salar.

Szma Testi

Microsoft Azure gvenlik denetimlerini ve srelerini iyiletirmek iin dzenli


olarak szma testleri yapmaktadr.

Kullanclarn Azure da barndrlan uygulamalar zerinde yetkili szma testleri


gerekletirebilmektedirler.

Bu testleri gerekletirmek isterseniz Azure Mteri Desteinden onay almanz


gerekmektedir.

8.5. Yksek Performans

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.

Windows Azure zerinde karlalan problemleri zmek iin pararel olarak


grev alan e zamanl ok sayda sanal makinenin altrlmasdr.

Bunu yapmak iin bir ekilde uygulamalar programlamak gerekir, yani


yaplacak ii bu rnekler arasnda datmak gerekir. Windows Azure bunu
yapmak iin HPC Scheduler' kullanr.

Bu bileen, sektr standard Message Passing Interface'i (MPI) kullanmak zere


tasarlanm HPC uygulamalarn kullanabilmektedir.

Araba arpma simlasyonlar gibi snrl analiz yapmayan yazlmlar bu tr bir


uygulamalardan pek ouna rnek olarak gsterilebilir.

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.

Burada ama bulut zerinde alan HPC uygulamalarn oluturmay daha


kolay bir hale getirmektir.

8.6. Grid Computing

Distributed computing olarak adlandrlan dank bilgi ileme ynteminin


sanallatrlmasn salayan zm mimarisine ksaca Grid Computing
denilmektedir.

Grid Computing ak standart ve protokoller ile kurulan, genel i hedeflerine


gre belirlenmi datk ve sanal bir yapdr.

Burdaki temel ama, datk bilgi ileme ve veri kaynaklarnn kullanld


ilemciler, a ve depolama rnleri ile tek ve byk bir sistem yaratmaktr.

Yaratlan bu sistem tamamen birbirinden bamsz almakta olan ve birbirine


benzemeyen sistemlerin bir araya gelerek oluturduu sanal bir ileme gcdr.

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.

Bir VM (Sanal Makine) oluturabilmek iin hangi VHD'nin kullanlaca ve VM


boyutlarn belirtmeniz gerekir.

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.

Ayrca kendi VHDlerinizden de VM'ler ykleme ve oluturma imknna sahip


olursunuz.

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.

Ayrca deitirilen VHD'yi Windows Azure dna kopyalamak ve yerelde


altrmak mmkndr.

Windows Azure VM'leri ok farkl ekillerde kullanlabilir. Pahal olmayan bir


gelitirme ve test platformu oluturmak ve kullanmay bitirdiinizde de
kapatmak iin kullanabilirsiniz.
Ayn zamanda istediiniz dilleri ve ktphaneleri kullanan uygulamalar
oluturmak ve altrmak da mmkndr.

Bu uygulamalar Windows Azure tarafndan salanan her trl veri ynetimi


seeneini kullanabilmektedir.
Ayrca bir veya daha fazla makine zerinde altrabileceiniz SQL Server veya
dier DBMS'yi kullanmay da seebilirsiniz.

Dier seenek ise Windows Azure'u SharePoint veya dier uygulamalar


altran kurum ii veri merkezinizin bir uzants olarak kullanmaktr.

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.

8.8. Veri Ynetimi

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.

SQL Database ayrca verileri birden ok sunucuya datan federasyon


seenei de sunmaktadr.

Bu seenek ok byk verilerle alan veya daha iyi performans iin veriye
eriim taleplerini birden ok sunucu arasnda datmas gereken uygulamalar
iin yararldr.

altrma modelinden birisini kullanarak Bir Windows Azure uygulamas


oluturuyorsanz ve oluturduunuz uygulama ilikisel depolama gerektiriyorsa
SQL Database iyi bir seenek olabilir. Bulut dnda alan uygulamalar da bu
hizmeti kullanabilir fakat bu konuyla ilikili daha birok senaryo vardr.
rnein SQL Database zerinde saklanan verilere masast, dizst, tablet
bilgisayarlar ve telefon gibi farkl istemci sistemlerinden eriilebilir.

oaltma sayesinde dahili olarak yksek kullanlabilirlik salad iin SQL


Database aksama srelerini azaltmaya da yardmc olur.

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.

Uygulamanz ok popler olacak bu yzden byk lekte veriye izin vermeniz


gerekecek fakat bu veriler saklamakta ve basit yntemlerle geri artmaktan
daha fazla bir ey yapmayacaksnz.

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.

Birletirme gibi karmak ilemler desteklenmese de tablolar yazl verilere hzl


eriim salyor. Ayn zamanda son derece leklendirilebilirdir ve tek bir tablo
bir terabayt kadar veriyi tutabiliyor.

Basitliine ilave olarak tablolarn kullanm SQL Database'in ilikisel depolamasn


kullanmaktan daha da ucuz.

8.8.3. Blob Storage


Tables gibi Blobs da pahal olmayan depolama salar ve tek bir blob bir
terabayt byklnde olabilir.

rnein videolar veya yedekleme verileri veya dier ikili bilgileri saklayan bir
uygulama basit ve ucuz depolama iin Blobs'u kullanabilir.

Windows Azure uygulamalar ayrca Windows Azure srclerini de kullanabilir


ve bu sayede Blobs bir Windows Azure rnei zerine taklm olan Windows
dosya sistemi iin kalc depolama salar.

Uygulama sradan Windows belgelerini grr fakat ierikleri gerekte bir blob
ierisinde saklanr.

8.9. Web Sitesi

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.

Ayrca WordPress, Joomla ve Drupal de dahil olmak zere eitli popler


uygulamalara dahili destek de mevcut.

Ama internet sitelerinin ve uygulamalarnn genel bulut zerinde oluturulmas


iin dk maliyetli, leklendirilebilir ve byk lde yararl bir platform
sunmaktr.

8.10. A letiimi

212 | S a y f a
Windows Azure ABD, Avrupa ve Asya da bulunan veri merkezlerinde alyor.

Bir uygulama altrdnzda veya veri depolama ilemi gerekletirdiinizde


kullanmak istediiniz bir veya birden fazla veri merkezi seebiliyorsunuz.
Bu veri merkezlerine balanmak iin farkl yntemler kullanabilirsiniz;

Kendi kurum ii yerel anz belirli Windows Azure VM lerine balamak


iin Azure Virtual Network kullanabilirsiniz.

Bir veya birden fazla Windows sunucusunu belli bir Windows Azure
uygulamasna balamak iin Windows Azure Connect ten
yararlanabilirsiniz.

Windows Azure uygulamanz birden ok veri merkezinde alyorsa


kullanclardan gelen talepleri akll bir ekilde uygulamann rnekleri
arasnda ynlendirmek iin Windows Azure Traffic Manager
kullanabilirsiniz.

8.10.1. Virtual Network


Bir VPN a geidi aygt kullanan bir ynetici, yerel anz ve Windows Azure
zerinde alan belirli bir grup VM arasnda bir sanal zel a (VPN) oluturabilir.

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.

Gelitirici sadece Connect yazlmn kurum ii bilgisayarlara kurar (ve bu


durumda bir a yneticisine ihtiya kalmaz) ve Windows Azure uygulamasn
yaplandrr.

Bu ilem tamamlandktan sonra uygulama sanki ayn a zerindeymi gibi


kurum ierisindeki bilgisayarlarla iletiime geebilir.

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.

rnein kullanclar en yakn Windows Azure veri merkezine ynlendirilebilir


fakat varsaylan veri merkezinin tepki sresi belirlenmi bir eiin altnda
kaldnda bir baka veri merkezine ynlendirilir.

Kresel olarak datlm ve ok sayda kullancya sahip uygulamalarda bu gibi


sorunlarn zlmesi iin dhili bir hizmete sahip olmak yararldr.

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.

Bunun iin Microsoft, Windows Azure Active Directory'i sunuyor. ou dizin


hizmeti gibi Windows Azure Active Directory kullanclar ve kullanclarn bal
olduklar kurulular hakknda bilgileri saklamaktadr.

Kullanclarn balanmasna izin vermekte ve ardndan kimliklerini kantlamak


iin uygulamalara sunabilecekleri belirteler salamaktadr.

214 | S a y f a
Ayrca kullanc bilgilerinin, kurum ierisindeki yerel anzda alan Windows
Server Active Directory ile eitlenmesine izin vermektedir.

Windows Azure Active Directory tarafndan kullanlan mekanizmalar ve veri


formatlar Windows Server Active Directory tarafndan kullanlanlarla ayn
olmasa da yerine getirdii fonksiyonlar son derece benzerdir.

8.12. Medya

Gelien teknoloji ve sosyal alarn oalmas gibi faktrlerden dolay internet


trafiinin ounu videolar oluturmaktadr.

Sktrma algoritmalar ve kullanc ekranndaki grnm znrl gibi birok


faktr bulunmaktadr.

Srekli deiiklik gsteren internet trafiinden etkilenmemek iin ve younluk


anlarnda uygulamamzn performansl alp kullanclarn ihtiyalarn
karlamak iin medya servisinden yararlanabilirsiniz.

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.

Sonraki admda makinemizin yaplandrma ayarlarn seiyoruz.

Kullanacamz makinemize isim verdikten sonra donanm yapsn seip,


makinemize balanmak iin yeni bir kullanc ad ve ifresi seip 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.

Bu admda sanal makinemiz olumakta.

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.

Giri yaptktan sonra 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.

lk olarak Active Directory ksmndan varsaylan (kullanc hesab) olan blme


ift tklayarak hesap ynetim sayfasna giri yapyoruz.

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.

Bu sayfada uygulamamz olmad iin , Add An Application sekmesine


tklayarak uygulama ekleme 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.

Bu blmde ise, hesabmzn kullanc adn ve ifresini, girmemiz gereken gerekli


alann almas iin ikinci blm seiyoruz.

225 | S a y f a
Karmza kan alr pencerede uygulamamza giri yaptmz kullanc ad ve
ifresini giriyoruz.

Bu ve sonradan ekleyeceiniz uygulamalar iin artk her seferinde kullanc ad


ve ifre girmenize gerek kalmadan tm uygulamalarnza tek bir adresten
ulaabileceksiniz.

226 | S a y f a
Uygulamalarnz ekledikten sonra;

https://account.activedirectory.windowsazure.com/applications/default.asp
x

Adresinden artk btn hesaplarnz kontrol edebilirsiniz ve kullanc bilgilerinizi


dzenleyebilirsiniz.

227 | S a y f a
Birden fazla kullanc ekleyerek, eklenmi olan uygulamalara atama yaparak
dier kullanclarn da hesaplarn ynetmelerini salayabilirsiniz.

8.15. Veri Taban


Uygulamalarmz iin gerekli olan veri taban ilemlerini de Azure zerinden
kolayca halledebiliriz.

Sol menden Sql Database blmn seerek Create A Sql Database


sekmesini tklayarak veri tabanmz oluturmaya balayalm.

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.

Bu blmde balant ayarlarmz yapyoruz. Veri tabanna balant


kurabilmemiz iin gerekli parametreleri belirliyoruz.

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;

Configure sekmesine gelip ADD TO ALLOWED IP ADDRESESS sekmesine


tklamanz yeterli olacaktr.

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.

Ancak bu dili yorumlayabilen programlama dilleriyle birlikte kullanlarak


uygulama yazlabilir.

HTML,W3C tarafndan standartlatrlmaktadr. HTML, etiket ismi verilen eitli


balklardan olumaktadr.

Web kavram, CERNde bir bilgisayar programcs olan Tim Berners-Leenin HTML
adl bilgisayar metin dilini bulup gelitirmesiyle balamtr.

1980 ylnda CERNde grevli olan Tim Berners-Lee, CERN aratrmaclarnn


bilgilerini ve dokmanlarn birbirleriyle paylaabilmeleri iin gelitirdii bir dildir.

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.

9.1. HTML GELM

1995 HTML 2.0

1997 HTML 3.2

1998 Web Standartlar Projesi

1999 HTML 4.0

2000 XHTML 1.0

2004 XHTML 2.0

2004 HTML5

235 | S a y f a
9.2. HTML5 TEMEL YAPISI

Temel HTML5 yapsn aadaki tabloda grmekteyiz.

<!DOCTYPE html>

<html lang="en" xmlns="http://www.w3.org/1999/xhtml">


<head>
<meta charset="utf-8" />
<title> Bilge Adam </title>
</head>
<body>

</body>
</html>

__________________________________________________________

Html sayfas her zaman iim DOCTYPE etiketi ile balar ve ardndan <html>,
<head>, <body> etiketleri tanmlanr.

9.3. TEMEL ETKETLER

<!DOCTYPE html>

DOCTYPE, hazrladmz sayfalarn hangi tipte bir belge olduunu taraycya


bildirmek iin kullanrz.

Bu sayede tarayc bu sayfay hangi standartlara (hangi HTML srmne) gre


yorumlayacan anlam olur.

Eer DOCTYPE kullanlmazsa tarayclar sayfalar standart a uygun


yorumlamayacak, dolaysyla her tarayc size farkl farkl sonular verecektir.

Daha nceki DOCTYPE srmleri:

XHTML 1.0 srm:

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>

HTML 4.0 srm:

<!DOCTYPE HTML PUBLIC -//W3C//DTD HTML 4.01


Transitional//ENhttp://www.w3.org/TR/html4/loose.dtd>

HTML5 srm:

<!DOCTYPE html>

<html>

Bu etiket kapsayc etiket olarak kullanlr. Dier etiketler bu etiket ierisinde yer
almaktadr.

<head>

Tarayc ve arama motorlar tarafndan okunan blm olan bu etiket ierisinde


dier meta data etiketleri yer almaktadr.
title, scripts, meta, css, link, gibi tag leri barndrmaktadr.

<meta>

Meta etiketi sayfa hakknda tarayclara ya da arama motorlarna bir takm


bilgiler sunar.

Charset zellii sayfada kullanlan karakter kmesini tanmlamak iin kullanlr.


HTML5 ile yeni tanmlanan bir zelliktir.

Sayfamz iin charset tanmlamas yapmamz gerekmektedir. Eer tanmlama


yapmazsak, sayfadaki Trke ve zel karakterlerin gsteriminde problemler
yaayabilirsiniz.

Charset tarayclarn karakter ya da sembolleri dzgn bir ekilde gstermeleri


iin kullanlan bir yapdr.

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.

Name zelliine atanabilecek alt zellikler:

author: Gncel sayfann yazarnn veya iletiim bilgilerinin belirtilmesini


salar.

<meta name=author content=Bilge adam />

___________________________________________________________________

abstract: Gncel sayfann ksa zetinin belirtilmesini salar.

<meta name=abstract content= Biliim sektrnde en nc eitim kurumu. />

___________________________________________________________________

content-language: Lisan Kodlar listesindeki deerlerden birini alarak


gncel sayfann ierik lisann belirtir.

<meta name=content-language content=tr />

Ayrca lke kodlarn kullanarak lisansn ait olduu lke de belirtilebilir.

<meta name=content-language content=tr-TR />

___________________________________________________________________

content-type: Sayfann ierik tipini ve karakter setini belirtir.

<meta name=content-type content=text/html charset=utf-8 />

___________________________________________________________________

copyright: Sayfann telif hakk bilgisinin belirtilmesini salar

238 | S a y f a
<meta name=copyright content= 2015 bilge adam copy all right />

___________________________________________________________________

description: Sayfann aklamasnn belirtilmesini salar.

<meta name="description" content=" bu sayfa bilge adam hakknda bilgi vermektedir" />

___________________________________________________________________

designer: Sayfann (sitenin) tasarmcs hakknda bilgi verir.

<meta name="desinger" content="bilge adam akademi www.bilgeadam.com" />

___________________________________________________________________

distribution: Sayfann (sitenin) hitap ettii blgenin belirtilmesini salar.


Aadaki deerleri alr.

Global: Tm internet ana hitap ettiini belirtir.


Local: Sitenin bulunduu IP adres blounun ait olduu lkeye hitap
ettiini belirtir.
IU (international Use): Kamuya hitap etmediini belirtir.

<meta name="distribution" content="local" />

___________________________________________________________________

expires: Sayfann son geerli olduu tarihi GMT formatnda belirtir. Sayfay
daimi olarak geersiz klmak iin content zelliine '0' deeri atanmaldr.

<meta name="expires" content="Thu, 31 dec 2015 23:59:59 gtm" />

___________________________________________________________________

239 | S a y f a
generator: Sayfay oluturmak iin kullanlan programn isminin ve
srmnn belirtilmesini salar.

<meta name="generator" content="Visual studio 2015" />

___________________________________________________________________

keywords: Sayfann ieriini tanmlayacak virgl ile ayrlm anahtar


kelimeleri belirtir.

<meta name="keywords" content="C#, java, web grafik"/>

___________________________________________________________________

language: ngilizce olmayan sayfalarda ngilizce sayfa lisan adnn


belirtilmesini salar.

<meta name="language" content="Turkish" />

___________________________________________________________________

publisher: sayfay yaynlayan uygulamann isminin ve srmnn


belirtilmesini salar.

<meta name="publisher" content="VS 2015" />

___________________________________________________________________

reply-to: Sayfa hakknda E-Posta adresi belirtilmesini salar.

<meta name="reply-to" content="destek@bilgeadam.com" />

___________________________________________________________________

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.

index: Sayfann dizine eklenmesini bildirir.


follow: Sayfa iindeki balantlarn/linklerin izlenmesini bildirir.
archive: Sayfann n izleme iin ekran grntsnn oluturulmasn
bildirir.
noindex: Sayfann dizine eklenmesini engeller.
nofollow: Sayfa iindeki balantlarn/linklerin izlenmesini engeller.
noarchive: Sayfann n izleme iin ekran grntsnn oluturulmasn
engeller. Daha nce oluturulduysa silinmesini salar. (n izlemenin
silinmesi arama motorlarna gre farkllk gsterebilir.)
all: Tm olumlu bildirimleri uygular. Arama motorlar index, follow ve
archive bildirimlerinden farkl bildirimleri de kabul ediyor olabilir. Bu
yzden arama motorunun yardm/destek sayfasna baknz.
none: Sayfann gz ard edilmesini bildirir.
noodp: Eer sayfa DMOZ dizininde kaytl ise arama sonularnda DMOZ
dizinindeki aklamann yerine sayfann kendi aklamasnn kullanlmasn
salar. Bu deer, zellikle MSNBOT (live.com) iin geerlidir.

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: index, follow ve archive deerlerinin uygulanmasn gsterir.

<meta name="robots" content="all" />

Alttaki rnek: Arama motoruna sayfay dizine eklememesini fakat sayfadaki


linkleri takip etmesinin bildirilmesini gstermektedir.

<meta name="robots" content="noindex, follow" />

Alttaki rnek: Arama motoruna sayfay dizine eklemesini fakat sayfadaki linkleri
takip etmemesini ve sayfann n izlemesinin oluturulmamasnn bildirilmesini
gstermektedir.

<meta name="robots" content="index, nofollow, noarchive" />

241 | S a y f a
___________________________________________________________________

revisit-after: Arama motorlarna gn olarak sonraki ziyaretlerini


gerekletirme zamannn bildirilmesini salar.

<meta name=revisit-after content=4 />


<meta name=revisit-after content=4 days/>
___________________________________________________________________

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.

<meta name=refresh content=10 />

Alttaki rnek, sayfa yklendikten 60 saniye sonra http://www.bilgeadam.com


adresinin yklenmesini gsterir.

<meta name=refresh content=60; http://www.bilgeadam.com/>

___________________________________________________________________

title: Arama motorunun dizininde gsterilecek bal belirler <title>


etiketinden fark yoktur.

<meta name="title" content="HTML meta etiket deerleri" />

___________________________________________________________________

<title>

Tarayc grntlendii anda pencere balnda ve sekme balnda


gsterilecek olan metinin tanmland etikettir.
rnek:

242 | S a y f a
<title> Bilge Adam Yazlm </title>
___________________________________________________________________

<script>

Sayfamza javascript kod bloklarn eklememiz iin kullanlan etikettir. Head


etiketi ierisinde kullanld gibi body etiketi ierisinde de kullanlabilir.

zelikler:

src: {url} harici bir script dosyasn belgeye dhil etmek iin kullanlr.
Bu zellik kullanlrsa <script></script> bloklar arasna kod yazlamaz.

async: Harici bir JavaScript dosyasndaki kodlarn e zamansz almasn


salayan zelliktir.

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>

Sayfann gvdesini oluturan etikettir. ki gvde arasnda yazdmz tm kodlar


kullancya gsterilecektir.

Kullanm:

<body>
<p> Kullancya gsterilecek olan sayfa ierii bu alanda tanmlanacak </p>
</body>
___________________________________________________________________

<ID>

HTML elemanna benzersiz bir isim vermek iin kullanlr.

Kullanm:

<div id="container"> </div>


___________________________________________________________________

<CLASS>

CSS kodlarnn atanmas iin kullanlan etikettir. Bir elemana birden fazla class
tanmlayabilirsiniz.

Kullanm:
<div id="container" class="css"> </div>
___________________________________________________________________

9.4. YAPISAL ETKETLER

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.

Google gibi arama motorlar web sitesinde balklara gre indexleme


yaptndan dolay bu etiketler ierisinde yer alan ierikler balklara gre
gruplanp kullancnn arama sonularna yanstlmaktadr.
Arama motorlar tarafndan tercih edilen bir sayfanz olsun istiyorsanz, uygun
balklar iinde gerekli kodlamalar yapmalsnz.

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.

Blog sayfasndaki yorumlar gibi ya da rnlere yaplan yorumlar gibi sayfadan


bamsz hareket bamsz nesneleri tutabilen etikettir.

rnek:
<article>
<p> erik Yazs </p>
</article>
___________________________________________________________________

<ASIDE>
Sayfamzda yan men gibi oluturduumuz blmleri gruplamak iin
kullandmz etikettir.

erisinde balk, pararaf ve tablo gibi etiketler kullanlabilir. Aside etiketi


ierisinde genelde reklam alanlar, banner lar gibi yaplar gruplandrmak iin
kullanabiliriz.
___________________________________________________________________

<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>
___________________________________________________________________

9.5. ERK GRUPLANDIRMA

<H1> <H2> <H3> <H4> <H5> <H6>


Sayfa ierisinde balk oluturmak iin kullanr.
Kullanm ekli:
<h1> Bilge Adam </h1>
<h2> Bilge Adam </h2>
<h3> Bilge Adam </h3>
<h4> Bilge Adam </h4>
<h5> Bilge Adam </h5>
<h6> Bilge Adam </h6>

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

___________________________________________________________________

reversed: Liste elemanlarnn says kadar rakamsal olarak geriye doru


sralanmas iin kullanlr.
rnek:
<ol reversed>
<li> Yazlm </li>
<li> Sistem </li>
<li> Web Grafik </li>
<li> Ofis </li>
<li> 3D </li>
<li> ngilizce </li>
</ol>

Ekran kts:

6. Yazlm
5. Sistem
4. Web Grafik
2. Ofis
3. 3D
1. ngilizce

___________________________________________________________________

type: Liste elemanlar nne koyulacak karakter tipini belirlemek iin


kullanlr.
1, A, a, I, i deerlerinden birini alr. Varsaylan olarak 1 gelmektedir.

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:

value: li eleman ol etiketi ierisinde kullanldn da kullanlabilecek bir


zelliktir. Kullanld li eleman iin sra deeri tanmlar.
rnek:
<ol>
<li value="2015"> Bilge Adam </li>
</ol>

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:

href: Link zerine tklandnda ynlendirilecek sayfann URL ini tanmlar.


target: Alacak olan sayfann nerede alacan belirler.

_blank : Balantl sayfa yeni bir pencerede alr.


_self : Balantl sayfa ayn pencerede alr.

Kullanm ekli:

<a href="#"> Sayfa Bal </a>


___________________________________________________________________
<EM>
Sayfa ierisinde vurgulu metinler oluturmak iin kullanlr. (oluturduu metni
italik yapar).

Kullanm ekli:

<em> Vurgulamak istediiniz alan </em>


___________________________________________________________________

<STRONG>
eriin kaln yazlmasn salar.

252 | S a y f a
Kullanm ekli:

<strong> Kaln yazlacak metin alan </strong>


___________________________________________________________________

<SMALL>
erdii metnin kk boyutlu olmasn salar.

Kullanm ekli:

<small> Kaln yazlacak metin alan </small>


___________________________________________________________________

<S>
Sayfa ierisinde kullanldnda ierdii metnin zerini izer.

Kullanm ekli:

<s> Kaln yazlacak metin alan </s>

Ekran kts:

zeri izilecek alan


___________________________________________________________________

<I>
Sayfa ierisinde kullanld alanda ierii italik yapar.

Kullanm ekli:

<i> talik yazlacak alan </i>

Ekran kts:

253 | S a y f a
talik yazlacak alan
___________________________________________________________________

<B>
Sayfa ierisinde kullanld alanda ierii kaln yapar.

Kullanm ekli:

<b> Kaln yazlacak alan </b>

Ekran kts:

Kaln yazlacak alan


___________________________________________________________________

<U>
Sayfa ierisinde kullanld alanda ieriin altn izer.
Kullanm ekli:

<u> Alt izili alan </u>

Ekran kts:

Alt izili alan


___________________________________________________________________

9.6. ERK ETKETLER


<FIGURE>
Bir blmn yerleik ieriinin gruplanmas iin kullanlr. rnek olarak bir ya da
birden ok video veya resimlerin gruplandrlmas iin kullanabiliriz.

figcaption: Bu etiket figure etiketi ierisinde metin eklemek iin kullanlr.

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:

<embed src="file/intro.swf" type="application/x-shockwave-flash" />


___________________________________________________________________
<AUDIO>
Html sayfamzn ierisine ses dosyalarn eklememize yarayan etikettir.

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.

Canvas ile oluturduumuz ierii JavaScript ile kontrol edebiliriz.

Kullanm ekli:

<canvas> </canvas>
___________________________________________________________________

<IFRAME>
Tarayc zerinde baka bir web sayfasnn ieriini grntlemek iin kullanlan
etikettir.

Kullanm ekli:

<iframe> </iframe>
___________________________________________________________________

9.7. UYGULAMA ETKETLER

<METER>

256 | S a y f a
Belirli bir aralk ierisinde saysal bir lm ya da kesirli bir deer tanmlar.

Kullanm ekli:

<meter value="0.5"> </meter>

___________________________________________________________________

<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:

accept-charset: Sunucu tarafndan kabul edilecek karakter setini


tanmlar.
action: Form verilerinin gnderilecei sayfay tanmlar.
autocomplate: Tarayc, kullancnn daha nce veri alanna girmi
olduu verilere gre otomatik tanmlama yapp yapmamasn kontrol
eder. (on ya da off).
enctype: ifreleme trn ayarlar.
name: Formun adn tanmlar.
method: Bilgilerin gnderme eklini ayarlar (get yada post ).
Kullanm ekli:
<form action="send.aspx" method="post">
<label>Kullanc Ad :</label>
<input type="text" id="txtKullaniciAdi" /><br />
<label>ifre :</label>
<input type="text" id="txtSifre"
</form>

___________________________________________________________________

<KEYGEN>
Sayfa ierisindeki ieriklerin gsterilip gizlenmesine yarayan etikettir.
rnek:

<form action="demo_keygen.asp" method="get">


Kullanc Ad : <input type="text" name="usr_name">
ifreleme : <keygen name="security">
<input type="submit">
</form>

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>

Not: output etiketi Internet Explorer tarafndan desteklenmiyor


___________________________________________________________________

<SELECT>
C# tarafnda ComboBox a benzeyen bir yapdr. erisinde sral olarak
listelemek istediiniz bilgileri ekleyebileceiniz bir etikettir. erisinde Option
elemanlarn barndrr.

zellikleri:

autofocus: Sayfa yklendiinde seili eleman olarak gelmesini salar.


disabled: Elemann pasif olmasn salar.
multiple: Kullancnn birden fazla seim yapabilmesine izin verir.
required: Kullanc iin girilmesi zorunlu alan olmasn salar.

rnek:

<select>
<optgroup>
<option>
Bilge Adam
</option>
</optgroup>
</select>

259 | S a y f a
___________________________________________________________________

<OPTGROUP>
Liste elemanlarn gruplandrmak iin kullanlr.

zellikleri:

disabled: Grup eleman ierisindeki seeneklerini pasif yapmak iin


kullanlr.
label: Oluturulan grup iin balk tanmlamamz salar.

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:

cols: Grup eleman ierisindeki seeneklerini pasif yapmak iin kullanlr.


rows: Oluturulan grup iin balk tanmlamamz salar.
maxlenght: Metin alanna girilecek olan maksimum karakter uzunluunu
belirler.
readonly: eriin sadece okunabilir olmasn salar.
required: Zorunlu olarak doldurulmasn salar.
autofocus: Sayfa yklendiinde seili olmasn salar.

Kullanm ekli:

<textarea readonly="readonly"> </textarea>

___________________________________________________________________

<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>
___________________________________________________________________

Tablo ierii genelde 3 blmden oluur. Balk (thead), ierik(tbody) ve


alt blm(tfoot).

<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

Basamakl Stil ablonlar ya da Basamakl Biim Sayfalar. Htmle ek olarak metin


ve format biimlendirme alannda fazladan olanaklar sunan WEB teknolojisidir.

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. CSS3 SECLER

Html sayfas zerine yazm olduumuz etiketlerin zelliklerinden ulaarak onlara


css tanmlayabilmekteyiz. CSS zelliklerini tanmlayabilmemiz iin etiketlere
ulaabilmemizin birden fazla farkl yolu mevcuttur.

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.

Html ierisindeki tanml elemanlara isimleri kullanlarak ulalabilir.

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.
___________________________________________________________________

10.1.2. EVRENSEL SECLER

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

Sayfanzdaki elemann ID zelliinden ulaabilmenizi salayan seicidir. Html


yapsnda ID zellii her bir eleman iin bir defa kullanlmaldr. ID benzersiz isim
olarak elemana atanr.

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>

___________________________________________________________________

10.1.4. CLASS SECLER

Bu seicileri kullanarak bir HTML elemanna birden fazla class ekleyebilirsiniz.

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>
___________________________________________________________________

10.1.5. SOY SECLER

Html elemanlarnn oluturduu yapnn ierisinde bulunan elemanlara ulamak


iin kullanlan yapdr.

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.

11.1. Javascriptin zellikleri


Etkileimli ve Dinamik web sayfalar hazrlayabilir. Css dosyasn ynetebilir.
Client side olarak alr.
Javascript bilgisayardaki dosyalara mdehale edemez.
Html sayfalarnn bir parasdr tek balarna bir anlam ifade etmezler ve
alamazlar.
Yorumlanabilmesi iin taraycya ihtiya duyarlar
Javascript ile sunucuya dosya transferi yaplamaz.
Javascript kodlar <script> </script> tagleri arasna yazlr.
Harici bir dosya olarak HTML sayfasna gmlebilir.
Herhangi bir text editr ile yazlabilir.
Csharp koduna deer gnderebilir.

11.2. Javascript Kodlarna Giri


Javascript kodlarn yntem ile yazabilirim. Birinci yntem; bir javascript
dosyas (.js uzantl) oluturup kodlarm yazar ve bu sayfay HTML sayfamn
ierisine gmebilirim.

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>");

Document.Write dikkat edilmesi gereken bir metotdur. Bu kodu bir


fonksiyonellie balarsam (butona), fonksiyon altnda Document.Write
tm sayfay siler ve ierisindeki veriyi sayfaya yazar.

Fonksiyonlar javascriptde tetiklenmeden arlmayan yaplardr.

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>

Kontroln ierisinde Alert Kullanm


<input type="button" name="btnTikla2" value="Beni Tikla!" onclick="return
alert('Mesaj Kutusu')" />

Mesaj Kutusu Dialog Result


function mesajKutusu() {
var result = confirm("evet hayir mesaj kutusu");
if (result) {
alert("tamama basildi");
} else {
alert("iptale basildi")
}
}
Html Kodu
<div id="Ornek2">
<h5>2.Ornek: Alert-Confirm</h5>
<input type="button" name="btnTikla2" value="Beni Tikla!"
onclick="mesajKutusu()" />
</div>

Kontroln ierisinde Dialog Result Kullanm


<input type="button" name="btnTikla2" value="Beni Tikla!" onclick="confirm('Evet
Hayir Mesaj Kutusu')" />

Yukardaki gsterim c sharp tarafnda metot tetikleteceimiz zaman kullanlr.

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.;
}

Javascriptde Global Alan Fonksiyonlarn Ddr.

Aadaki rnekte javascriptin son versiyonunda kan, id ye gre element yakalama


zelliini kullanarak HTML etiketimizi yakalayabiliriz. Daha ksa bir yntemdir.

Javascriptde etiketin idsini yazdktan sonra . dediimizde javascript tarafnda tanml


fonksiyonlar gelecektir.

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;
}
}

11.2.4. Element Attributeu Deitirme


Javascript ile bir elemente ait attribute deerini deitirebiliriz. Aadaki
rnekte bir resmin src attributeunun deerini deitireceiz.

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;
}
}
}

11.2.5. Style Deitirme


Javascript ile bir html elementinin style n deitirebiliriz. Aadaki rnekte
mouse yaznn (p etiketinin) zerine gelince yaz rengi krmz olarak deiecektir.

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}

11.2.6. Validation Uygulama (Kontrol Etmek)


Verilerimizi javascript ile kullanc bilgisayarnda kontrol edebiliriz. Eer bilgiler
doru formatta deilse veya eksikse sayfann post back olmasn engelleyerek
sunucuya binecek yk azaltabiliriz. Ama burada dikkat edilmesi gereken

274 | S a y f a
nokta javascript kullancnn bilgisayarnda alaca iin kullanc dilerse
javascript almasn engelleyerek bu gvenlii aabilir.

Bu sebepten bilgilerimizi hem client hem server tarafnda kontrol etmeliyiz.


Client tarafnda kontrol etmenin bize salad faydalar;

Kullancya daha interaktif bir ekilde bilgi vermek


Kullanc Javascript kapatmamsa gereksiz yere postback olmasn
engellemek

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.

Jqueryi ikiye ayrabiliriz.

Selector : Htmlde ki dom yapsn kullanarak html elementlerini


yakalayabiliriz.

275 | S a y f a
Jqueryi kullanabilmek iin ktphaneyi projeme referans olarak vermem
gerekmektedir. Javascriptde referans sras ok nemlidir.

11.3.1. CDN Content Delivery Network


Javascript dosyalarn kendi bilgisayarmz yerine yksek hzl sunuculardanda
ekebiliriz. Bunun bize salad yararlarda vardr. rnein amerikadan bir
ziyareti web sitemizi ziyaret ettiinde, jquery dosyasn bizim sunucumuzdan
ekmek yerine googlen yksek hzl serverlarndan ekebilir.

11.3.2. Javascriptin alma Mant


Javascript kodlarnn alabilmesi iin web sayfasnn tamamen indirilmi ve
almaya hazr olmas gerekmektedir. Sayfa hazr olduunda kodlar hazr
olarak bekletmek iin $ sembol kullanlr. DOM yaps zerindeki bir html etiketini
semek iin $ sembol kullanlr.

$(document).ready()ierisinde yazlacak fonksiyonlarn aktif hale gelmesi ve hazr


olarak kullanlmay beklemesi iin kullanlr.

Javascriptde ilemler e ayrlr.

Get => text(),html(),val(),attr()


Set => text(),html(),val(),attr()
Add => append(),addClass(),removeClass()
Html Kodu
<input type="button" id="btnTikla" value="Beni Tikla" />
<hr />
<p id="bir" style="background-color: orange" lang="en">paragraf 1</p>
<p id="iki" style="background-color: maroon" lang="tr">paragraf 2</p>
<p id="uc" style="background-color: magenta" lang="tr">paragraf 3</p>
<hr />
<div id="divBir"></div>
<div id="divIki"></div>
<div id="divUc"></div>
<hr />
<div id="siyaset-foto"></div>
<div id="magazin-foto"></div>
<div id="spor-foto"></div>
Javascript Kodu
<!--<script
src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>-->
<script src="jquery-1.10.2.js"></script>
<script>
$(document).ready(function () { //Dkman hazr olduunda fonksiyonumu
hazrla

//$("#btnTikla").css("background-color", "red");butonun sayfanin

276 | S a y f a
acilisinda gorunumune mudahale etme

$("#btnTikla").click(function () { //Butona tklandnda


$(this).css("background-color", "red");
});

//Sayfa uzerindeki tum p elementlerinin HTML icerigine mudahale etme


//Merhaba Jquery
var x = $("p").html(); //Deer Alma

$("p").html("Merhaba JQeury");

//Javascriptde ilemler 3 e ayrlr, Deer Alma, Deer Atama ve Ekleme


//Get => text(),html(),val(),attr()
//Set => text(),html(),val(),attr()
//Add => append(),addClass(),removeClass()

//Idsi iki olan p elementinin HTML ve CSS ine mudahale etme


//merhaba ben 2 nolu p elementiyim
//kirmizi(arkaplan) -beyaz(yazi rengi)
////$("#iki").html("merhaba ben 2 nolu p elementiyim");
////$("#iki").css("background-color", "red");
////$("#iki").css("color", "white");
$("#iki").html("merhaba ben 2 nolu p elementiyim").css("background-
color", "red").css("color", "white"); //Extension olarak yazl

//idsi iki veya uc olan p elemntlerinin htmline mudahale etme


$("#iki,#uc").html("merhaba biz 2 ve 3 nolu p elementleriyiz");

//Attributelarindan lang'i tr olan elementleri yakalama


$("p[lang=tr]").css("font-family", "Old English Text MT").html("Language
degeri tr olan p elementleri");

//idsi bir olmayan paragrafi yakalama


$("p[id!=bir]").html("Biz bir degiliz.");

//idsi div ile baslayan divlere erisme


$("div[id^=div]").html("biz div ile basliyoruz.");

//idsi foto ile biten divlere erisme


$("div[id$=foto]").html("biz foto ile bitiyoruz.");
});
</script>

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 />

<div class="divMetin">Burada metin kelimesi gecmektedir</div>


<div class="divMetin">Burada o malum kelime gecmemektedir</div>
<div class="divMetin">
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur euismod,
mauris molestie egestas tincidunt, risus diam sodales quam, ac semper diam arcu sit
amet urna. Nunc magna sem, convallis eget convallis sed, mollis non orci. Donec
hendrerit velit id urna fermentum, sit amet adipiscing erat elementum. Mauris
tristique dignissim orci, in auctor massa mattis sed. Quisque fringilla, lectus non
porttitor feugiat, erat libero metin rhoncus nibh, nec sagittis ipsum urna sit amet
odio. Sed adipiscing enim in quam placerat, ut sodales lacus fermentum. Ut commodo
bibendum tellus, eu adipiscing nisi commodo a. Ut vitae lacus id leo blandit
condimentum. Aenean a iaculis ante. Duis vitae dapibus justo. Aliquam vulputate vel
nunc eget fermentum. Aliquam erat volutpat. Donec sapien leo, placerat in dolor at,
tristique dapibus massa. Nunc id eros orci. Curabitur bibendum odio sed lacus
posuere pellentesque.
</div>

<hr />

<table id="city" cellpadding="2" cellspacing="3" border="1">


<thead>
<tr>
<th>Sehirler</th>
</tr>
</thead>
<tbody>
<tr>
<td>Istanbul</td>
</tr>
<tr>
<td>Bursa</td>
</tr>
<tr>
<td>Ankara</td>
</tr>
</tbody>
</table>
Javascript Kodu
$(document).ready(function () {
$("#btnTikla").click(function () {
//id'si sehirler olan listenin elemanlarinin yazi renklerini degistirme
//$("#sehirler > li").css("color", "magenta");

//id'si paragraflar olan divin elemanlarndan p olannn yazi rengini


degistirme
$("#paragraflar > p").css("color", "magenta");

//idsi sehirler olan listenin elemanlarina ciftlik teklik durumlarina


gore css atama
//$("#sehirler li:nth-child(2n+1)")

278 | S a y f a
//$("#sehirler li:nth-child(2n)")
$("#sehirler li:even").css("color", "red");
$("#sehirler li:odd").css("color", "green");

//icerisinde 'metin' kelimesi gecen divlerin stil bilgilerini degistirme


// $(".divMetin:contains('metin')").css("background-color", "cyan");
$(".divMetin:contains('metin')").addClass("sonradan");

//idsi city olan tablonun cift indexli satirlarinin borderlarini ve yazi


rengini degistirme(addClass ile);//border: 3px solid red; renk=> blue
$("#city tbody tr:even").addClass("tabloicin");
});
});

11.3.3. Jquery Animasyonlar

11.3.3.1. Neden Jquery

Hafif ve Kk Boyutlu
Hazr Eklentiler
Cross Browser
Kolay renilebilirlik
Metot Zincirlemesi
CSS3 Uyumluluu
Geni Kullanc Kitlesi ve Dkmantasyon
Dier Ktphanelere Uyumluluk

11.3.3.2. Neler Yapabilir?

Sayfamzn bir ksmnda veya tamamnda grsel deiiklikler yapabilir


Html nesnelerine kolayca mdehale edebilir
Animasyonlar yaplabilir
Programlama dilleri ile yaplan sayfalardan veri ekebilir ve gnderebilir

11.3.3.3. Nerelerde Kullanlyor

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.

Asp.Net uygulamalar temelde n tarafta Html,Css,JavaScript gibi client-side


alan teknojileri, arka taraftada Server-Side olarak alan C#,VB gibi yazlm
dillerini kullanr. Bylelikle web tabanl uygulamalar istediimiz gibi
programlayabiliriz.
Visual Studio zerinde Asp.NET uygulamas amak:

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

12.1. Asp.Net Sayfa Yaam Dngs:


Asp.Net sayfalarnn olumas esnasnda baz yaam dngleri vardr, bu yapya
Page Life Cycle Management ad verilmektedir. Sayfalarn ilk istekle balayp
kullancnn karsna gelene kadar ki geen srede gemi olduu yollar
aadaki gibidir;

Page request
Start
Page Initialization
Load
Validation
Postback event handling
Rendering
Unload

281 | S a y f a
Page Request:

Page life cycle balamadan nce bu aama alr.


Sayfa bir kullanc tarafndan istendii zaman Asp.NET, bu sayfann parse
ve compile edilip edilmeyeceine veya sayfay altrmadan varsa
cachedeki versiyonunu gnderip gndermeyeceine karar verir.
Start:

Yaam dngsnn ilk admn temsil eden bu srete page nesnesinin


Request ve Response gibi propertyleri set edilir.
Ayrca page nesnesi, gnderilen requestin bir Postback sonucu mu yoksa
yeni bir request olarak gelip gelmediini belirler ve ona
gre IsPostBack propertysini set eder.
IsPostBack, sayfann Postback modunu bildirir. Bu aamada ek olarak
sayfann UICulture propertysi de set edilir.
Page Initialization:

Sayfann oluturulma aamasnda sayfa zerindeki kontroller, eriilebilir


duruma gelir ve her kontroln UniqueID propertysi set edilir.
Eer o anki request, bir Postback sonucu gereklemise bu aamada
Postback data henz yklenmemi ve kontrollerin deeri Viewstatee
gre yenilenmemitir.

Load:

Load aamasnda eer geerli request bir postback ise kontrollerin


deeri ve durumu Viewstate ieriine gre ekillenir.
Validation:

Varsa sayfa zerindeki validator kontrollerin Validate() metodu arlr.


Validate() metodu, page nesnesi ve iindeki kontrollerin her
birininIsValid propertysini set eder.
Hatrlanaca gibi IsValid propertysi, kontroln dorulama ileminin
baarl olup olmadn bildirir.
Postback Event Handling:

Eer request bir Postback sonucu gereklemise, Postbacki


gerekletirmi veya durumu deimi kontrollerin ilgili eventleri tetiklenir
Rendering:

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:

Unload evresi, sayfa tmyle render edildikten ve istemciye


gnderildikten sonra arlr.
Bu durumda sayfa, artk hafzan kaldrlmaya (discard) hazrdr.
Unload aamasnda, Request ve Response nesneleri temizlenmi olur.

12.2. ASP.NET Web Formlar


Web Formlar, tarayici zerinde grntlemek istediginiz metin ve kontrolleri ieren
kapsayici olarak dsnebiliriz.

Aada projeye nasl Web Form ekleneceinin grseli bulunmaktadr, burada


sayfamizin kod dosyasinin belirlendigi, hangi dil iin olusturuldugu, basliginin ne olacagi
gibi bilgilerin belirlendigi alandir.

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.

Web Form'un grnmn zellestirmek ve farkli tasarimlar kullanmak iin css


dosyalarindan yararlaniriz. Hali hazirda yer alan css frameworklerini kullanabilir ya da
kendi yazacigimiz cssler ile de web form tasarimimizi zellestirebiliriz.

Javascript ile kullanici tarafinda (client-side) etkilesim saglayabiliriz. Kullanici tarafli


dogrulama islemleri, html nesnelerinin hareket ettirilmesi, grsel etkilesim, resim slaty
islemleri gibi.

Body elementi, Kullanicinin sayfa ierigini grntleyebilmesi ve tarayici tarafindan


yorumlanabilmesi iin grntlenecek metin ve kontroller bu element (tag) ierisinde
yer almalidir.

Gerek ASP.NET Web Form kontrolleri, gerekse html kontrolleri ve elementleri h1,input,
div gibi

nesneleri ieren kapsayicidir diyebiliriz.

12.2.1. Form elementi ve znitelikleri


Her ASP.NET Web Form ierisinde bir adet form elementi varsayilan olarak gelmektedir.
Eger biz sunucu tarafinda bir islem yapacaksak, kullandigimiz kontroln form elementi
ierisinde yer almasi gelmektedir.

Ayrica her web form ierisinde yalnizca bir adet form elementi bulunmalidir

12.3. Postback Kavram


* Server tarafndan yollanan sayfa zerindeki verilerin tekrar server'a
gnderilmesi ve sayfann tekrardan hazrlanp kullancya geri gnderilmesi srecine
"Postback" denir...

* 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.

Ardndan f7 butonuyla code behind ksmna geiyoruz ve sayfann load eventna


aadaki gibi kodlarmz yazyoruz. Sayfann postback sonucu geldiini bize
syleyecek olan ey isPostback kontroldr. Eer sayfa postback olmu ise isPostback
bize true deerini dnecektir. Aksi takdirde sayfann ilk istekle yani Get metoduyla
geldiini belirlemi olacaz.

285 | S a y f a
12.4. ASP.NET Sunucu Kontrolleri

Sunucu kontrolleri

Eger bir kontroln sunucu tarafinda islem grmesini istiyorsak zniteliginde


runat="server" sahip olmasi gerekmektedir.

Sunucu kontrol trleri

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.

ASP.NET, sayfalar ile kontroller arasindaki degerleri korumak ve kullanabilmek iin


viewstate i kullanir. Asagidaki kod viewstate'in nasil uygulanacagini gsterir.

u durumlarda viewstate'i kullanabiliriz:

Sayfaya ait kontrollerin verilerini kalc klmak


Kullanicinin sayfayi postback islemine tabi tuttugunda degerleri saklayabilmek

12.4.2. Html kontrolleri


web forma html kontrol eklemek iin toolbax tan html section'i altindan istedigimiz
herhangi bir html kontroln srkle birak ynteymiyle ekleyebiliriz.

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:

stemci tarafinda alisan komutlar yakalanabilir


Html sunucu kontrolleri System.Web.UI.HtmlControl ktphanesi altinda
gruplandirilmis olarak yer almaktadir
Sayfa, istemci ve sunucu arasinda istek ve dns yapildiginda, html sunucu
kontrolleri devreye girer ve degerler otomatik olarak korunur ve tarayiciya iade
edilir.
ASP.NET dogrulama kontrolleri ile etkilesimde bulunabilir. Bu etkilesim,
kullanicinin bizim belirledigimiz kontrole dogru verileri girmesini kontrol etmemizi
ve dogrulamasina yardimci olur.
Csss ile daha farkli grnmler kazandirilabilir.

Web Sunucu kontrolleri eklemek ve Yaplandrmak

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.

Tm sunucu kontrollerinin ID zniteligi ortaktr, yani hepsinde ID zniteligi mevcuttur. ID


degerini istedigimiz gibi degistirebiliriz. Bu ID degeri bize, code behind tarafinda islem
yapmamiz iin seici zellik saglamaktadir. Hangi nesneyi seecegimizi, rnegin hangi
textbox'taki degeri alacagimiz ve hangi label a deger verecegimizi bilmemiz iin
gereklidir.

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.

Css ile grnm degistirilebilir ve farkli tasarimlar uygulanabilmektedir.

Bir butona atanan islem yada event ile ugrasmaktansa bir metod yazip bu metodu
ilgili eventlarda agirmam yeterli olacaktir.

stediginiz kontrol seerek kendiniz iin farkli bir kontrol olusturabilirsiniz.

12.5. VALIDATION KONTROLLER


Web uygulamalarinda, dardan gelecek olan (client-side) verilerin baz tutarllk
kontrollerinden gecmesi gerekmektedir. Bu tutarlilik kontrolllerini gerceklestiren
kontrollerimize Validation Kontroller adini vermekteyiz. Tm validation kontrolleri hem

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!

validation kontrollerde gvenlik amaci ile her zaman server-side kontrollerinde


gereklestirilmesi gerekmektedir. zellikle sql ile ilgili ilemlerde, yani veritabanna
dardan gelecek olan parametrelerin insert edilmesi sz konusu ise buralarda
validation kontrollerini hem client-side hemde server-side olarak kodlamamiz
gerekmektedir.Aksi takdirde tutarsiz ve bozuk verilerle karlarz, bir baska problemde
veri tutarsizligi rnegin yas bilgisinin girilmesini istedigimiz textbox'a isim girilmesi
sistemde parametre tipi uyumsuzlugu olusturacagi iin uygulamamiz hataya dsebilir
buda istenmeyen bir durumdur.Bu gibi durumlarin nne dedigim gibi validation
kontrollerle geebiliriz.

Validation'lari ekstra kazandrdklarna bakacak olursak:

Client-Side:

stemci tarafnda dorulama saglayarak kodun serverda ilenmesini engeller


Annda geri bildirim salar
Postback dnglerini azaltr

Server-Side:

stemci tarafndan geen kontroln tekrardan serverda kontrol edilerek verinin


tutarllunn garanti altna alnmasn salar

RequiredFieldValidator:

En ok karlatmz tutarllk durumudur, bir alann bo geilip geilmeme kontroldr.


Bu durumu ise Required Field Validator ile amaya alacaz. Baz zellikleri;

ControlToValidate: Hangi kontrol, bu validator'un sorumlulugu altindadir. Bir validator


yalnizca tek bir kontrolden sorumlu olabilir!

ErrorMessage: Hata durumunda kullancya ne mesaj verilecek?

Text: Eger bu ozellige atama yaparsaniz, birkac sayfa sonra gorecegimiz


"ValidationSummary"

Kontorlne ihtiyacnz var demektir. Text zellii ilgili validator'un yerine yazar

ErrorMessage: zellii ise Validation Summary kontrolune yerlesir

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;

ControlToCompare: Referans kontrolunuzu sizden ister. Yani karsilastirilirken uyumlu


olmasi gereken ana veri hangisidir?

290 | S a y f a
ControlToValidate: Dogrulanacak - referans kontroldeki degerlerle ayni degere sahip
- kontrol hangisidir?

ErrorMessage: Hata durumunda kullaniciya gosterilecek mesaj nedir?

Type: Hangi tipte iki verinin karsilastirilacagini belirtirsiniz (Metinsel, sayisal,ondalikli,


tarihsel vs..)

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.

ifreler birbiriyle uyumsuz ise kullancnn alaca ekran grnts:

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;

ControlToValidate: Hangi kontrol, bu validator'un sorumlulugu altindadir?

ErrorMessage: Hata durumunda kullaniciya ne mesaj gosterilecek?

Type: Hangi tipte veriler kontrol edilecek? Metinsel, sayisal, tarihsel kontroller

gerceklestirilebilir. Metinsel kontrol esnasinda, sozluk mantigina gore bir kontrol

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

tum kelimeler gecersiz olacaktir (Sleyman, Murat...)

Maximum - Minimum Value: Kontrol esnasinda kriter alinacak maksimum ve minimum


degerler nelerdir?

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;

ControlToValidate: Hangi kontrol, bu validator'un sorumlulugu altindadir?

ErrorMessage: Hata durumunda kullaniciya ne mesaj gosterilsin?

ValidationExpression: Bu validator bagli bulundugu kontrolden gelecek olan veriyi


hangi dokuya gore suzecektir

Aada belirtilen ValidationExpression alanlarndan istersek hazr Expressionlar


kullanabilir, yada http://regexlib.com adresinden custom expressionlar kullanabiliriz. Aadaki
rnekte e-mail adres kontroln ve doum tarihini uygun formatta olup olmadn kontrol eden
expression deseni kullandk.

292 | S a y f a
Eer kullanc istenilen formatlarda giri yapmaz ise karlaaca hata ekran:

CustomValidator:

Eger .NET ktphanesinin size sunduu validator'larin karilayamadg bir kontrol


olduunu dnyorsanz, sizin icin bir validator yazma template'i aacaktr. Gerekli
ayarlarna istediiniz deerleri verdikten sonra kendi validator'inizi yazm olursunuz.
Unutmamanz gereken, hem client-tarafl (JavaScript) hem de server-tarafl tum
kontrollerini kendinizin yapma gerekliliidir... Baz zellikleri;

ControlToValidate: Hangi kontrol bu validator'in sorumlulugu altindadir?

ErrorMessage: Hata durumunda kullaniciya ne tur bir mesaj gosterilecektir?

ClientValidationFunction: JavaScript fonksiyonunu da kendimiz yazacagimiz icin, bu


ayara o fonksiyonun adini vermelisiniz

ServerValidate: Client-side kontrolunu yaptiginiz gibi bir de Server-Side kontrolu de


kendiniz yapmalisiniz. Bunun icin de ilgili event'i doldurmalisiniz.

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

12.6. DATA KONTROLLER


12.6.1. Repeater
Repeater, tasarlanan bir kalp cercevesinden belirlenen bir veri kaynagindaki tum
verilerin bastan sona okunarak, tekrarli bir sekilde HTML ciktisi halinde ekrana
basilmasini saglayan ASP.NET kontroludur. Data kontroller arasinda en hizli veri
gosterme kontroludur. Bu kontrol uzerinden Insert, Update, Delete islemleri
gerceklestirilemez! veri gosterme isini yapar, bir data kontrolunun, herhangi bir
ablonuna veri kaynaginin bir bolumunu (DataTable=> DataColumnName, Class =>
Property, vs...) baglamak icin #Eval("bolumAdi") ifadesi kullanilir... Eval ile bind edilmis
(yuklenmis) veri ilgili kontrole atanir, # ile yazdirilir...

Repeater hicbir sekilde size bir HTML destegi sunmaz. Tum tasarimsal icerik yazilimcinin
sorumlulugu altindadir. Yalnizca bir takim templateler kullanima acacaktir. Bu
templateler;

ItemTemplate: Olmazsa olmaz template'dir. Repeater baglanan veri kaynagindaki


verilerin sirali halde gosterilmesine olanak saglar.

295 | S a y f a
AlternatingItemTemplate: ItemTemplate'e alternatif olarak bir gorunum olusturmanizi
saglar. Kullanimi tpk ItemTemplate gibidir

FooterTemplate: Sadece bir defa calisan template'dir ve tum veriler listelendikten


sonra calisir. En son asama olarak adlandirilabilir...

HeaderTemplate: En basta calisan template'tir. Baslik gorevi gorur. sterseniz bir baslik
atayabilir ya da kisa bir aciklama gerceklestirebilirsiniz.

SeperatorTemplate: Ayrac template'i olarak adlandirilir. Bir template'i digerinden ayirmak


icin kullanabilirsiniz (kisa bir cizgi cekmek vs...)

296 | S a y f a
Ekran kts:

12.6.2. GRIDVIEW

GridView kontrol, .NET System.Windows ktphanesindeki DataGridView kontrolnn


web versiyonudur. Data kontrolleri arasnda en gl ve en kullanl kontrollerden bir
tanesidir... Update, Delete ilemlerini gerekletirebiliriz.

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:

Kullanc Databaseden gelen Kategori Ad ve Kategori Aklamasn grntleyecek.


Eer Kullanc Kategori Aklamalarna basarsa, ilgili kategoriyi googleda aratacaz.
Eer kullanc Kategori Se buttonuna basarsa, kategori ID ve kategori Aklama
bilgisini ekranda yazdracaz.

Code Behind:

300 | S a y f a
GridView zerinden Update Delete lemleri

Senaryo:

Kullanc ekrannda Kategori Adn ve Kategori Aklamalarn grecek. Eer kullanc


<Dzenle> linkButtonuna basarsa labellar textboxlara dnecek ve kullanc mevcut
datalar gncelleyebilecek yada ptal edebilecektir. Eer kullanc Sil buttonuna
basarsa, Bu kayd gncellemek istediinizden emin misiniz? DKKAT: Bu ilem geri alnamaz! uyars
kacak ve silme ilemi kabul edilirse kayt silinecektir.

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.

Oluturduumuz bu kontrol sylediimiz gibi ayn bir asp.net sayfas


gibi davranr ancak mutlaka bir asp.net sayfas ierisinde olmak
zorundadr. User Controllerinde code behind blmnn
olduundan bahsetmitik. Kontrolmzn C# kodlarn yazdmz
alanda gerekli ilemlerimizi gerekletirebilir ve ardndan asp.net
sayfalarmza ekleme ilemimizi gerekletirebiliriz.

309 | S a y f a
Oluturduumuz User Controlu bir asp.net sayfasna solition
Explorerdan srkle brak yntemiyle sayfanza ekleyebilirsiniz.

Ekledikten sonra sayfanzn en stne bir page directive


ekleyecektir. Bu usercontroln yolunu belirtecek alandr. Page
Directive ierisindeki TagName ksm ise sayfann body blmnde
bulunan User Controln orada bulunmasn salayan etiketi
belirlemektedir.
Aadaki rnekte gsterilmi olduu gibi srkle brak ile kontrol
eklemi olduunuz alan da user control ieriiniz ve code behind
blmnde bulunan csharp kodlarnz altrlacaktr.

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.

Masterpage dosyalarnn herhangi bir ekilde web ortamndan bir


asp.net sayfasym gibi eriilmesi mmkn deildir. Master page
dosyalar ancak bir asp.net sayfas tarafndan kullanrsa bir anlam
kazanacaktr. Bir masterpagei kullanan bir asp.net sayfas eklemek
iin projemize sa tklayarak add > new item blmn den Web

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.

Body ksmna yani tasarm kodlarmzn olduu alanlara geldiimiz


de ise place holdern genelde sayfann ieriinin yer alaca
blmde konumlandn grebiliriz;

Bir master page kullanlan asp.net sayfasnn ise aadaki


grnme sahip olduunu grebilirsiniz, asp.net sayfasnda ise
tasarm ablonuyla ilgili hibir kodun olmadn grebilirsiniz.

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)

Srasyla tekniklerimizi inceleyelim,


1.1. Sunucu tarafl : Session State
Web sunucusu, kendisi ile iletiime geildii anda, kendisine
talepte bulunan browser (tarayc) ve talebin geldii IP adreslerini
kullanarak kullancya zel, benzersiz bir deer retir... retilen bu

314 | S a y f a
deere ASPNET_SessionId adi verilmektedir. retilen bu SessionId
bilgisinin yer ald bir cookie'de client tarafa yerletirilir...

Daha sonra, kullanc sayfalar arasnda gezinirken, Sunucudaki


ASPNET_SessionId bilgisi ile client taraftaki cookie aracl ile
tutulan ASPNET_SessionId bilgisi karlatrlr..Her Session icin
RAM'de ayr ayr bellek blmleri kullanlmaktadr.
Olduka performansl olan bu yap, yanl ve bilinsiz bir kullanma
uygulamanzn srekliliini bile bozabilir.

Session tekniinin kullanm u ekildedir;

Session["EtiketIsmi"] = "Etiket ierisindeki deer";

Yukardaki kullanmdaki gibi kullanabilirsiniz. Session nesneleri


ieriye deer olarak object trnde kabul etmektedir bu nedenle
tm deer ve referans tiplerini session ierisinde saklayabilirsiniz.
Session web sayfalarnn giri yaplan kullanc numaralarn
saklamak, sayfalar ierisinde gezinti salanrken tekrar kullanc
ad ifre sormamak iin ve genellikle e-ticaret sitelerinde sepet
ierisindeki rnleri tutmak iin kullanlr.

Session nesnesi timeout yani zaman am oluncaya kadar


saklanmaktadr. Sunucularn ierisinde IIS (Internet Information
Server) yani web sitesini yaynlayan web server servisinde
varsaylan olarak 20 dakika olarak ayarlanmtr. Bir kullancnzn
giri yapt esnada bir session ierisine giri yapan kullancnn
veritabannzdaki ID numarasn tuttuunuzu dnrsek, kullanc
bir sayfa dna kmaz yani ayn sayfada sabit olarak kalr ise 20
dakika sonra otomatik olarak session kapatlacaktr. Kullanc
sayfalar arasnda gezintiye devam ettii srece, her yeni bir
sayfaya giri yaptnda session sresi tekrar 20 dakika olarak
ayarlanacaktr.

Web sayfanzn web.config dosyasndan session timeout sresini


varsaylan dnda bir deer olarak belirleyebilirsiniz. Deer tipi
olarak saniye kabul etmektedir, bu deiiklii aadaki kod
rnei ile gerekletirebilirsiniz.

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

Default.aspx sayfamzn CodeBehind ierii

Yukardaki kod rneklerinde ncelikle sayfamza ornek1.aspx


sayfasna eriebilecekleri bir link ekledik. Direkt olarak sayfaya
session nesnesi ierisinde tanan deeri ekledik. Code behind
tarafnda ise session deeri ierisinde tanan deeri bir
arttrlmasn saladk. Bu ilemi tm sayfalarn codebehind

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

Ornek1.aspx sayfasnn codebehind ierii

Ornek2.aspx sayfasnn html ierii

317 | S a y f a
Ornek2.aspx sayfasnn codebehind ierii

Bu sayfalar arasnda gezen kullanc sadece kendi gezdii sayfa


saysn grecektir. Artk son olarak KacSayfaGezdim.aspx
sayfasna ulat zaman gezdii sayfa saysn
grntleyebilecektir.
KacSayfaGezdim.aspx sayfasnn html kod ierii

KacSayfaGezdim.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.

1.2. Sunucu Tarafl : Application State

Application state, session state gibi deer verilebilen ve


ierisindeki deerleri kullanabildiimiz nesnelerdir. Ancak
session state, balatld andan kullancnn uygulamay yani
web sayfamz kapatana kadar geirdii sre zarfnda
saklanrken, application state oluturulduu andan itibaren
web sayfas yada sunucu kapatlana kadar (iis restrat ilemleri
iin de geerlidir) korunacaktr. Kullanm olarak ayn yapya
sahip olan application state, ziyareti saylarnz
tutabileceiniz, anlk ziyareti bilgisine eriebileceiniz bir
tekniktir. Dier bir sylemle session kullancya zel olmakla
birlikte application uygulama bazldr, tm kullanclara
ierisindeki deer istenilirse gsterilebilir veya deitirmelerine
olanak tannabilir.

Application State iin aadaki gibi bir kullanm


gerekletirebilirsiniz;
Application["EtiketAdi"] = "EtiketinDegeri";

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,

Asp.net projemize sa tklayarak add > new item > Global


Application Class esini setikten sonra projemize Global.asax
ismiyle ekliyoruz. Dosyamz oluturulduktan sonra ierisinde yer alan
eventler zerinden online kullanclarmzn bilgileri iin ilk olarak
Application_Start eventimiz ierisine web sayfamz yayna balad
anda oluturulacak olan bir application nesnesi oluturuyoruz.

protected void Application_Start(object sender, EventArgs e)


{
Application.Add("OnlineKullanicilar", 0);
}

Oluturulan OnlineKullanicilar etiketine sahip olan application


nesnemizin varsaylan deerini 0 olarak belirledik. Bu ilemi aadaki
yntemlede yapabilirdik;

320 | S a y f a
Application[OnlineKullanicilar] = 0;

Uygulamamzn aktif olduu esnadaki online kullanc saymz 0


olarak belirledik, artk uygulamamzda her yeni bir oturum
aldnda online kullanc saymz bir arttracaz. Her yeni bir
kullanc, yeni bir oturum olarak kabul edildiinden dolay kullanc
saymzn arttrma ilemini session_start eventi ierisinde
gerekletirmeliyiz.

protected void Session_Start(object sender, EventArgs e)


{
Application.Lock();
Application["OnlineKullanicilar"] = ((int)Application["OnlineKullanicilar"]) + 1;
Application.UnLock();
}

Yukardaki rnek kodda, Application[OnlineKullanicilar]dan


dnen deeri int deerine cast ettik ve deeri bir arttrarak
Application nesnemizin ierisine tekrar teslim ettik. Bu ekilde online
kullanc saymz + 1 yaparak gncel online kullanc saymz
application nesnesi ierisinde tutabiliriz.
Kod rneinde bulunan Application.Lock() metodu turnike grevi
grerek o esnada application nesnesinin baka bir session
tarafndan kullanlmasn engelleyecektir.
Kullanc saymzdaki art tamamladk imdi geldi sra kullanc yani
oturum (session) sonlandrlsysa bu kullanc online kullanc
saysndan dmeliyiz. Bunun iin oturum bittiinde, session_end
eventini kullanabiliriz;

protected void Session_End(object sender, EventArgs e)


{
Application.Lock();
Application["OnlineKullanicilar"] = ((int)Application["OnlineKullanicilar"]) - 1;
Application.UnLock();
}
Yukarda da ayn kullanc saymz arttrdmz gibi, session
sonland anda yani kullanc timeout olduu yada web sayfasn
kapatt zaman online kullanc saymzn bir dmesini saladk.

Artk gerekli art ve azal ilemlerini gerekletirdiimize gre


istediimiz sayfadan web sayfamz ziyaret eden kiilere ka online
kullancmz olduunu gsterebiliriz.

Sayfamzn html ksmna bir label ekledik;

321 | S a y f a
Sayfamzn code behind blmne geliyoruz ve label ierisine
online kullanc deerimizi veriyoruz;

Online kullanclarmz takip edebildiimiz ve kullanclarmza


gsterebildiimiz uygulamamz bu ekilde son buluyor.

2.1. stemci Tarafl : ViewState


Sayfann yasam dngsnn ilk basama olan initalization
aamasnda, tum sayfa ve sayfa zerindeki kontroller yeniden
yaratlr... Bu yaratlma sureci sayfann ilk isteinde de - "GET"
metodunda - sayfann postback'le dnmesinde de - "POST"
metodunda - gereklemektedir. Ancak kontroller yeniden
yaratlmasna ramen, baz kontrollerin Uzerlerindeki deerleri
muhafaza ettii grlr. Bu isin arkasndaki gizli kahraman
"ViewState" dediimiz nesnedir.

ViewState sayfann zerinde muhafaza edilmesi gereken deerleri,


asli bir HTML input kontrol olan "hidden" bir alanda sakli tutar.
<.input type="hidden" value="ViewStateDegerleri"/>

Varsaylan olarak tum kontrollerin ViewState deerleri ack


durumdadr. Yani ViewState'den

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...

2.1.2. Sayfa Bazl ViewState Kapatma Sayfa bazl olarak


ViewState'i kapatmak iinse yaplmas gereken ey,
sayfann en tepesinde bulunan PageDirective ksmna
gelerek "EnableViewState="false" ibaresini eklemektir.
Sayfa en nihayetinde bir kontrol olduundan tr,
sayfann ViewState'ini kapatrsanz, o sayfadaki bir
kontroln ViewState zellii ack olsa bile artk ilem
grmeyecektir!

2.1.3. Uygulama Bazl ViewState Kapatma: Bunun iin gidilmesi


gereken referans yol, web.config yoludur. Web.config
dosyanzda pages elementinin "enableViewState"
attribute'une "false" deeri atarsanz uygulama bazl olarak
da ViewState'i kapatabilirsiniz... Buradaki ayar bir "zorlama"
deildir. Yani, sayfanzda viewState acksa ve sayfa
zerindeki kontrolde de acksa o kontrol ViewState deeri
tar.

2.2. stemci Tarafl : Query String


Birok web sayfasnda sayfann uzantsndan sonra soru
iaretiyle balayan bir alan grmzdr. Bu alana query
string ad verilmektedir. QueryString, sayfamzn uzantsnn
artdndan soru iareti ile balayarak, string deiken
isimlerimizi verebildiimiz alanlardan olumaktadr. Genel
ablonu u ekildedir;

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.

string yeniDegisken = Request.QueryString["degiskenIsmi"];


Querystring zeriden birden fazla deiken yani bir dier
adyla parametre gnderebilmek iin & (and) karakteri
kullanlr. rnek olarak birden fazla parametre gnderilmi
query string rnei aadaki gibidir;

www.adresimiz.com/OrnekSayfa.aspx?Degisken=deger&DegiskenIki=
deger2

2.3. stemci Tarafl : Cookies


Trke karl erezler olarak bilinen, istemci tarafl bir state
management tekniidir. Cookies tamamen web sayfasna
balanan kullancnn browser yani taraycs tarafnda
tutulan bir yntemdir. Cookie dosyalar kullancnn
bilgisayarnda onunla ilgili bilgileri tutup, gerektii zaman yine
istemci tarafndan o bilgiye eriebilmek iin kullanlr.
Kullanm olduka kolay, sunucu tarafn yormayan, veri
saklama esnasnda gelitiricinin sorumluluk almak zorunda
olmad bir yntemdir. Cookie nesnelerinin ok fazla
kullanld web sayfalarnda yelik girilerinde bulunan beni
hatrla zelliinin yapmn aada inceleyelim. lk olarak veri
ekerek sayfamzn page_load eventinde daha nceden
giri yapp, beni hatrla checkboxn iaretlemi birisiyse, o
kiinin bilgilerini hemen textboxlara yazdralm.

protected void Page_Load(object sender, EventArgs e)


{
//Cookie'den veri almamz gerekiyor ise, o cookie var mi yok mu kontrol etmeniz
gerekmektedir.
if (Request.Cookies["login"] != null)
{
HttpCookie gelen = Request.Cookies["login"];
txtKullaniciAdi.Text = gelen["ad"];
txtSifre.Text = gelen["sifre"];
}
}

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.

protected void btnGirisYap_Click(object sender, EventArgs e)


{
if (chbBeniHatirla.Checked)
{
HttpCookie cerez = new HttpCookie("login");
cerez.Values.Add("ad", txtKullaniciAdi.Text);
cerez.Values.Add("sifre", txtSifre.Text);
//cerez.Expires => Cookie'nizin istemci bilgisayarda ne kadar surece tutulacagini belirtir.
Genellikle net tarih vermektense DateTime'n Add... metotlarini kullanmayi tercih ederiz...
cerez.Expires = DateTime.Now.AddDays(30);

//cerez.Domain = "kurumsal.bilgeadam.com"; => Artik bu cookie sadece


"kurumsal.bilgeadam.com" domain'i altinda gecerlidir. Yani "bireysel.bilgeadam.com"
adresinden bu cereze ulasamazsiniz!;
//cerez.Path = "/ogrenciler"; => Bu cookie yalnizca www.bilgeadam.com/ogrenciler
klasoru altinda gecerlidir.

Response.Cookies.Add(cerez);
Response.Redirect("Hosgeldiniz.aspx");
}
}

12.9. Caching (nbellekleme)


nbellekleme, sayfalarnzda ihtiyacnz olan verilerin her request
(istek) esnasnda tekrar tekrar kaynaktan ekilmesinin nne
gemek ve bu ekilde performans arttrmak amacyla ortaya
kmtr. rnek olarak bir e-ticaret siteniz var ve ana sayfada
bulunan rnleri her ziyareti siteye girdiinde veritabanndan
ekerek gsteriyorsunuz. Ana sayfada bulunan rnlerinizin srekli
veritabanndan tekrar tekrar ekilmesi doru bir yntem deildir. Bu
yntem yerine nbellekleme yaparak verilerinizi bir sonraki
deiiklie kadar nbellekte saklayabilir, kullanclarnz web

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 (nbellek) ikiye Data Caching ve Page Ouutput Caching


olarak ikiye ayrlmaktadr.
1) Data Caching (Veri nbellekleme) : Herhangi bir veri
kaynandan gelen verilerinizi nbellekleyerek, yukardaki
rnekte bahsetmi olduumuz gibi veriler iin performans
kazanmanza olanak tanmaktadr.
2) Output Caching(kt nbellekleme): Sayfanzn tm html ve
css ktsn nbellee alarak kullanclarnza bir sonraki
nbellekleme zamanna kadar ayn grntnn gsterilmesini
salayan nbelleme mekanizmasdr.
12.9.1. Data Caching (Veri nbellekleme)
rnek bir veritabannz olduunu ve ierisinde Urunler isimli bir
tablonuz olduunu dnelim. Tm rnleri ado.net sorgusu ile bir
DataTable nesnesi ierisinde dolduruyor olalm ve bu datatable
nesnesi ile sitemiz ierisinde baz datacontroller sayesinde
verilerimizi gsterdiimizi varsayalm.

Ado.net ile yaptmz sorgudan dnen verileri datatable


nesnemize dolduralm;

SqlDataAdapter da = new SqlDataAdapter("Select * from Urunler", baglanti);


DataTable dt = new DataTable();
da.Fill(dt);

dt isimli datatable nesnemiz ierisinde artk btn rnlerimiz var,


bu rnlerimizi bir nbellek nesnesi zerinde saklamaya
balayabiliriz;

Cache.Insert("dtUrunler", dt);

Yukardaki gibi temel olarak bir cache oluturduk ve ierisine


datatable nesnemizi attk. Artk repater, gridview gibi
datacontrollerin datasource zelliini verirken cache zerinden
ekebiliriz. Cache zerinden ekme ilemini gerekletirirken

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();

Yukardaki gibi verilerimizi ekebiliriz. Ancak bu ilemi


gerekletirmeden nce mutlaka Cache[dtUrunler]
oluturulmu mu yani null olup olmad kontrol yaplmaldr. Eer
cevap null olarak dnyorsa ncelikle cache oluturulmaldr.

nbellek oluturulurken bir sre belirleyebilirsiniz. Bu size belirli


aralklarla cache verilerinizin silinmesini, gncel verilerin null
kontrolnden sonra tekrar nbellee alnmasn salayacaktr.
Aadaki rnekte 20 dakika aralklar ile nbellein silinmesini
salayan kod rnei yer almaktadr.

Cache.Insert("dtUrunler", dt, null, DateTime.Now.AddMinutes(20), Cache.NoSlidingExpiration);

12.9.2. Output Caching (kt nbellekleme)


kt nbellekleme yntemi sayfanzn tekrar derlenip, sunucuya
gidip gelmesi ile kullancya gsterilen ieriin tekrar tekrar
oluturulmasnn nne geerek ekstra bir performans
kazandracaktr. Aadaki kod rneini sayfanzn page directive
blmnn hemen altna eklerseniz output caching ilemini
gerekletirmi olacaksnz.

<%@ OutputCache Duration="20" VaryByParam="none" %>

Duration : Sayfanzn ka saniye boyunca nbellekte kalacanz


belirttiiniz zelliktir.
VaryByParam : Bu zelliin none olarak braklmas sayfanzn
tamamnn nbellee alnacan ifade eder.

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.

Active Directory ise;


Aktif olarak yelik bilgilerini saklamak iin bize api salar. Active
directory'de windows authentication ile yelik sistemleri denetlenir.

Uygulamanizda, membership sistemini kullanmak icin asagidaki


adimlari sirasiyla gerceklestirmeniz yeterlidir...

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.

4) ncelikle bir connectionString tanmlanr

5) machine.config icerisindeki "membership" elementi komple


kopyalanip proje icerisine dahil edilir... Yapistirma islemi bittikten
sonra, providers elementi icerisine "clear" elementi eklenir. Boylece
machine.config'deki geleneksel membership ayarlari yok sayilmis
olacaktir!

Membership provider'n baz zellikleri bulunmaktadr:


Name => Salaycnzn ad nedir sorusuna verilen cevap. Eer
varsaylan kurulumu gerekletirdiyseniz aadaki ismi
deitirmeniz nerilmemektedir.
Type => Membership snflarinzn hangi namespace altnda
bulunduunu gsterir.

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..

6) machine.config ierisindeki "roleManager" elementi komple


kopyalanp proje ierisine dahil edilir... Yaptrma ilemi bittikten

332 | S a y f a
sonra, providers elementi icerisine "clear" elementi eklenir. Bylece
machine.config'deki geleneksel roleManager ayarlar yok saylm
olacaktr!

Web.Config son hali:

LOGIN
Kullancnn siteye giri yapabilmesi iin kullanlan kontroldr. Template hazr bir ekilde gelmektedir.

Asp.Net Configuration ekranndan gerekli tanmlamalar ve ayarlamalar


yapacaz;

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;

Bu ekranda next diyerek, bir kullanc tanmlyoruz;

334 | S a y f a
Eer projenizdeki klasrlere gre yetkilendirme yapmak isterseniz bunu
aadaki ekrandan yapmanz gerekir;

Not: Role tanmlamalarndaki tm ayarlarnz, web.config dosyasna


ilenecektir. Fakat isterseniz her bir klasr iin ayr bir web.config tanmlamas
yaplabilir.

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:

Role Grouplar sayesinde belirli rolelere sahip olan kullanclarn karlaaca


ekranlar belirtebilir ve eriimlerini sayfa/klasr baznda kstlayabiliriz. rnein
aadaki gibi bir roleGroup

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.

Ajax (Asynchronous JavaScript and XML) yani ezamansz javascript ve xml


olarak adlandrlmaktadr. Temeli javascripta dayal olan ve javascript
araclyla alan bir teknoloji olan ajax, gnmzde neredeyse her web
sayfasnda kullanlmaya balanmtr. Sosyal mecralarda yorum gnderdiimiz
zaman sayfa yenilenmedii gibi, belirli aralklarda is eyeni kaytlarn adm adm
karmza gelmesi ajax teknolojisine rnektir.

Asp.net ajax dnda tamamen bamsz olan Jquery ajax frameworkde


kullanlmaktadr.

Bununla beraber bir takm hazr kontrolleri barndran ajax sayesinde baz efekt
ve kullanc dostu uygulamalar ok kolay bir ekilde gerekletirebilirsiniz.

13.1. Accordion Menu


lk olarak sayfanzda ajax kontrollerini kullanabilmek istiyorsanz
sayfanzn ierisine ajax mens altndan ScriptManager eklemeniz
gerekmektedir.

Sayfanza yukardaki gibi scriptmanager kontroln ekledikten sonra


aadaki gibi acordion mennz ekleyebilirsiniz.

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.

Accordion mennn kts aadaki gibi olacaktr.

13.2. Tab Control


Web sayfanzda sekmeler halinde ierik blmleri oluturabilirsiniz bunun
iin tabcontrol ok uygun bir kontroldr.

338 | S a y f a
13.3. ASP.NET AJAX ile verileri ekmek
lk olarak veri ekeceimiz sayfann codebehind tarafnda bir
webmethod oluturuyoruz.

Kod tarafn hallettikten sonra artk webform tarafna dnp hemen


kodlarmzdan head ksmna gelip ajax kodlarmz yazyoruz.

HTML olarak eklediimiz dropdownlist kontrolmz (select kontrol) iin


inline olarak c# kodlarmz yazyoruz.

339 | S a y f a
Son alarak aadaki kodlar yazarak sayfamzda gerekli ilemlerin
gereklemesini salyoruz.

13.4. Loading ilemi


rnek olarak bir yklenme ilemi gerekletirelim. Butona basld zaman
veritabanndan verileri getiren uygulamamz, veri yklenme esnasnda
sayfann beklememesi adna sayfada bir loading resmi gsterilmesini
istiyorsak aadaki gibi bir rnk yapabiliriz.

340 | S a y f a
Sayfamza bir button ekledik ve codebehind tarafnda buton click
eventini yazyoruz;

C# kodlarmz yazktan sonra sayfamza eklemi olduumuz Update


panel ierisinde progress panel ve gridview kontrollerimizin kodlarn
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.

retim sektr tarafnda bugne kadar kullanlan el terminalleri ve gelitirici


destei konusunda genel olarak Windows mobile 6 srm kullanlmaktayd.
Mobile tarafndaki gelimenin gecikmesi nedeniyle ise Windows bir sre sonra
mobile tarafn durdurarak phone tarafnda gelitirme yapmaya balad.
Gelitirilen Windows form uygulamalarnn uyumluluu ve gelitiriciler iin ayn
kodlama yapsnn kullanlabiliyor olmas irketlerinde kullandklar ERP ve CRM
gibi sistemleri cep telefonlarndan etkili bir ekilde kullanabilmelerine olanak
tanyacaktr.

Wp8 ierisinde tahmin edebileceiniz gibi visual basic.net ve C#.net dilleri


kullanlmaktadr. Bu durum biz yazlm gelitiricileri ekstra bir yazlm dili renmek
gibi byk emek gerektiren bir durumdan kurtarmaktadr. Kullandnz
uygulama kodlarnn tamamn Windows phone tarafnda da kullanmanz
mmkn. Bildiiniz gibi asp.net tarafnda tasarm iin html kullanyorduk,
Windows form tarafnda ise sadece kontrollerimizi srkle brak ile ekleyerek
tasarmlarmz gerekletirebiliyorduk. Windows phone tarafnda ise xmlden
tretilmi olan XAML isimli imleme dili kullanlmaktadr. Srkle brak yntemi
ile eklediimiz her kontroln xaml tarafndaki karl design tarafnda kod
ierisine eklenmektedir. rnek bir wp8 sayfa tasarm ve xaml kodlar aada
yer almaktadr.
rnek olarak kontroller eklenerek tasarlanm olan bir giri sayfas;

342 | S a y f a
343 | S a y f a
Bu giri sayfasnn baz xaml kodlar;

Yukardaki rnekteki gibi yaz alanlar, button ve radiobutton gibi kontrollere


Windows form tarafndan da ainayz. Anca buradaki kontrollerin isimleri biraz
daha farkllk gsteriyor.Windows form tarafnda Label olarak adlandrdmz
kontroln WP8 tarafndaki karl TextBlock olduu gibi baz ekstra kontrollerde
Windows phone tarafna eklenmitir.

Windows phone tarafnda ekleyeceiniz giri sayfas asp.net tarafnda


default.aspx olduu gibi Windows phone iin ise MainPage.xaml eklinde
olmaldr.

Windows Phone tarafnda yaptnz tasarmlarda kullandnz kontrollerin


mutlaka sayfa ierisinde eklediiniz zaman default olarak gelen grid paneller
ierisinde yer almas gerekmektedir.

Gridlerin propertylerinde bulunan Grid.Row zellii o gridin kanc srada


duracan belirlemektedir.

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.

lk rneimiz iin global alanda IsolateStorege tipinde bir deiken


tanmlyoruz,

private IsolatedStorageSettings Kullanici;

Sayfa tasarmmz ierisinde bulunan txtKullaniciAdi ismine sahip olan bir


TextBox, btnEkle ismine sahip olan bir Button ve btnGetir ismine sahip bir
button kontrolmz mevcut, btnEkle butonunun click eventine geliyoruz
Isolate Storage kodlarmz ierisine yazyoruz.

private void btnEkle_Click(object sender, RoutedEventArgs e)


{

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.

btnGetir isimli butonumuzun click eventine gelip aadaki kodlar yazdk.

private void btnGetir_Click(object sender, RoutedEventArgs e)


{
Kullanici = IsolatedStorageSettings.ApplicationSettings;
txtDurum.Text = Kullanici["kullaniciAdi"].ToString();
}

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.

AdmUser adnda bir tablo oluturup, aadaki gibi kolon atamalarn


gerekletirelim;

346 | S a y f a
Visual Studio zerinde yeni bir Wcf Service Application oluturuyoruz;

Ardndan veritabanna Linq yntemi ile balanp tablomuzun yansmasn


projemize dahil ediyoruz;

Wcf Servisimizi interfaceinde tm kullanclar listeleyecek ve yeni kullancnn


girilmesini salayacak olan bir yapda kurguluyoruz:

347 | S a y f a
Interfacei implemente ettiimiz servicei aadaki gibi kodluyoruz:

Servis projemizin son hali aadaki gibidir;

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:

Uygulamamz altrdmzda, veritabanna kayt olan kullanclarn ekrana


geldiini greceksiniz,sayfay kaydrdnzda da yeni kullanc ekleyebilir ve
eklediiniz kullancy listede annda grebileceksiniz;

352 | S a y f a
Asp.NET MVC

15.1. MVC Nedir ?

MVC, Model-View-Controller isimlerinin ba harflerinin oluturduu bir


yazlm mimari deseni(architectural pattern)dir. Yazlm Mhendisliinde yeni bir
teknoloji olarak grnse de gemii 1979 ylna dayanr. Tygve Reeskaug
tarafndan ortaya kan bu mimari PHP,Java gibi yazlm dillerinde aktif olarak
kullanlmaktayd. 2009 ylnda Microsoft MVC Patterninin geliiminin farkna
vard ve kendi frameworkne dahil etti. MVC 1.0 ile oraya kan yap
gnmzde MVC 5.1 ile devam etmekte ve hzla gelimeye devam etmektedir.

15.2. MODEL VEW CONTROLER

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.

Model iinde verilerin doruluk, zorunluluk, okunabilirlik gibi


kontrolleri yaplarak, veri trleri arasnda balant kurabilme olanana
sahip yaplar tretebiliriz.
rnein;

Bir blog sitesi oluturdunuz ve kullancdan websitenize kayt


olmalarn istiyorsunuz. Byle bir durumda karlarna bir form kartmanz
gerekir. Bu durumda Model katmannda kendi oluturmu olduunuz
Uye snf(class) ierisinde Ad, Soyad, Ya, E - Posta, Cinsiyet gibi
bilgileri zorunlu olarak girmesini isteyebiliriz hatta ya alanna saysal
karakter girilmesini, e posta alanna bir e posta format girilmesini
zorunlu tutabiliriz.

Ayrca bu class zerinden dier snf(class)lara ve oradaki verilere


de eriebiliriz. Bir yenin hangi ehirden ye olduunu eklemek
istediimizde dier bir snf olan Sehire ulap oradaki ehir bilgisini yenin
bilgilerine kaydedebiliriz. (Bu konuyu ilerleyen blmlerde detayl olarak
ileyeceiz.)

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.

rnein; www.blogum.com sitesini bir tarayc zerinden


grntlemek isteyen kullanc alan sayfada en yeni 10 makalenin
balklarn grntleyecektir. Siteyi yneten blog sahibi ynetim
panelinden her makale eklediinde o makale en yeni olarak en ste
gelecektir. Ayn zamanda en eski olan makale de kaldrlacaktr.
Otomatik olarak en yeni 10 makalenin grntlenmesini salayan
kodlamay view zerinde gerekletirecektir.

Client Side (istemci tarafl) kodlama HTML, CSS, Javascript, Jquery


ile Server Side (sunucu tarafl) kodlama ise C# olarak yaplr.

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.

Controllerda ilemler Server Side (sunucu tarafl) olduundan


kodlama C# ile yaplr.
rnein;

Blog sitesi ierisinde makaleleri grntlemek istiyorsak Model


zerinden ald verileri Viewda listeletme ilemini burada yaparz.

355 | S a y f a
ekil 4

15.3. ASP.NET MVC ALIMA MANTII

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.

1- Kullanc grntlemek istedii sayfann Alan Ad(Domain)n taraycnn


adres ubuuna yazar ve sayfay grntleme istei gnderilir.
2- Gnderilen istek ilk olarak DNS(sim Sunucusu)e gider Alan Adna
karlk gelen IP(nternet Protokol)yi bulur.
3- IP zerinden gidecei Sunucuya istei gnderir.
4- stei alan sunucu, ierisinde bulunan projeye gider ve istek yaplan
sayfay hazrlar.
5- Sunucu hazrlad web sayfasnn son halini istek yapan
kullancya(istemci) gnderir.
6- Kullanc sayfay grntler.

Genel olarak bir web uygulamasnn yaam dngs bu ekildedir. MVC


projesinin de kendi ierisinde bir yaam dngs bulunmaktadr. Bu yaam
dngs ise aadaki gibidir.

356 | S a y f a
ekil 5

1- Kullanc grntlemek istedii sayfann Alan Ad(Domain)n taraycnn adres


ubuuna yazarak istek gnderir.
2- Bu istek internet zerinden projenin bulunduu sunucuya DNS zerinden gnderilir.
3- Gnderilen istek http protokol zerinden Controllera iletilir.
4- stek Controllerda ilenirken gerekli duyulan veriler iin Model gidilir.
5- Model istenilen verileri temin etmek iin Veritaban(Database)e gider.
6- Veriler alnp ilendikten sonra Controllera gnderilir.
7- Controllerda gerekli ilemler yapldktan sonra veriler Viewa aktarlr.
8- View ierisindeki HTML ve C# kodlar gelen veriler ile altrlr ve Http protokol
zerinden kullancya gnderilir.
9- Kullanc sayfay grntler.

15.4. ASP.NET MVC AVANTAJLARI DEZAVANTAJLARI


Yazlm dnyasnda Web Forms mu ? MVC mi ? sorular sklkla
sorulmaktadr. Bu seimi yaparken iki teknolojiyi de iyi tanmak gerektiini
vurgulamak gerekir. Her iki teknolojinin de kendine zel avantajlar ve
dezvantajlar vardr. Bu ayrmlar iyi yaparak projeyi hangi teknoloji ile srdrmek
gerektiine karar verilmesi en dorusudur.

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

15.4.1.3. Olay Gdml Programlama (Event Driven Programming)


Asp.Net Web Forms teknolojisinin en nemli kolaylklarndan
biri de olay gdml programlama yapsdr. Gelitirici bir buttonu
ilevsel hale getirmek ve ierisinde bir kod blou altrmak
istediinde tklama olay(click event)nn ierisine gitmesi yeterlidir.
Ya da Bir listboxda seili elemann bilgisini almak ve o an bir ilem
yapmak istiyor ise seili eleman deime
olay(SelectedIndexChanged)na gidebilir.

ekil 7

ekil 8

15.4.2. Neden Asp.Net MVC ?


15.4.2.1. Performans
MVC teknolojisinde durum ynetimi otomatik olarak yaplmaz.
ViewState kullanm olmad iin sayfa servera giderken ve gelirken
zerinde herhangi bir kontroln bilgisini ve dier yk olacak verileri
barndrmaz. Buna bal olarak da daha performansl alr.
15.4.2.2. Yeniden Kullanlabilirlik (Reuseability)
Web Formsda olay gdml programlama ve zengin
kullanc kontrolleri faydal grnse de MVC yapsna baktmzda
yeniden kullanlabilirlik asndan pek de faydal deildir. Yazlan
kodlarn yalnzca o sayfaya veya o kontrole zg olmas, her kontrol
iin ve her sayfa iin ayr ayr kod yazmamz gerektirir.
MVC ierisinde byle bir yap bulunmadndan dolay
yazdmz kodlar birden fazla yerde kullanarak bir standart

359 | S a y f a
oluturabilir, ileri tarihte projeyi gelitireceimiz tm sreleri iin
nemli bir zaman kazanabiliriz.

15.4.2.3. Test Driven Development


Asp.Net MVC de sorumluluklarn ayr olmas prensibi itibari ile
her katman ayr bir i gerekletirir. Bylece her iin kendine zg
test senaryolar ve sreleri olabilir. Dolays ile proje Test Driven
Development a son derece uygun yapdadr.

15.4.2.4. Yazlm Gelitirme Sresi


Bir projeyi birden fazla gelitirici stlenebilir. MVC yapsnda
her katmann birbirinden farkl sorumluluklar olduundan ayn
srelerde farkl katmanlarda farkl gelitiriciler alabilir. Bu nedenle
yazlm gelitirme sreci kat ve kat hzl olacaktr.

15.4.2.5. Kontrollerin Ynetimi iin istemci Tarafl Gelitirme (Client-Side


Development)
stemci tarafl kontroller hazr olarak gelmediinden tm
HTML, Javascript tabanl ynetilir. Bu yap itibar ile sayfa sunucuya
daha hzl ve performansl olarak tanacaktr.

15.5. ASP.NET MVC PROJES OLUTURMA


Visual Studio ierisinde 2 seenek zerinden MVC projesi alabilir.
File mensndeki New sekmesinden proje tr seilir. Bu proje
ekranndan alt proje trleri arasndan seim yaplr ve aama aama MVC
projemizin ayarlarn yaparak projeyi olutururuz. Bu ayarlar aadaki ekil
9daki gibidir.

360 | S a y f a
ekil 9

15.5.1. ablon Trleri


Oluturacak olduumuz projenin hangi yazlm dili ablonunda
olacan setiimiz alandr. Recent blmnde son kullanlan ablonlar,
Installed blmnde ykl ablonlar, Online blmnde internetten
ablon indirmemizi salayan seenekler bulunmaktadr.

15.5.2. Framework Versiyonu


Oluturacamz projenin hangi Framework zerinde alacan
belirlediimiz alandr. Sistem zerinde ykl Frameworkler arasndan
seim yapabiliriz.

15.5.3. Sralama ekli


Setiimiz ablon trne gre gelen proje trlerinin hangi sraya
gre listeleneceini belirlediimiz alandr. Default, Name Ascending,

361 | S a y f a
Name Descending seenekleri zerinden birini seerek proje trlerini
listeleyebiliriz.

15.5.4. Grntleme ekli


Listelenen proje trlerinin simge boyutlarn ayarlayabileceimiz
alandr.

15.5.5. Arama Alan

Listelenen birok proje tr olduundan bir arama ubuuna


ihtiya duyulmutur. Liste zerinden aramaktansa arama ubuuna
amak istediimiz proje trnn birka harfini yazarak ulaabilmemizi
salar.

15.5.6. Proje Bilgileri

Projenin adn(Name), kaydedilecei klasr(Location), projenin


yer alaca solution(Solution Name) bilgilerinin belirtilecei alanlar
ayarladmz blmdr.

15.5.7. Proje Tr

Proje trlerinin listelendii alandr.

15.5.8. Dier Ayarlar

Belirtilen lokasyonda bir klasr oluturur ve proje onun ierisinde yer


alr ya da Add to source control seeneini seer isek projeyi online
olarak bir Team Foundation Serverda oluturabilir.

15.5.9. Proje Trnn Aklamas


Setiimiz proje tr ile alakal aklamay gsterdii alandr.

Proje oluturmann ikinci seenei Visual Studio balang ekranndaki New


Project linkini tklayp admlar izlemektir.

Bu ekranlar ve admlar tandktan sonra MVC projemizi amaya ve


ayarlarmz yapmaya balayabiliriz. ekil 9daki ekrana ulatktan sonra Proje

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.

Tm bu ayarlar yaptktan sonra OK butonuna basarak ekil 10da


grdmz ekran karmza gelecektir.

ekil 10

ekil 10da olduu gibi MVC seeneini seip OK butona basarak


projeyi oluturuyoruz.

15.6. MODEL, VIEW, CONROLLER OLUTURMA


2. Blmde Model, View ve Controller n neler olduunu ve ne amala
kullanldklar hakknda detayl bilgilere yer vermitik. Bu blmde bu yapnn
MVC projesinde nasl oluturulacaklarna yer vereceiz.

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

Bu adm izledikten sonra karmza kan ekranda eitli


scaffold(iskele) ablonlar grlecektir. Biz bunlarn ilk 3 tanesini ele
alacaz.

364 | S a y f a
ekil 12

15.6.1.1. MVC 5 Controller Empty :


Controller snfnn kaltmn alan bir Controller class oluturur. nemli
olan kstas udur ki Controller ismini verirken sonu mutlaka Controller ile
bitmelidir. rnek; HomeController. Ve iinde yalnzca Index adnda bir
ActionResult metodu oluturur.

ekil 13

365 | S a y f a
ekil 14

15.6.1.2. MVC 5 Controller with read/write actions

Bu seenekte oluturduu Controller eitli hazr yaplar ile gelecektir. Bunlar


Index, Details, Create, Edit, Delete gibi Crud ilemlerini yapabileceimiz
metotlardr.

366 | S a y f a
ekil 15

15.6.1.3. MVC 5 Controller with views, using Entity Framework

Database ile balantl olan bir modelin tm Crud ilemlerini (listele,


detay, ekle, gncelle, sil) kodlanm hali ile getiren yapdr.

rnein; mteri bilgilerini tuttuum bir Employee modelimiz olsun. Bu


modelin tm Crud ilemlerini kodlanm halini tasarm ile birlikte getirir. Bize
sadece bu yapy kullanmak kalm olur.

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

Setiiniz scaffold ile birlikte izleyeceimiz tm admlar bu ekildedir.

15.6.2. MODEL OLUTURMA

Proje ierisinde yeni bir model oluturmak iin Model klasrne sa


tkladktan sonra Class seenei seilir.

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

Model ierisinde ihtiyacmz olan property(zellik)leri ekleyebiliriz.

ekil 23

15.6.3. VIEW OLUTURMA


Projeye yeni bir View eklemek istersek, ilgili Controller ierisinde var
olan bir ActionResult metodu zerinden bu ilemi gerekletiririz.

372 | S a y f a
ekil 24

Projemizde nceden MVC 5 Controller Empty scaffold u ile


oluturduumuz HomeController ierisinde default olarak bir Index Action
Metot oluturulur. Action(olay) metodu View ile alakal tm olaylar
Viewa gndermek ile sorumlu bir metot tipidir.

lgili View oluturmak iin metot iindeki index yazan yerde sa


tklyoruz ve Add View seeneini seerek devam ediyoruz.

ekil 25

Bu admdan sonra karmza Add View ekran alacaktr. Bu


ekrandaki View Name, Action Metodu adnda gelecektir.
ablon(Template) olarak ise ekleme (Create), listeme(List),
gncelleme(Edit), detay(Details), silme(Delete) gibi seenekler karmza
kacaktr.
Biz aadaki gibi Empty(without model) seenei ile View
oluturacaz.

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. RAZOR VIEW ENGINE


Asp.Net MVC 3 ile hayatmza giren Razor View Engine, View Engineler
arasnda en kullanl olandr. HTML ile C# kodlarn i ie yazarken birbirinden
rahata ayrt edebileceimiz, karmak yapda olmayan View Enginedir.

rnein; tanmladmz bir deikeni HTML taglari ile kaln, italik


yazdrabiliriz. Veya bir karar yapsnda kontrol ederek kod bloglarnn ierisine
HTML kodlar yazabiliriz.

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

Oluturmu olduumuz RazorHTMLController mzn Action Metotu olan


Index iin bir View oluturduk. Oluturduumuz bu View ierisinde ekil 28deki
kodlamay yaptk. Index Viewmz taraycda altrdmzda aadaki gibi bir
kt alacaz.

ekil 29

376 | S a y f a
15.7.1.2. RAZOR LE KARAR YAPILARI

ekil 30 / Razor ile karar yaps

ekil 31 / Ekran kts

377 | S a y f a
15.7.1.3. RAZOR LE DNGLER

ekil 32 / Razor ile Dng

378 | S a y f a
ekil 33 / Ekran kts

15.8. CONTROLLERDAN VIEWA VER TRANSFER


Controller ierisinden Viewlara veri tamak istersek bunu gerekletireceimiz
3 yap karmza kar.
- ViewBag
- ViewData
- TempData

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

ekil 37 / HTML ile Kodlan

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.

ekil 39 / Controller Transfer

ekil 40 / Index Viewden arlmas

Hakkmzda Action Metot undan transfer ettiimiz verileri Index


Viewden aryoruz. Fakat Hakkimizda Action Metot dan, Index
Action Metot una RedirectToAction(Index) ifadesi ile bir ynlendirme
gerekletirmekteyiz. Hakkmzda View a ulamak istediimizde direk
olarak kodlar okuyup bizi Index View una ynlendirecektir. Ynlendirdii

382 | S a y f a
esnada ise sadece TempData ierisinde bulunan veriyi Index View da
grntleyecektir.

ekil 41 / Ekran kts

15.9. LAYOUT PAGE ( ABLON )


Genel olarak Asp.Net Web Forms tarafnda sklkla kullandmz
MasterPage yaps bulunmaktayd. Bu yap bizleri her sayfa iin sfrdan ayn
tasarm yapma derdinden kurtarmaktadr. Ayn yap MVC mimarisinde bizlere
Layout Page yaps olarak sunulmaktadr.

rnek olarak bir Blog sitesini ele alalm. Sayfalarmzn Header(Balk)


blmnde genellikle Navigation(Anasayfa, Hakkmzda, letiim), Logo gibi
alanlar ve Footer(Alt Balk) blmnde genellikle letiim Bilgileri, Site Linkleri,
Sosyal Medya konlar gibi alanlar bulunur. Bu tasarmlar her sayfada ayn
ekilde karmza kmaktadr.
Eer Layout Page yapsn kullanmyor isek bloumuzun 100 adet sayfas
olacak ise 100 sayfa iin de sfrdan bu tasarm yapmak zorunda kalacaktk. Bu
i yk ise bizlere olduka zaman kaybettirecek ve tasarm iin herhangi bir
deiiklik yapmak iin ayr bir zahmet ve zaman yk oluturacaktr. nk bir
deiiklik yapmak istediimizde tm tasarmlar da deitirmemiz gerekecektir.
Layout Page yaps ortak olarak kullanlacak alanlar bir kereye mahsus
tasarlayarak Layout Page zerinden oluturduumuz 100 sayfa iin
farkllaabilen deiken alanlarda tasarm ve kodlama yaptmzda tm
sayfalar tek bir atya ait olmaktadr. Bu at zerinde deiiklik yaptmzda bu
100 sayfay etkileyeceinden tekrar tekrar 100 sayfaya da deiiklik yapma
yknden kurtulmu olunacaktr.

383 | S a y f a
ekil 42

ekil 42de grlen nemli nokta RenderBody()adnda ki metottur. Bu


metot ablonda deiecek olan alan belirler. RenderBody() metodunu
eklediimiz yer deiecek alan demektir.

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.

rnein sitenin bal ve sitenin ierik alan farkllk gsterecek alanlar


olacaktr. Bu durumda iki adet deiecek alan bulundurmamz gerekecei iin
Layout Section yapsn kullanacaz.

385 | S a y f a
ekil 44 / Ekran kts 1

ekil 45 / Ekran kts 2

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.

ekil 46 / Layout Sectionlarn belirlendii HTML taraf

ekil 47 / Layout Section larn arld View grnts

387 | S a y f a
Yukarda grld gibi belirlemi olduumuz Layout Section lar
@section SayfaAdi{ } eklinde arabiliyoruz.

15.11.PARTIAL VIEW

Asp.Net MVC projelerimizde iimizi olduka kolaylatran bir yap da


Partial View yapsdr. Bu yap ile para olarak hazrlam olduumuz tasarm
istediimiz tm Viewlardan arp kullanabilmemizi salar. Genellikle Asp.Net
Web Forms tarafnda Web User Control teknolojisine denk gsterilir. Fakat Partial
View yaps daha performansl ilem grr.

rnek olarak ekil 48de bir Partial View oluturuyoruz.

ekil 48

Oluturmu olduumuz KullaniciGirisi_PartialPageini Kullanici/Index


Viewdan aryoruz.

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.

Route yaplandrmas projede App_Start klasrnn ierisindeki


RouteConfig class nda bulunur.

ekil 51

389 | S a y f a
ekil 52

RouteConfig yaplandrmasnda RegisterRoutes metodu ile hangi


Controllern hangi View unun sunulaca belirtilir. Bunu salayan mekanizma
default(varsaylan) olarak Controller = Home, action = Index belirlenmitir.
Ayrca opsiyonel olarak parametre alabilmesi iin id parametresi
UrlParameter.Optional olarak ayarlanmtr.

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.

15.13.1. Textbox Helper

ekil 54

391 | S a y f a
ekil 55

ekil 56

15.13.2. Label Helper

ekil 57

392 | S a y f a
ekil 58

15.13.3. Link Helper

ekil 59

393 | S a y f a
ekil 60

15.13.4. CheckBox Helper

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

15.13.7. RadioButton Helper

396 | S a y f a
ekil 67

ekil 68

397 | S a y f a

You might also like