Professional Documents
Culture Documents
ve
Veritaban Programlama
Yaar Gzdeli
YAZILIMCILAR N
Ankara, 2009
Yaar Gzdeli
Teekkr
Bu kitabn ortaya kmasnda en byk fedakrlk phesiz ki aylarca, kendilerine ait
olan zamanda bilgisayarla ba baa kalmama tahamml edebilen eim Lale'ye, kzm Neva'ya ve olum Yusuf Hakan'a aittir. Kendilerine teekkr ederim.
zellikle yeni nesil Microsoft teknolojileri konusunda beni yaama balayan zcan Ko'a; SQL Server'in geliim srecinde, kitap fikrimi srekli taze tutan ve beni yreklendiren, Sefer Algan ve Tolga Yaram olmak zere tm arkadalarma teekkrlerimi sunarm. 9.Blmde yer alan Uzaysal Veri Tipleri'ne olan katklarndan dolay Mehmet Karaman'a, 10.Blmde yer alan ADO.NET 2.0 yenilikleri bahsine katklarndan dolay
Burak Selim enyurt'a teekkr ederim. Kitap ieriini sizlerden nce okuyarak, gerek
fikirleri gerekse deerlendirmeleri ile sizlere daha az hatal bir kitap sunmam konusunda
bana yardmc olan deerli yazlm gelitirici arkadalarm Volkan Verim, Ouz Kaan
Yamur ve Salih Bozkurt'a teker teker teekkrlerimi sunarm.
Kitap ieriinin ve mfredatnn genel kabul grm bir mfredat haline gelmesinde,
INETA- MEA'nn Verivizyon'a verdii destek phesiz yabana atlamaz. Bu kapsamda
INETA'ya teekkrlerimi sunarm. Yine kitap mfredatna alnm konularn anlatmlarnn olgunlamas Verivizyon aktiviteleri ile salanmtr. Verivizyon tarafndan dzenlenen seminer, eitim ve benzeri etkinliklere emei geen ve katlan herkese teekkrlerimi sunarm. Kitabn dzenlenmesi ve okunabilir hale gelmesinde emei geen Sekin
Yaynclk alanlarna ve desteklerinden dolay btn mesai arkadalarma teekkr
ederim.
Kitabn bundan nceki basklar hakknda, tevecchlerini veya dzeltmelerini ileterek
daha iyiyi arama servenimde bana destek veren okurlarma teekkr ederim. Gnlk
hayatta karlatklar sorunlar ve zmlerini dolaysyla da tecrbelerini benim araclmla siz okurlara ulatran yazlmc dostlarma, son olarak bu kitab okumaya deer grp elinize aldnz iin ve belki bana grlerinizi ileterek daha iyiyi bulmama yardmc
olacanz iin size teekkrlerimi sunarm.
INETA Hakknda
Ksa ad INETA olan International .NET Association, Microsoft .NET temelli yazlm
gelitiriciler iin paylam alan salayan bir oluum. INETA'nn hedefi, dnyann birok
yerinde oluturulmu BT topluluklarnn kendi yelerini Microsoft. NET teknolojileri
konusunda eitebilmeleri ve bu teknolojilerin tantmn yapabilmeleri iin gerekli kaynak ve destekleri salamak. BT Profesyoneli, yazlm gelitirici veya mimar yahut ta proje
yneticilerinden oluan kullanc topluluklar INETA'nn destek verdii topluluk kapsamnda ele alnmakta.
Bir kullanc topluluunun INETA erevesinde yer alabilmesi iin, herhangi bir .NET
alan veya .Net'in tm alanlar ile ilgileniyor olmas veya birok baka yazlm gelitirme
teknolojilerinin yan sra .NET ile de ilgileniyor olmas gerekmekte.
Kr amac gtmeyen ve bamsz bir kurulu olan INETA, Microsoft ve dier sponsorlarnn desteinde, dnyann birok yerindeki ok sayda kullanc topluluklarnn yneticileri araclyla yrtlmektedir.
INETA'YA Katlmak
INETA yelii, btn kullanc topluluklar iin u anda, yer, ilgi oda ve iliki ayrm
yapmakszn cretsiz yaplmakta. .NET ile ilgili bir grup iin en etkin deer kazanm aktif INETA katlm ile mmkndr.
Bir yazlm gelitirici olarak, INETA erevesinde rol alabilmek iin size en yakn
INETA topluluunu www.ineta.org adresinden bulabileceiniz gibi, uygun bir topluluk
bulamamanz halinde siz de etrafnzda .NET teknolojilerini kullanan yazlm gelitiricileri bir araya getirerek INETA olanaklarndan faydalanp, INETA ierisinde aktif rol stlenebilirsiniz.
INETA, yelie kabul ettii bir topluluun muntazaman geliimini srdrebilmesi iin,
yelerine ynelik dzenli aktivitelere tevik etmektedir. Ayrca ye kullanc topluluklarnn seminer verebilmeleri iin ortam ve konumac salanmas, seminer annda merubat ve pizza sunulmas gibi konularda kullanc gruplarna destek olmakta, gerektiinde
kitap tr bilgilendirici materyaller ile de onlarn kresel eilimlerle btnlemi kalmas
hususunda destek salamaktadr.
INETA hakknda daha fazla bilgi iin, www.ineta.org adresine gz atabilirsiniz.
INETA'nn nsz
Gnmzn kurumsal bilgi teknolojileri altyaplarn oluturan bir ok veritaban ynetim sistemi ierisinde SQL Server en yaygn kullanlan olarak dikkat ekiyor. Her geen
gn daha fazla uygulamann, SQL Server uyumlu olarak pazarda kendisine salam bir yer
edindiini gryoruz.
Bu geliim sreci, uygulama gelitiricilerden bilgi teknolojileri yneticilerine kadar geni
bir kitlenin MS SQL Server hakknda teknik bilgilere daha kolay ve rneklerle desteklenmi olarak eriebilecei bir kaynak ihtiyacn douruyor. Yaar Gzdeli, SQL Server
2005 konusundaki kitab ile balad yolculuuna SQL Server 2008 ile devam ederek bu
ihtiyac karlyor.
SQL Server rnn gerekletiren yazlmclar bir alan veya teknoloji zerinde son derece detayl bir uzmanla sahiptirler. Yazdklar rnn zelliklerini bilmenin tesinde
yaadklar iin ou zaman bu detaylar kullanclar veya yazlmclara basit bir adan
aktarmakta zorlanrlar. te bu noktada Yaar Gzdeli derin ve uzun aratrmalar gerektiren bilgileri zmseyip, onlar sistematik bir ekilde okuyucusunun en ok yarar salayabilecei ekilde sunuyor.
SQL Server 2008 dendiinde benim aklma gelen ilk ey gvenlik; Dier veritaban ynetim sistemleri ile karlatrldnda uzun senelerdir sfr veya sfra yakn gvenlik a olmasn, kurumsal gvenlik politikalarndan taviz vermeden SQL Server iinde uygulanabilir olarak kmasna balyorum. Gvenlik tam anlamyla salanmasnn tesinde
kolay ekilde de ynetilebilir olmaldr. lk kuruluta gvenli olma, Veri kaynaklar eriim
kontrolleri, Veri ifreleme, aktiviteleri izleme ve kaydetme zellikleri ve bunlarn ynetimi SQL Server 2008i gvenlik konusunda rahata rakiplerinin stne yerletiriyor.
Yaar Gzdeli, SQL 2008 iin yazd bu kitapta veritabanna giriten balayarak sorgulamalar, Optimizasyon, T-SQL ve CLR, XML destei, ortak zamanl alma, Corafi
Tipler, harici sunucular ve Service Brokerlar ile almalardan da bahseden, rneklerle
zenginletirilmi, takibi kolay bir kaynak hazrlam. Kitap, profesyonel almalarmzda
SQL Server 2008' den nasl faydalanabileceimizi akc ve kolay anlalabilir bir slup ile
anlatyor.
Bir nceki SQL Server 2005 kitab 3 bask yapan ve 3000 adet satan, alannda byk
kabul gren kitab kadar baarl olacana emin olduumuz SQL Server 2008 kitabn
bize kazandran Yaar Gzdeli'ye, ktphanemizde en nlerinde yer alacak bu gncel
kayna hazrlad iin teekkrlerimizi sunuyoruz.
Gkin Bakr
Ortaklar ve stemci Grup Yneticisi, Microsoft MEA
nsz
nsanolu var olduundan bugne hep veriye gereksinim duydu. Ama belki bu gereksinimi hi bugnk kadar iddetli deildi. Hi phe yok ki bu gereksinim, yarn bugnknden daha iddetli olacak. Bu gereksinime paralel, verilerin birinci dereceden muhatab olan Veritaban Ynetim Sistemleri de srekli olarak gelimekte. SQL'in, standart
olarak ortaya atldndan bu yana yaklak 20 yldr poplerliini kaybetmemi bir dil
olmas onun ne denli gl ve gereksinim duyulan bir ey olduunu ortaya koyar. Belki
bunun en byk sebeplerinden biri, "veri" kaydnn ve sorgulamasnn hayatn temel bir
paras olmasndandr.
Veri ileme, her geen gn yeni gereksinimlerle karmza kmakta. SQL standard da
bu gelimelere paralel olarak 1999, 2003, 2006 yaynlaryla desteklendi. SQL Server
2008, bir VTYS olarak bu standartlardan payna deni fazlasyla alm bir veri ynetim
arac. 2000'den 2005'e gemeye nazaran, 2005- 2008 geiinin daha kolay bir gei olacandan emin olabilirsiniz.
Bu yeni srmde, SQL Server programlamann olmazsa olmaz olan Transact SQL ile ilgili birka iyiletirme yer almakta. Bir veritaban programcs iseniz, bu yenilikleri hzl bir
ekilde renmeniz sizin anzdan hi de zor olmayacaktr. Hatta kullanmaktan keyif
alacanz syleyebilirim. ayet 2008 srmne, SQL Server 2000'den geiyorsanz, TSQL 'in sizi zorlad hallerde CLR destei sizin iin bir kurtulu olacaktr, mutlaka deneyin
ayet bir Corafi Bilgi Sistemi projesi gelitiriyorsanz, SQL Server 2008 ile birlikte gelen
Uzaysal(Spatial) tipler ilerinizi olduka kolaylatracaktr. Yine Site haritas gibi verilerinizi tutmak iin hierarchyid tipini kullanmaktan keyif alabilirsiniz.
SQL Server 2005 XML Web Servis desteine yatrm yapan yazlmclar, sizlere zc bir
haberim var; 'Bir sonraki SQL Server srmnde aradnz bu zellii bulamayabilirisiniz!' Bu nedenle, ilgili niteyi kitaptan karttm.
Servis temelli alyorsanz, veya ok fazla veri ile boumanz gerektiinden yk datma ve lekleme yapma ihtiyacnz varsa, Service Brokers teknolojisi servislerinizin mesajlamasn veritabannn gc ile buluturacaktr. Bu konuda da bilgi edinmek sizin iin
elzem olabilir.
Btn bu yeni zellikleri bnyesinde barndran bir tek rn olarak karmza kan SQL
Server 2008, btn verilerinizi tek merkezden idare edebileceiniz gerek manada bir
'Veri' taban Ynetim Sistemi
Kitap yayna hazrlanrken etrafta halen SQL Server 2000 kullanan yazlmclarn da olduunu grdk. Bu nedenle her ne kadar SQL Server 2008 srm iin hazrlanm bir
kitap olsa da 2000 ve 2005 srmlerinden gemek isteyenleri de cesaretlendirmek iin
yer yer apraz srm kyaslamalarna yer verdim.
Veritaban ile tanmak iin bu kitab ald iseniz, ilk aamada kitap CD'lerinde yer alan
Veritaban Programlama 1-2 kitapklarn okuyarak balamanzda yarar var. nk
kitap bir seferde bitiremeyeceiniz kadar byk olduundan byk resmi karabilirsiniz!.
nsz
Kitap kapsam, balangtan orta seviyeye olduu iin bu kitap, "Yazlmclar iin SQL
Server 2005 ve Veritaban Programlama" adl bir nceki kitabn SQL Server 2008 yenilikleri erevesinde yeniden dzenlenmi halidir. Kitab bitirdiinizde, orta byklkte
bir veritaban ynetim sistemi iin yazlm ve ynetim ilemlerinin hemen hepsinin stesinden gelecek birikime sahip olacanz syleyebilirim. Ancak ekstrem projeler iin kitabn kapsam lekleme asndan yetersiz gelebilir.
Son olarak, konulara gemeden nce, ayet SQL Server 2008'i bu kitapla renmek
amacnda iseniz, unu bir prensip haline getirmi olmanzda byk yarar var; Bir dili veya
programlanabilir ortam tanmak iin bir satr kod altrp sonucunu grmek, bin satr
kodu okuyup gemekten iyidir. Unutmayn ki bir yazlmc iin tecrbe, ka saat kod
yazdndan te, kod yazarken ne kadar problemle karlat ile ilgilidir. Kod altrmadan, bakalarnn yazd hazr kodlar okuyarak(almayan bir kod bile olabilir, sadece
okuyarak bunu nerden bilebilirsiniz ki!) asla problemlerle karlaamazsnz.
Baar sizinle olsun
Yaar Gzdeli
ygozudeli@verivizyon.com
Mays 2009-ANKARA
Genel indekiler
1. Blm: VERTABANI KAVRAMINA GR ..................................................................... 39
1. NTE: likisel Veritabannn Temelleri .............................................................................. 39
2. NTE : SQL Server 2008'in Temelleri ................................................................................ 53
3. NTE: T-SQL'e Genel Bak ............................................................................................... 69
2. Blm: VERTABANI TASARIMI ................................................................................... 89
4. NTE: Veritaban Tasarmna Genel Bak ......................................................................... 89
5. NTE: Veritaban Nesnesinin Temelleri ........................................................................... 107
6. NTE: Tablolar Tasarlamak ............................................................................................ 127
7. NTE: Veri Btnln Salamak ................................................................................. 153
3. Blm: VERLER SORGULAMAK ................................................................................ 175
8. NTE: Basit Sorgular ...................................................................................................... 175
9. NTE: Tablolar Birlikte Sorgulamak ve zetlemek .......................................................... 201
10. NTE: leri Veri Ynetim Teknikleri ................................................................................ 225
4. Blm: VER ERMN YLETRMEK ...................................................................... 251
11. NTE: Viewlerle almak ............................................................................................. 251
12. NTE: Indeks Teorisi ..................................................................................................... 271
13. NTE: Indeks Ynetimi .................................................................................................. 289
5. Blm: T-SQL LE PROGRAMATK ELER KODLAMAK ............................................ 317
14. NTE: T-SQL ile Programlar Gelitirmek ........................................................................ 317
15. NTE: Stored Procedure'ler ........................................................................................... 345
16. NTE: leri T-SQL Programlama..................................................................................... 369
17. NTE: Kullanc Tanml Fonksiyonlar ............................................................................ 387
6. Blm: XML LE ALIMAK ........................................................................................ 399
18. NTE: Tip Olarak XML ................................................................................................... 399
19. NTE: XML-likisel Dnmler ................................................................................... 427
7. Blm: ORTAK ZAMANLILIK VE TRANSACTION ........................................................ 441
20. NTE: Transaction'larla almak ve Ortak Zamanllk ................................................... 441
21. NTE: Kilitlenmeleri Ynetmek ...................................................................................... 461
22. NTE: Triggerlar ............................................................................................................ 469
8. Blm: SQL SERVER NDE CLR ................................................................................ 493
23. NTE: CLR Genel........................................................................................................... 493
24. NTE: Basit Rutinler...................................................................................................... 511
25. NTE: leri Rutinler ........................................................................................................ 533
12
indekiler
Teekkr .............................................................................................................................. 5
INETA Hakknda .................................................................................................................. 6
INETA'YA Katlmak ................................................................................................................... 6
INETA'nn nsz ................................................................................................................ 7
nsz ................................................................................................................................... 8
Genel indekiler................................................................................................................ 11
Giri.................................................................................................................................... 33
Veritaban Programlama Hakknda ......................................................................................... 33
Kitabn erdii rnekleri Test Edebilmek in ......................................................................... 33
Birikim Gereksinimleri ............................................................................................................ 34
Kimlere Hitabediyor ................................................................................................................ 34
Farkl Balang nerileri ........................................................................................................ 34
Kitap Neler eriyor ................................................................................................................ 36
Veritaban Kavramna Giri ...................................................................................................... 36
Veritaban Tasarm.................................................................................................................. 36
Veri Sorgulama ........................................................................................................................ 36
Veri Eriimini yiletirmek ........................................................................................................ 36
T-SQL ile Programatik eler Kodlamak .................................................................................. 36
XML ile almak ..................................................................................................................... 36
Ortak Zamanllk ve Transaction............................................................................................... 37
SQL Server 2008 iinde CLR .................................................................................................... 37
Veritaban Yeteneklerini Gelitirmek ........................................................................................ 37
stemci Taraftan Veritaban...................................................................................................... 37
EK A - Veritaban Programclarna pular ............................................................................... 37
EK B - C# ve OOP Klavuzu ...................................................................................................... 37
EK C - Dkkan Veritaban emas ............................................................................................ 37
EK D - Blm Sonu Soru Cevaplar........................................................................................... 38
EK E - CD Kullanm Klavuzu ..................................................................................................... 38
1. Blm
VERTABANI KAVRAMINA GR
1. NTE: likisel Veritabannn Temelleri ...........................................................39
TEMEL VERTABANI KAVRAMLARI .................................................................................. 39
likisel Veritaban Kavram .................................................................................................... 40
likisel Veritaban Yaklamna Basit Bir rnek ....................................................................... 41
14
indekiler
15
Fonksiyonlar ........................................................................................................................... 77
Aggregate (Grupsal) Fonksiyonlar ........................................................................................... 77
Rowset Fonksiyonlar ............................................................................................................... 79
Skaler Fonksiyonlar ................................................................................................................. 79
Deterministik Kavram ................................................................................................................81
2. Blm
VERTABANI TASARIMI
4. NTE: Veritaban Tasarmna Genel Bak ......................................................89
Kavram Model ........................................................................................................................ 90
ORM ile Veritaban Modelleme ................................................................................................ 91
ER ile Modelleme..................................................................................................................... 92
ER ile Modelleme Aamalar ......................................................................................................93
16
indekiler
17
18
3. Blm
VERLER SORGULAMAK
8. NTE: Basit Sorgular .....................................................................................175
Kaytlar Semek: SELECT .................................................................................................... 175
En Basit SELECT .................................................................................................................... 176
Sadece Belli Stunlar Semek .............................................................................................. 177
Tekrarlamalar Tekile ndirgemek: DISTINCT .......................................................................... 177
indekiler
19
20
4. Blm
indekiler
21
22
5. Blm
indekiler
23
24
6. Blm
XML LE ALIMAK
18. NTE: Tip Olarak XML .................................................................................399
XML Destei .................................................................................................................... 399
Hibrit Veritaban Gereksinimi ...................................................................................................400
indekiler
25
7. Blm
26
indekiler
8. Blm
27
SqlCommand ...........................................................................................................................517
SqlParameter ...........................................................................................................................517
SqlPipe ....................................................................................................................................518
SqlDataReader .........................................................................................................................520
SqlDataRecord .........................................................................................................................520
SqlTransaction .........................................................................................................................521
System.Transaction .................................................................................................................522
SqlTriggerContext ....................................................................................................................522
28
9. Blm
indekiler
29
30
indekiler
EK A
31
EK B
C# VE OOP KILAVUZU
C# LE PROGRAMLAMAYA GR KILAVUZU ................................................................ 669
C# ile Merhaba Dnya......................................................................................................... 669
Snflar Yazmak ..................................................................................................................... 670
Deikenler Deerler ve Veri Tipleri ....................................................................................... 672
Tr Dnmleri ......................................................................................................................674
Deer ve Referans Tipler Aras Dnm: Boxing ve Unboxing ................................................ 675
32
EK E
CD KULLANIM KILAVUZU
CD Kullanm Klavuzu....................................................................................................... 707
Aralar ................................................................................................................................. 707
SQL Server Express Edition ................................................................................................... 707
SQL Server 2008 Bileenleri .................................................................................................. 707
Giri
Kitap kapsamnda veri ileme ile ilgili iki temel standarttan bahsedilmekte; SQL ve
XML. SQL veritaban sorgulamak iin kullanlan bir dil olup, ANSI tarafndan kabul
edilmi bir standarttr. Standardn tam metnini farkl yllardaki gzden geirilmi halleriyle birlikte, ANSI'den satn alabilirsiniz. Bunun iin http://webstore.ansi.org adresinde
SQL kelimesini aratn ve kan ekrandan dilediiniz standart iin karl olan creti
dedikten sonra PDF dosyasna sahip olabilirsiniz. Standartlarn bazlarna cretsiz de
ulaabilirsiniz. Genel olarak SQL, veritaban ynetim sistemine verilerle ilgili ifadeleri
bildirmek ve sonularn almak iin kullanlabilen bir standart tanmdr.
XML, yazlm ve donanmdan bamsz veri tama ve saklama standard olup eXtensible
Markup Language (Geniletilebilir aretleme Dili) kelimelerinden elde edilmi bir ksaltmadr. XML ile iaretlenmi bir bilgi, bir cep telefonunda bir PC'de gsterildii kadar kolay gsterilebilir. XML ayrca farkl platformlarda alan uygulamalar arasnda veri paylam iin ve
HTML'den arndrlm olarak bilgilerin Web'e almas iin de kullanlr. XML de verinin grnm ve sunumu ile ilgilenen iaretleme dili HTML (Hiper Metin aretleme Dili) gibi
SGML (Standard Generalized Markup Language)'den tretilmitir. SGML ok geni bir dil
olduundan Web'de tam olarak kullanlmas olduka zordur. Bu nedenle bu trden gelitirmelere gidilerek amaca zel kstl elemanlardan oluan iaretleme dilleri elde edilmitir. XML
standardnn son haline www.w3c.org/TR/XML adresinden cretsiz olarak ulaabilirsiniz.
Veritaban Programlama Hakknda
Herhangi bir dil (C#, VB.NET, Delphi, C++, Java) ile yazlm ve en basitinden dz
metin dosyasna eriip ierisinde verilerini saklayan ve daha sonra eriip bu verileri okuyan uygulama bir veritaban uygulamasdr. En gelimi anlamda veritaban uygulamas,
milyonlarca satrdan oluan tablolar yneten ve raporlayan uygulamalardr. N katmanl
yaklamda en alt katmana Veri katman denir ve bu katman veritabanna karlk gelir.
Uygulamalarda veritaban kullanlmasndaki temel hedef, veri ile onu ileyen yazlmnn
birbirinden soyutlanmas ve veri eriimi, raporlama gibi ilemlerin hzlandrlmasdr. Veritaban ayrca veriye eriimi izne balar ve veri gvenliini salar.
Genellikle, kurumlarn eitli kaynaklardan rettikleri verileri ynetmelerini salamak
zere gelitirdikleri uygulamalar, verilerini veritaban ortamnda saklar. Veritaban ortam, stne ina edilen uygulamann verilere daha hzl erimesini, raporlamasn salayarak performans art ve kolay veri ynetim ortam salar.
Kurumsal ihtiyalar erevesinde gelitirilen programlar iin yazlan kodlarn dnda, veritaban ile etkileim ve veritaban seviyesinde karar mekanizmas gelitirme gibi amalar
iin veritaban programlama kullanlr. Gncel veritaban programlamada kullanlan veritaban seviyeli diller, SQL, XML ve Nesne sorgulama dili standartlar erevesinde ekillenmitir.
Kitabn erdii rnekleri Test Edebilmek in
"Yazlmclar iin MS SQL Server 2008 ve Veritaban Programlama" kitabnn ierdii
rnekleri test edebilmek iin, sisteminizde standart olarak kurulumu yaplm SQL Ser-
34
ver 2008 Developer Edition olmas yeterlidir. Yer yer, Books Online(ksaca BOL) ad verilen SQL Server 2008 yardm kitabna atfta bulunulmu olabilir. Kitapta ele alnan projeye ait dosyalar, CD ieriinde bulabileceiniz gibi, destek sayfalarndan indirebilirsiniz.
Ayrca www.microsoft.com/sql adresinden cretsiz indirebileceiniz 180 gnlk(ki yarm
yl demek) cretsiz SQL Server 2008 Enterprise Edition da kitap ieriini test etmek iin
fazlasyla yeterli bir SQL Server srmdr.
Kitapta verilen kodlamalar, aksi belirtilmedii srece 'Management Studio' ad verilen
SQL Server istemci aracnn Query ekranlar kullanlarak test edilebilir.
Birikim Gereksinimleri
Kitap ierii, programlama dnyasna yeni adm atm ve Microsoft temelli yazlm gelitirme ortamn renmeyi amalam okurlar iin dzenlenmitir. Bunun dnda bir veritaban ynetim sistemi iin temel bilgileri verebilecek bir kitap olsa da ek bir adaptasyon
sreci gerektirebilir.
Kitap ierii, SQL dnda bir uygulama gelitirme dili gerektiinde bunun C# olmas
durumuna gre dzenlenmitir. Bu nedenle C# dili hakknda yzeysel bir birikiminizin
olmas, kitap kapsamn bir rpda sindirebilmeniz iin faydal olabilir. Daha nce bir dil
ile uygulama gelitirdiniz ama C# size biraz yabanc geliyorsa, kitabn ek ksmlar size yol
gsterecektir. Hibir dil bilmeden bu kitaba balyorsanz, yer yer bir C# kitab ile desteklenmesinde yarar olabilir.
Kimlere Hitabediyor
Kitap, ASP.NET ve/veya .NET ile SQL Server 2008 stnde uygulama gelitirenlere hitap etmektedir. Bilgisayar Mhendisliklerinde okutulan 'Veritaban Ynetim Sistemleri',
Endstri Mhendisliklerinde veya Ynetim Biliim Sistemlerinde okutulan 'Veritaban
Tasarm ve Gerekleme' derslerine asl veya yardmc kitap olarak kullanlmas mmkndr. Ayrca, programlama dnyasndan daha nce haberdar olan ve programlamaya
bir orta ve byk lekli veritabann uygulamas tasarlamay zerek balamak isteyenlere yol gstermek zere hazrlanmtr.
Ancak kitap programlama hakknda hibir altyaps olmayanlar iin hazrlanm ve her
eyi hibir ey bilmeyen biri iin en batan alan bir kaynak deildir. Programlama hakknda hi bir deneyiminiz olmamas halinde, kitabn kapsam sizin iin ar ve anlamsz
gelebilir.
Yine, bir uygulama gelitirmek isteyenler iin, bu kitab tek bana yeterli kaynak olarak
grmek iyi bir seim olmaz. Kitap, bir veritabanna bal uygulama gelitirmenin arlkl
olarak veri katmann, fikir verecek kadar da veri eriim katmann ele almaktadr. Dier
katmanlar iin baka kaynaklarla birlikte takip edilmesi gerekebilir.
Farkl Balang nerileri
Kitab yapacanz ie ve birikiminize gre farkl noktalardan balayarak okuyabilirsiniz.
Bu konuda aadaki tablo size yol gstermek zere dzenlenmitir.
Giri
Yaptnzyapacanz i
Balang Seviye SQL
Server 2005-2008 Veritaban Programcs
leri - Orta Seviye SQL
Server 2005-2008 Veritaban Programcs
Daha nceden
Bilmeniz gerekenler
likisel Veritaban
Hakknda genel bilgi
1.
2.
3.
4.
5.
Raporlama Uzman
Raporlama Ortamnz
Kullanmak
35
SQL Server 2005 yenilikleri hakknda fakir sahibi deilseniz ilk 3 blme gz atn
Takip eden 4 blmden ihtiyacnz olanlar okuyun
C# veya edeeri bir dil bilmiyorsanz EK-B'yi okuyun
8. Blm okuyun
Veritaban ortamnda servis temelli bileenler kurgulamanz gerekiyorsa 9. blm
okuyun.
6. stemci taraf uygulamalar gelitirme konusunda fikir edinmek iin 10. blm okuyun
1. SQL Server 2008'e veya likisel Veritaban Kavramna yabanc iseniz 1.blme gz
atn
2. SQL ifadelerini yazmakta glk ekiyorsanz 3. Blm okuyun
3. Baz sorgularnz hzlandrmak veya basitletirmek iin 4. Blm okuyun
4. Sorgularnzda sunucu tarafl programatik bileen gereksinimleriniz varsa 5. Blm
okuyun.
5. Sunucu tarafl bileen ihtiyacnz arttka takip eden blmlerden uygun olanlara da
gz atabilirsiniz.
1. lk blme gz gezdirin ve yeni eklenen servisler, eski servislerin yeni isimleri hakknda fikir sahibi olun
2. 2.2'de yeni veritaban seenekleri hakknda
2.3'de yeni tiplerin kullanm hakknda
2.4'de yeni veri btnl seenekleri hakkndaki deiikliklere gz atn.
3. 3.2.3'de yer alan veri sorgulamaya dair yeniliklere gz atn
4. 3.3'n ilk konusunu okuyun
5. 4.1'de paral tablolar bahsini okuyun
6. 4.3'de yeni indeks seeneklerine gz atn
7. 5.2'de rutinleri bakalarnn adna altrmak bahsine gz atn
5.3'de TRY-CATCH yapsn renin.
5.4'n son iki baln okuyun
8. 6.Blmn tamamn okuyun
9. 7.1.2'yi okuyun
10. 8.Blmn tamamn okuyun
11. 9.Blmn tamamn okuyun
12. 10.Blmn ilk iki nitesindeki yeniliklere gz gezdirin.
13. 10.3'n tamamn okuyun.
14. Veritabannz SQL Server 2000'den 2005'e aktaracaksanz, EK-A'daki ipular
bahsine gz atn.
1. SQL Server aralarna gz atn. SAC'n yeni yerini renin
2. 6.nite'de Sparse column zelliine bakn
3. 8.nite'de Tarih Zaman tipi ile ilgili yenilikleri okuyun
4. 9.nite'de Gruplanm verileri zetlemek bahsini okuyun
5. 10.nite'de VALUES ifadesi ile oklu satr retimine ve MERGE ifadesine gz atn
6. 13.nite'de filtreli indekslere ve sktrlm indeks kullanmna gz atn
7. 14.nite'de T-SQL deiken tanmlama ve operatr yeniliklerine gz atn
8. 15.nite'de Tablo Tip parametre alan Stored Procedure konusuna gz atn
9. 18.nite'de XQuery ve let ifadesine gz atn
10. 27.nite'de hiyerarik ve uzaysal veri tiplerine gz atn. XML Web Service destei
kaldrlacak zellik olarak iaretlendii iin kitaptan kartld.
36
Bu blmde, temel olarak ilikisel veritaban kavramlar ve SQL Server'n temel bileenleri ele alnmakta. Arkasndan gelecek blmlerdeki ifadeleri anlayacak kadar T-SQL dilinden bahsedilmekte.
Veritaban Tasarm
Bu blmde, sfrdan bir veritaban projesinin nasl tasarlanacana dair fikir edinmeye alacaz. Arkasndan, bir veritaban nesnesinin zelliklerinin belirlenmesi ele alnmakta. Son
olarak, tablolarn hangi kurallara gre tasarlanaca ele alnmakta. Veritaban tasarm, kavramsal, mantksal ve fiziksel olmak zere aamal bir sre ierisinde ele alnmakta.
Veri Sorgulama
T-SQL dilini bir programlama dili olarak renmek, bylece SQL Server 2005 ierisinde ihtiyaca binaen kodlar yazmak istiyorsanz bu blmdeki niteler size yol gsterecektir. Kodlarnz veritabannda tekrardan kullanm amal olarak kaydetmek ve veritaban seviyeli kodlarnzdaki hatalar daha sonra gzlemlemek zere takibata almak bu blmde ele alnmakta.
XML ile almak
Veritabannda XML veri saklamak ve XML veri stnde yaplabilen ilemlerle ilgili
programatik konular bu blmde ele alnmakta. Gerektiinde tablolarnzdaki verileri
XML'e dntrerek ekmek ve XML verilerinizi tablolara aktarmak da burada ele
alnmakta.
Giri
37
Veritaban ierisinde birden fazla ilemin mantksal olarak ayn anda olmu gibi yrmesini salamanz gerekiyorsa, transaction bloklar kullanmak sizin iin kanlmaz olacaktr. Bu blmde, transaction bloklar oluturmak, transaction bloklarn birbirinden izole
etmek ve veri deiimlerine duyarl T-SQL programcklar gelitirmek ele alnmakta.
SQL Server 2008 iinde CLR
Bu blme balamadan nce en azndan yazlm kodlar anlamlandracak kadar C# bilginizin olmas gerekir. ayet daha nce hi C# veya benzeri bir dil ile program gelitirmedi iseniz,
kitabn Ek-B ksmna gz atmanz yararl olacaktr. Blm ierisinde, C# dilinin ve Microsoft. NET ortamnn T-SQL'e yardmc bir enstrman olarak kullanlmas ele alnmakta.
Veritaban Yeteneklerini Gelitirmek
Bu blmde, veritabannzdan daha fazla yararlanabilmeniz iin yapabileceiniz programsal ilemler ele alnmakta. Bu erevede, SQL Server'n bir veri ynetim merkezi olarak
kullanlmas ve text, Excel, Access, baka veritaban ynetim sistemleri ierisindeki verileri tek bir merkezden ynetmesi iin ayarlamalar yapmak ele alnmakta.
Ayrca, SQL Server 2008 ile birlikte eklenen Hiyerarik ve Uzaysal Veritipleri ele alnmakta.
Yine bu blmde, Servis Temelli Programlama kapsamnda, birbirinden bamsz alan
ama gerektiinde birbirini tetikleyen SQL Server ierisinde program bloklar oluturmay
ele alacaz.
stemci Taraftan Veritaban
Bu blm de yine 'lmeyecek kadar' C# bilgisi gerektiren bir blm. stemci taraftan veritaban eriimi konusunda yeni balam programclara fikir vermek ve vizyon izmek
iin kitaba eklenmitir.
Ayrca, SQL Server 2008'e veri dnda ynetimsel hedefler iin eriimde bulunacak uygulamalarn gelitirilmesi iin gerekli ktphaneler de bu blmde ele alnmakta.
EK A - Veritaban Programclarna pular
Elinizdeki kitap her ne kadar geni kapsaml bir veritaban programlama kitab olsa da,
veritaban programlama aamasnda ihtiya duyacanz temel ilemlerden konunun ak
ierisinde yer verilememi olanlar burada toparlanarak, bilginize sunulmutur.
EK B - C# ve OOP Klavuzu
Henz C# ve OOP ile yeterince vakit geirmemiseniz bu nite size gerekli yzeysel bilgiyi vermek zere dzenlenmitir.
EK C - Dkkan Veritaban emas
Kitap ierisinde srekli olarak kullanlan Dukkan veritabannn bu blmde bir emas
verilmitir. Yer yer bu emaya gz atmak veritaban yapsn kavramak adna ilerinizi kolaylatrabilir.
38
Kitap ekinde gelen CD'nin ierii ve kullanm konusunda bu blmde bilgi bulabilirsiniz.
EK E - CD Kullanm Klavuzu
Kitap ekinde gelen CD'nin ierii ve kullanm konusunda bu blmde bilgi bulabilirsiniz.
Gsterimler ve erik Dzeni Hakknda
Kitap ierisinde, kodlar daktilo formatnda verilmitir. ki farkl ekilde rnek kodlar yer
almaktadr: Forml-aklama niteliinde olan kodlar ve altrlabilir kodlar. Formlaklama niteliindeki kodlarda satrlarn banda dey izgi yer almamaktadr. Ayrca,
yerine bir eyler yazmanz gereken yerler, alt izgili olarak verilmitir. Bunun dnda, {}
arasna alnan yerler, mutlaka bir eyler yazmanz gerektiini gsterirken, [] ierisindeki
ifadelerin istee bal olduunu ifade eder. | iareti veya anlamnda olup bir yere yazlabilecek alternatifleri belirtmek iin kullanlmaktadr.
Bu trden kodlar dorudan altramazsnz!
Forml seviyesindeki {gsterimler[dir]}
altrlabilir kodlarn banda dey bir izgi yer almaktadr. Ayrca, altrlabilir kodlar ierisinde vurgulanmasnda yarar grlen ifadeler koyulatrlmak suretiyle, daha hzl
grmeniz salanmaya allmtr.
alabilir kodlar gstermektedir.
pucu: Burada bahsedilen ey, hayati derecede nemli olmasa da programlama yaparken hayatnz
kolaylatracak nitelikte olabilir veya konunun anlatm bozmamak adna yzeysel ele alndn
detaylarn nerede bulabileceinizi gsterir.
Dikkat: Burada bahsedilen eyler, hayati derecede nemlidir. Dikkat edilmemesi halinde veri kayplarna neden olabilir veya teknii tam olarak uygulayabilmeniz buralar gzden karmamanza baldr.
Kaynak Dosyalar Destek ve Geri Bildirim
www.verivizyon.com/sql2008 adresinde kitap ve kapsam hakknda ek bilgiler, kaynak
dosyalar ve sunumlar bulabilirsiniz.
Kitap hakkndaki fikirlerinizi dorudan yaynevine iletebileceiniz
ygozudeli@verivizyon.com adresinden okumaktan byk zevk duyarm.
gibi,
EK A
650
SQL Server 2005 iin gelitirilen "Reporting Service" adl program, SQL Server 2000 ile
de uyumlu olarak kullanlabilmektedir. Bu ara sayesinde, Web Sayfas, PDF, Excel gibi
ortamlara verilerin raporlar aktarlabilmektedir. cretsiz olan bu arac olarak rapor sunucusu olarak kullanabilirsiniz.
Veri Ambarlama ve OLAP
Veri Ambarlama, Veri Madencilii ve OLAP gibi konular hakknda ayrntl bir almaya
gereksinimizin varsa, bu konuda yazlm kitaplara bavurabilirsiniz. SQL Server'in Enterprise
Srmnde yeralan Analysis Services bileenleri bu konuda size destek olacaktr.
OLAP konusunda, ciddi bir alma planlyorsanz, SQL'in yan sra MDX (ok boyutlu
fadeler- multidimentional Expretions) konusunda da bilgi edinmeniz gerekecektir.
SQL Server Integration Services (SSIS)
SQL Server 7.0'dan bu yana kullanlagelen Data Transformation Services SQL Servre
2005'den itibaren yeniden ekillendirilerek SSIS ad verilmitir. SSIS ile veri btnletirme zmleri gelitirmede kullanlr. SSIS veri birletirme ve dnm paketleri oluturmak iin grafik arayzler, sihirbazlar ve aralar ierir. Veri ak paketleri programlarken, FTP ile veri ekme ve ver gnderme, e-mail mesajlar gnderme gibi ek destekler
salar. Ayrca SSIS bileenlerine, SMO gibi programsal olarak erimek mmkndr.
ayet veritabannza dzenli olarak eitli kaynaklardan veriler aktarmanz veya rutin
olarak veri dnm ilemleri yapmanz uygulamanzn bir paras olacaksa SSIS programlama konusunda ayrntl bilgi edinmeniz gerekebilir.
ekil A.1:
Integration
Services'in dier
servislerle olan
8
ilikisi
651
pucu: Contains yaps ile XML veri Full-text arama iin sorgulanrken, XML elemanlarnn etiketleri ve
znitelikleri (tags, attributes) bir filtreden geirilerek, aramaya yanstlmaz.
SQL SERVER'DE VER ALIVER
SQL Server'de zaman zaman verileri bir yerden bir yere aktarma gereksinimi doabilir. SQL
Server bu konuda bir ok yntem sunar. Burada zet olarak bu yntemleri ele alacaz.
652
Bir uygulama gelitirilip gerek verilerle almaya baladnda, uygulamaya dair dzenli
bir yedek alma politikas gelitirmek gerekir. rnein, en basitinden bir UPDATE veya
DELETE ileminde, WHERE art koymay unutsak btn veriler ayn deere eitlenir ve
veri kayb meydana gelir. Gelitirdiiniz uygulamann altrld ortamn hassasiyetine
gre birka satr iin bu kaybn pek nemi olmayabilir ama milyonlarca satra hitabeden
bir uygulama iin bu durum bir felakettir. Bu trden durumlarda, yedek indirmek kanlmaz bir hal alr.
Ayrca, yedek almak transaction log dosyasn otomatik olarak boaltt iin gereksinim
duyabilirsiniz.
Yedek almadan nce, SQL Server iin bir yedekleme aygt (device) tanmlam olmanz
gerekir. Yedekleme aygt, disk olabilecei gibi, type trnden bir yedekleme nitesi de
olabilir.
Bir yedekleme aygt duruma gre u ifadelerle tanmlanabilir:
-- disk ortamnda yedekleme aygt tanmlamak iin
sp_addumpdevice 'disk' , 'diskyedekAygiti' ,
'E:\SQLBackups\Full.bak'
--yedekleme nitesinden aygt tanmlama
sp_addumpdevice 'tape' , 'kasetYedekAygiti' , '\\.\tape0'
-- a stnde baka bir bilgisayarn yedekleme aygt olarak
tanmlanmas
sp_addumpdevice 'disk','agYedekDiskAygiti',
'\\Netsunucu\SQLBak\TLog.bak'
Daha sonra, yedek aygtlar hakknda bilgi almak gerektiinde u genel ifade altrlabilir:
sp_helpdevice
653
ekil A.4:
Yeni bir Veritaban yedei hedefi
tanmlamak olduka kolaydr.
654
Veya daha nceden tanmladnz bir yedekleme aygtna yedek almak iin aadaki
rnektekine benzer bir ifade kullanabilirsiniz:
BACKUP DATABASE Northwind TO NorthwindFullBackup
655
pucu: Genellikle bir veri bozulmas sonucunda yedekten dnmeniz gerekirse, asl veritabannn yanna
ikinci bir veritaban olarak yedeklerinizi indirip verilerinizi karlatrmak, sadece bozulan verileri
eski veritabannzda deitirmek, dier verilerinizi kald yerden devam ettirmek akllca olabilir.
SQL Server stnde veritabann deployment (programn kullanlaca yere yerletirilmesi)
amal tarken, yedek alp yedei tamay da tercih edebilirsiniz. SMO ile bir veritaban yedek
alma programnn C# ile nasl kodlanabilecei SMO ile ilgili nitede yeralmaktadr.
BCP ile Metin Dosyalarndan Veri Alverii
BCP bir komut satr aracdr. Verileri dosyalara aktarmak veya dosyalardan veri almak
iin kullanlabilir.
BULK INSERT ile bir instance'dan veri dosyalar araclyla veri alnabilir. Ancak verilerin satr ve stunlardan oluan bir formatta ve dzmetin veya binary olarak veri dosyasna aktarlm olmas gerekir. Toplu olarak veritabanna alnan veriler, eski verilere eklenirken, Bir SQL Server instance'i tarafndan veri dosyasna aktarlan toplu kaytlar, eski veri dosyasn sildikten sonra yeniden kaytlar veri dosyasna aktarabilir.
pucu: Toplu (Bulk) olarak veritabanna aktarlan veriler, veritabannda daha nceden bulunmayan bir
tabloya aktarlamaz. Ama veritabanndan veri dosyasna aktarm esnasnda, ad geen dosya
yoksa oluturulur.
Veri dosyas ile veritabanndaki tabloda yer alan stunlarn ayn srada veya sayda olmas bir zorunluluk deilken veri aktarlacak stunlarn zde olmas gerekir. rnein, INT
kabuleden bir stuna harf eklemeye almak hataya neden olacaktr.
Toplu olarak bir veritaban ile bir veri dosyas stnde veri alverii yaparken, u haklarn verilmi olmas gerekir:
Veri dosyasndan veritabanna veri aktarrken, tablo stnde SELECT ve INSERT hakk
rnek Durum 2:
Markalarmzn yerald tblMarka tablosundaki kaytlar, marka.txt dosyasna aktarmamz gerektiini dnelim ve bunu bcp ile gerekletirelim
bcp dukkan.dbo.tblMarka out marka.txt -c -T
656
ekil A.6:
bcp arac kullanlarak, bir tablodaki
verilerin dardaki
bir metin dosyasna aktarlmas.
lgili dosya, ifadeler alrken
bulunulan dizinden grlebilir.
Tablonun tam yolunun verildiine dikkat edin. out deyimi, veri aktarm ileminin veritabanna gre ynn tayin etmektedir. marka.txt verilerin aktarlaca veri dosyasdr. c karakter formatta aktarm yaplacan gsterir. T eriim iin gvenli balant
(Trusted Connection) kullanlacan gsterir.
Verileri bu ekilde aktardktan sonra marka.txt dosyasna notepad gibi bir programla
gzatabilirsiniz.
marka.txt dosyasnda yeralan kaytlar, bcp kullanarak veritabanna aktarmak mmkndr.
Bunun iin tblmarka2 adnda bir tablonun daha nceden oluturulduunu varsayarsak:
bcp dukkan.dbo.tblMarka2 in marka.txt -c -T
demek yeterli olacaktr. Burada, out kelimesinin in olarak deitiine dikkat edin.
Bu ilem, BULK INSERT yntemi kullanlarak, Query Analyzer gibi bir T-SQL ortamndan da gerekletirilebilir.
USE dukkan
BULK INSERT tblMarka2
FROM 'c:\documnents and setings\ygozudeli\marka.txt'
WITH (DATAFILETYPE = 'CHAR')
Her iki yntemde de tablonun nceden oluturulmu olmas gerekir. Burada, WITH deyiminden sonra, DATAFILETYPE parametresi kullanlarak, verilerin bulunduu format
belirtilmektedir.
Tablo A.1:
Bulk Insert parametreleri
BULK INSERT
Parametresi
BCP
Parametresi
Aklama
NATIVE
-n
CHAR
-c
Karakter veri formatn belirtmek iin kullanlr. Tab'larla ayrlm satrlar halinde saklanr. Veri, bcp dnda Excel gibi baka
bir program tarafndan da ele alnacaksa tercih edilebilir.
WIDECHAR
-w
WIDENATIVE
-N
Karakterle ifade edilmeyen stunlar, veritabannn kulland formatta, metin (varchar, char, nvarchar ve ntext, text vs.)
stunlar ise Unicode formatnda saklamak iin kullanlr.
657
2.
Uygun olan kaynak seilir. rnein biz dz metin dosyasna (*.txt) balanacaz.
ekil A.7:
Data ImportExport Wizard'n
balatlmas
ekil A.8:
dovizler.txt dosyasnn veri kayna olarak seilmesi
658
ekil A.9:
Columns sekmesinden stunlar
grebilirsiniz.
Advenced sekmesinden stunlarn
adn ve tipini,
stun silme ekleme gibi ilemleri
yapabilirsiniz.
3.
Uygun olan hedef seilir. rnein metin dosyasndan SQL Server'e veri alacaksak,
hedef SQL Server'dir.
4.
Kaynakta var olan tablolar getirilir ve kullancnn hangi tablolar aktarmak istedii
sorulur. stediiniz tablolar iaretleyin.
ekil A.10:
Hedef olarak SQL
Server ierisindeki
dukkan veritabannn seilmesi
ekil A.11:
Kaynaktaki
verilern hedefte
hangi tablo(lara)
aktarlacana
karar verin.
659
ekil A.12:
Daha nceden var
olan bir nesne
varsa, hangi
stunun hangi
stuna aktarlacan eleyebilirsiniz. Edit SQL
butonu ile nesne
oluturma scripti
stnde deiiklik
yapabilirsiniz.
5.
ekil A.13:
Elde edilen veri
aktarm plan iin
son ayarlamalar
yapn.
ekil A.14:
Veri aktarm
ilemi zet ekran.
Her eyin yolunda
olduunu kontrol
edin ve Finish
butonunu tklayn.
Hemen altrmak iin Execute Immediately seeneini kullann. Paket oluturup daha
sonra da bu veri tama ilemini kullanacaksanz, SSIS paketi olarak sakla seeneini
uygun saklama ortamn ve hassas verilerin saklanmas ile ilgili nlemleri ayarlayn.
660
6.
SQL Server'den baka bir formata veri aktarmak iin de yaplmas gereken ilemler ayndr. Deien tek ey hedef ile kaynak trlerinin deimesinden ibarettir.
ekil A.15:
lemlerin altrlmasn raporlayan sonu ekran.
pucu: SSIS'i programlamak ve datk veri kaynaklarnz arasnda dnm, aktarm ilemlerinizde daha
fazla kullanabilmek iin http://msdn.microsoft.com/sql/bi/integration/ adresine gz atabilirsiniz.
Replication
Replication, ayn anda birbiri ile balantl ve her biri veri retebilen siteler (birimler) arasnda anlk olarak verilerin aktarlmas iin salanm bir VTYS zelliidir. Bu zelliin kurgulanmas ve gereklenmesi, daha ok veritaban ynetimi konular arasnda yer almakta.
Replication ile canl olarak veri aktarm ilemleri sadece SQL Server-SQL Server arasnda olmak durumunda deildir. SQL Server, heterojen replicaiton'a destek salar. Gerektiinde, bir MS Access, Oracle, Sybase gibi sunucularla da verileri uygulama alr durumda iken bir birimden baka bir birime aktarabilir.
Replication ile verilerin bir birimden baka bir birime datlmas iki temel terime dayaldr;
publication (yayn) ve subscription (abonelik). Aslnda bu iki kavram, gnlk hayatta bir dergi ve
bu dergiye abone olmak eklinde dnldnde hi de yanl bir model kurgulanm olmaz.
Bir publication, gnlk hayatta dergide olduu gibi, article (makale)'lerden oluur. Her bir makale, bir tablo aktarm tanm olarak ele alnabilir. Publication'n dier sunuculara iletilebilmesi
iin, publication yapan sunucu (primary side-birincil taraf)'a dier sunucularn abone olmas gerekir. Bu ileme de subscription denir. Ancak abonelik gnlk hayattaki ile biraz farkldr. Bir
abonelik sadece bir tek makale iin olabilecei gibi, yayndaki btn makalelere de olabilir.
Publication'n stnde tanml olduu sunucuya publisher (yaync) denir. Bu yaynlara
abone olan sunuculara ise subscriber (abone) denir.
Distributor (datc) Bir sunucudur. Bu sunucu, veri gemiini ve transaction'lar tutar.
tercih edilen replication yntemine gre, publisher veya subscriber stnde de
yeralabilir. Bu verileri subscriber'lere datr.
661
pucu: Master, tempdb, Model, msdb gibi Sistem veritabanlar ve syslogins, sysobject... vs sistem
nesneleri replication tarafndan aktarlamaz.
SQL Server, 3 temel Replication Metoduna Destek verir:
1.
Snapshot Replication: Birincil taraftaki verileri belli peryotla alr ve ikincil taraftaki
verilerin stne yazar. Bir birincil anahtar stuna gereksinim duymaz. Default olarak, Mssql\Repldata dizininde yer alan veriler, gereksinim olduunda CD gibi offline ortamda da ilgili sitelere aktarlabilir.
2.
Transactional Replication: En bata bir snapshot alnarak balatlr. ok az bir gecikme ile deiimler dier sitelere datlabilir. Deiikliklerin ezamanl olmas ihtiyac iin iyi bir yaklamdr.
3.
Merge Replication: Verilerin ayn anda iki sunucuda deitirilmesine msaade edebilen bir yaklamdr. Herhangi bir sunucuda yaplan deiiklik, dier tarafa yanstlabilir. Her iki kaynakta da deitirildii iin akan kaytlar iin standart veya deitirilebilir zmler nerebilir. zellikle balantnn nitelikli olmad mobil cihazlar iin tercih edilebilir.
SQL Server 2000 veya 2005 Veritabann SQL Server 2008'e Aktarmak Hakknda
Konu burada fikir vermek maksatl, kk veritabanlar iin nasl yaplabileceini anlatmak
zere ele alnmtr. Daha byk ve kritik uygulamalarda, verilerinizin yan sra btn bir sistemin upgrade edilmesi gerektiinde ok daha karmak bir sre ortaya kmakta. Bu trden
bir sreci nasl ele alabileceiniz ve planlayabileceiniz konusunda ayrntl bilgiyi,
www.microsoft.com/sql adresinde "SQL Server 2008 Upgrade Technical Reference Guide"
aratarak bulabileceiniz SQL2008UpgradeTechnicalReferenceGuide.docx adl dokmanda bulabilirsiniz. Ayrca CD ierisinde bu dokmann bir PDF kopyas yer almaktadr. Burada
anlatlanlar, bu dokmann bir zeti olarak derlenmitir.
Aktarm Seenekleri
SQL Server 200 veya 2005'de kurulu Bir sistemi SQL Server 2008'e aktarmak iin iki
farkl temel strateji mevcuttur:
662
Bu trden bir aktarmda, eski srmn yanna yeni bir SQL Server 2005 instance'i kurularak, eski sistemin varln devam ettirmesinin yannda yeni bir veritaban ynetim sistemi stnden devam edilebilir hale getirebilirsiniz.
Bu trden bir aktarmda, eski srmn alt yere dorudan SQL Server 2005'i kurabilirsiniz. Ancak eski sistem tamamyla yok olduu iin sadece yeni sistemi devam ettirebilirsiniz.
Tablo A.2:
SQL Server
2000/2005'ten
2008 srmne
gei iin yerinde
ve yan yana
aktarm stratejilere
bal karakteristiklerin karlatrlmas.
Karakteristik
Yerinde Aktarm
Bir adet
Otomatik
El ile
Otomatik
El ile
Destek Aralar
SQL Server
Farkl aktarm ve veri transKurulum Program fer metodlar
Her iki temel stratejinin de kendine gre avantaj ve zaaflar olsa da yan yana aktarm yerinde
aktarma gre genellikle tercih edilir. Yerinde aktarm sadece test temelli veya ok kk,
kritiklii bulunmayan uygulamalarda, daha az kaynak kullanm iin tercih edebilirsiniz.
Ayrca, 32 Bit SQL Server srmlerinden 64 Bit SQL Srmlerine gei gibi komplike parametrelere bal aktarm seeneklerini yukarda bahsi geen dokmanda bulabilirsiniz.
Upgrade etmeniz gereken ey, sadece veritaban ise bunun iin pratik olarak birka yntemden birini tercih edebilirsiniz.
Eski server'in stnde direk SQL Server 2008 kurarak upgrade edebilirsiniz. Bu durumda
gerekli dosya dnm ilemlerini SQL Server yapar ancak eski sisteme dnme ihtimaliniz
varsa, SQL Server 2008'i yeni bir instance olarak kurmanzda fayda olabilir.
SQL Server 2000-2005'te aldnz bir yedei SQL Server 2008'de restore edebilirsiniz.
SQL Server 2000-2005'teki mdf ve ldf dosyalarn deattach edip, SQL Server
2008'e getirip attach edebilirsiniz.
pucu: Bu durumda SQL Server 2008 otomatik olarak dosyalarn dnmn yapacaktr. Ancak bu
trden bir veri dnmnden sonra veritabannzn uyumluluk seviyesi (Compability Level) 80
veya 90(SQL Server 2005 ise) olacaktr. Yani 8.0 ile edeer zellikleri kullanabilirsiniz.
SQL Server 2008'e has zellikleri kullanabilmeniz iin, uyumluluk seviyesini 10.0 srm edeeri olan 100'e getirmeniz gerekir.
Eski sunucu dururken yeni bir SQL Server 2008 kurup verilerinizi SSIS ile aktarabilirsiniz. Ancak bunu yaparken ok fazla nlem almanz gerekebilir.
663
Basit bir Attach- Deattach ilemi iin Adm Adm Upgrade u ekilde olabilir
1.
2.
3.
4.
5.
6.
a.
b.
SQL Server 2008'de uygulama eriimi iin gerekli sunucu seviyeli login bilgisini tanmlayn
c.
d.
2.
3.
4.
SQL Server'inizi izole edin ve dzenli olarak yedek almay ihmal etmeyin
5.
6.
7.
Firewall'nz varsa, SQL Server'e ait portlar dardan eriime kapatn. TCP port
1433 ve UDP port 1434 SQL Server tarafndan kullanlmaktadr.
664
8.
9.
2.
Uygulamanzn veri yazma ve veri okuma ilemleri iin stored prosedrler dnda veritabanna erimediinden emin olun. Asla Ad-Hoc sorgu olarak kullanlmak zere,
uygulamaya T-SQL kodlar gmmeyin. Bu gvenliin yan sra uygulamanzn sorgu
sresini de ksaltma, karmaklatrma gibi dezavantajlar da beraberinde getirir.
Stored Procedure'leriniz ierisinde EXEC deyimi ile dardan parametre ile alnan statik
SQL ifadeleri altrmaktan kann.
Stored Procedure'leri, Transact-SQL kullanarak dorudan altrmak yerine, ADO veya
ADO.NET'in salad bir ara nesne kullanarak parametre aktarn (command nesnesi).
3.
sa kullanc adn sadece veritaban ayarlar ve nesne oluturma ilemleri iin SQL
Server'in kendi istemci programlar (Enterprise Manager, Query Analyzer, osql vs.)
ile balanrken kullann. Uygulamalarnzn veritabanna erimesi iin asla kullanmayn. sa kullancsnn, bo veya kolay bir ifreye sahip olmadndan emin olun.
4.
SQL Server stnde mmkn olduunca az hesap bulundurun. Unutmayn kullanc arttka eriim denetimi de zorlar. Gereksiz hesaplar varsa silin. Her bir hesabn, gerekenden daha fazla haklara sahip olmadndan emin olun.
5.
Uygulamalarnzn bir standart kullanc ile SQL Server'e erimesi gerekiyorsa, uygulamaya zg bir kullanc oluturun. Bu kullancya verilen haklarnn asgari seviyede olduundan emin olun hatta 1. adm uyguladnz ise, sadece stored prosedrlere eriim
izni verin, asla tablolara dorudan eriim izni vermeyin. Kullancy, SQL Server kullancs ya da yerel sistem kullancs olarak tanmlamak yerine domain kullancs olarak tanmlayn. Kullancy btnleik (Entegrated) kullanc olarak yetkilendirin.
6.
SQL Server makinesi ile Uygulama sunucusu arasnda IPSec tanmlamas yaparak
baka makinelerden ayn hesabn SQL Server'e balanmasn kstlayabilirsiniz. Gereksiz bal sunucu varsa, kaldrn.
7.
8.
Uygulamanz kullanacaklar, sadece dostlarnz deildir. Uygulamanzdan gelen ifadeleri dorudan SQL ifadenize ekleyip SQL ifadenizi altrmaktan kann. SQL
Server'e kaydedilmek zere kullancdan aldnz veriler iin gereinden uzun girdi
kabul etmeyen yaplar kullann. Tablo tasarmlarnda ve procedure, fonksiyon ve
deiken tanmlamalarnda alan uzunluklarn gereinden fazla uzun tutmayn. Kul-
665
lancdan gelen bilgilerde kt niyetli ifadeler olup olmadn kontrol etmek zere
bir yaklam gelitirin. Bu konuda, maruz kalabileceiniz saldrlar ve yaklamlar
hakkndaki geni bilgi, "SQL Enjeksiyonu Kar nlemleri" bal altnda ele alnmtr. Uygulama gelitirirken, bu trden saldrlar aklnzdan karmayn.
9.
hakknda
bilgi
almak
iin
Kullancdan gelen deerleri, dorudan SQL ifadesine dahil edip sorguyu altrmak, kt niyetli kullanclarn sisteme zarar vermesi iin bulunmaz frsattr. Basit bir parametrik
deer beklediimiz yerden, zararl bir SQL ifadesi gelebilir. Burada, bu trden yaklamlarn neler olduunu ve bu yaklamlara nasl kar koyabileceimizi ele alacaz.
Tektrnak Saldrlar
Bu sorgu, ifre ve kullanc ad doru olsun veya olmasn her zaman kullanc ad, ifre ve
yetki seviyesi bilgilerinden ilk kayda ait olanlar kullanarak yetkilendirme yapacaktr.
nk, OR 1=1 her zaman dorudur ve dier btn artlar yanl olsa bile, tm kaytlar
semek iin yeterlidir (bkz. rnek 6.11)
Bu durumda, ansmz varsa, en bata yer alan kullancmzn, sitedeki haklarnn kstl
olmas hali ortaya kar ve sadece bir kii zarar grr.
zm olarak, tektrnak(') geen ifadeleri temizlemek ilk akla gelen yntemdir. Ancak
bunun tam olarak yeterli olmadn, sadece balang seviyesindeki saldrlar kesebileceini ilerleyen ksmlarda ele alacaz.
666
Tek trnaklarn temizlendiini varsayalm. Bunun iin, basit bir fonksiyon VBScript ile u
ekilde yazlabilir:
Function saldiriOnle(sSQL)
sSQL=replace(sSQL,"'","''")
' tek trnaklar kabul etme
sSQL=replace(sSQL,"--","")
' aklama satrlarn kaldrarak
' saldrlar engelleyelim
sSQL=replace(sSQL,";","")
' ; ifadelerini kaldralm.
End function
Tablo A.3:
baz ASCII kodlar
ve sembol karlklar
ASCII Kod
Deer
32
boluk
39
'
45
49
61
79
82
Bu durumda, yukardaki saldr nleyici fonksiyonda baz dzeltmeler yaplarak kurtulmak mmkndr. rnein, + iaretini kullancdan kabul etmeyebilirsiniz. Ya da CHR
deerini bolukla filtreletebilirsiniz vb. gibi.
Hata Verdirmeye Dayal Saldrlar
Bir saysal stun varsa, hata verdirmek olduka kolaydr. SQL enjeksiyonunda en nemli
saldr yntemlerinden biri de sisteme hata verdirmektir. Hata mesajlar, genellikle tablo
ad, stun ad, prosedr ad, parametre ad ve tipi hakknda fikir edinilmesine yardmc
olur. te yandan, UNION ve HAVING gibi cmleciklerle, saysal ve metin veriler bir
stunda ele aldrlmaya alldnda hata mesajlar sayesinde, tabloda yer alan verilere
de erimek mmkn olur. Bu nedenle, hata mesajlarnz mmknse kullanclardan gizlemeniz nerilir. Bu saldrgan durduramasa da yavalatacak bir yntemdir.
Ancak hata mesajlarn gizlemek saldrlara kar %100 gvenli bir yol deildir. nk
WAITFOR deyimi, SQL Server'in sorguyu altrmadan nce, belli bir sre susmasn sa-
667
layan bir operatr olduundan, saldrgan denemelerini dorulatmak zere belli bir sre
SQL Server'i bekletme yntemini tercih edebilmektedir. SQL Server ayet beklerse, Web
Server da ondan gelen yant bekleyecei iin ge yant verecektir. Bu ipucunu deerlendirerek, saldrgan WAITFOR ile AND'ledii ifadenin doru olup olmadn anlayabilir.
Burada, ok zararl olmayan ama bu durum geerli ise, saldrgann azn sulandracak bir
teknik ile rnek verelim: Saldrgan, bizim sitemizde kullandmz uygulama hesabnn sa
ile balanp balanmadn merak ediyor olsun:
IF SUSER_SNAME()='sa' WAITFOR DELAY '0:0:7'
Bu ifade, hibir sonu dndrmez. Sadece verilen eitlik doru ise, SQL Server 7 saniye
bekler. Bu ifade bir batch'in ierisinde ise (ki Enjeksiyon bu demek), btn batch tamamlanana kadar, SQL Server Web Server'e veri yollamaz.
ayet uygulama, webuser gibi bir kullanc ile balandrlmyor da sa ile balanyorsa,
Web borwser sayfay normalden 7 saniye daha ge ykleyecektir. Aksi halde hibir sre
fark olumayacaktr.
Dikkat: Yeterli zaman olan bir saldrgan, WAITFOR DELAY ... ile birok bilgiyi sisteme teyid ettirebilir.
Stored Procedure Kullanan Saldrlar
Stored Procedure kullanlmas, tek banda SQL Enjeksiyonundan korunmak iin yeterli
deildir. zellikle, ierisinde EXEC deyimini kullanarak statik olarak SQL ifadeleri altran stored procedure'ler, sistemin gvenlii asndan ciddi tehlikeler dourabilir. nk bu trden bir stored procedure de sql enjeksiyonuna maruz kalabilir.
rnein, bu trden basit bir sistem stored procedure'ne gzatalm. Bu procedure normal ayarlarda public rol iin eriilebilirdir.
CREATE PROCEDURE sp_MSdropretry (@tname sysname, @pname sysname)
as
declare @retcode int
/*
** To public
*/
exec ('drop table ' + @tname)
if @@ERROR <> 0 return(1)
exec ('drop procedure ' + @pname)
if @@ERROR <> 0 return(1)
return (0)
668
Stored procedure'ler bir gvenlik unsuru olarak kullanlyorsa, mutlaka API'lerin ilgili nesne
ya da fonksiyonlar kullanlarak parametre aktarm yaplmaldr. Dorudan Transact-SQL
ifadesi olarak arlan stored procedure'ler de sistem gvenlii asndan tehlikelidir.
Bu konuya zm olarak nasl yaklalaca, ADO ve ADO.NET ile stored procedure
altrma bahsinde ele alnmtr.
Genel SQL Enjeksiyon'larndan Korunma Tedbirleri
SQL Enjeksiyonundan korunmak iin kabul grm, temel yaklam vardr. Sizin iin
en uygun olanna kendiniz karar verebilirsiniz.
Sadece yileri Kabul Etmek
En yksek seviyede korunma iin bu yntemi tercih edebilirsiniz. Ancak, kullanclarnzla etkileiminizde eitli kstlamalar yansyacaktr.
Kullancnn sadece "abcdefghijklmnopqrstuwxvyz1234567890
@_/[]()" eklinde belli bir alfabe ile kstlayabilir, dndaki deerler kabul etmeyebilirsiniz. Baz bankalarmz gvenlikte bu yntemi tercih etmektedir.
Bu yntemi gereklemek iin, kullancdan gelen girdi ifadeyi bir string deikene atp,
her seferinde sadece bir tane karakter alarak, bu harfin yukardaki deerler arasnda yer
alp alnmadna baklr. Btn karakter bu alfabeden geliyorsa, kullanc girdisi zararsz
kabul edilir. Aksi halde, istek yantlanmadan sona erdirilebilir (ASP iin
Response.End()) veya baka bir kaynaa ynlendirilebilir (ASP iin
Response.Redirect()).
Ktleri Reddetmek
Bu yaklam da gvenli kabul edilebilir. Ancak baz durumlarda, kullanc hatasnn nedenini anlamayabilir.
erisinde, "SELECT", "INSERT", "UPDATE","DELETE","DROP","
","CHAR (" gibi ifadeler geen kullanc girdileri varsa kabul edilmeyebilir.
OR
Bu yntemi gereklemek iin, kt olduu varsaylan ifadeler bir diziye atldktan sonra,
bu dizideki her bir ifade iin kullanc girdisi kontrol edilebilir. erisinde bu ifade geen
bir kullanc girdisi olmas halinde, istek yantlanmadan sona erdirilebilir veya baka bir
kaynaa ynlendirilebilir.
Ktleri Filitreleyerek Kabul Etmek
EK B
C# VE OOP KILAVUZU
Bu ksm, T-SQL'i bir programlama dili olarak bilenler iin C# diline hzl bir balang maksatl eklenmitir. nitenin sonlarna doru nesneye dayal programlamann genel bir zetini ve takip eden sayfalarda da 3N katman mimarisi iin rnek bir uygulama bulabilirsiniz.
C# LE PROGRAMLAMAYA GR KILAVUZU
Bu blm, daha nceden herhangi bir dilde (ki buraya kadar okudunuzsa en azndan TSQL diye bir dili kullanmay biliyor olmalsnz) kodlar yazm ama C# ile henz tanmam programclar iin hzl bir balang klavuzu olarak hazrlanmtr.
Bu blm C# dili gibi geni bir kavramn sadece kitap ieriindeki program paracklarn kodlayabilecek kadarn kapsamaktadr. Kitap ierii C#' sadece ynetilmi olarak
(.NET Framework dahilinde) ele almaktadr.
C# ile drt farkl alabilir program yazlabilir: Komut satr uygulamas, ASP.NET uygulamas Windows Formlar Uygulamas. ve WPF uygulamalar Bunun dnda, C# ile
.Net platformu iin kendiliinden alamayacak ama bir baka program tarafndan yklenebilecek programlar (dll uzantl assembly'ler) kodlamak mmkndr. SQL Server
ierisindeki CLR bileeni bu trden kodlar altrabilen ortamlardan biridir.
C# ile Merhaba Dnya
CLR ortam, C# dili ile de programlanabilen bir ynetilmi (managed) ortamdr.
Managed ortam, sistem kaynaklarn programc yerine kontrol eden ortam demektir.
.NET CLR ortamn kullanarak alacak en basit komut satr C# program aadaki
ekilde kodlanabilir:
using System;
public class MerhabaCSharp{
public static void Main(){
Console.WriteLine("Merhaba C#");
}
}
lk rnei yazp derleyip altrabilmek, bir dili renmenin yarsdr denir. lk C# rneinizi test etmek iin, Visual Studio.NET ile bir komut satr uygulamas balatabileceiniz gibi, .NET Framework SDK kurulumuyla birlikte gelen csc.exe C# derleyicisini kullanabilirsiniz.
670
ekil B.1:
MerhabaCsharp
projesinin balatlmas
ekil B.2:
lk C# programnn altrlmas.
Bir dili gl klan noktalardan biri de kendisi ile birlikte gelen hazr ktphanenin geniliidir. nk bu ktphane sayesinde programc daha az kod yazarak daha fazla i
kartabilir. Bu ekilde bir dil ile gelen hazr ktphaneye temel ktphane (base library)
denir. C#, .NET Framework ile gelen C# ktphanesini temel ktphane olarak kullanr.
Bir dil ile programlar gelitirirken, dil ierisinde yer alan snflarn hiyerarik olarak dzenlenmesi gerekebilir. Bu tr durumlar iin C# isim uzay (namespace) deyimini destekler. Mesela System.Data isim uzay ierisinde veri ynetimi ile ilgili snflar yer alr.
Bir sistem ktphanesini, sadece kod yazarken kendi programmzn parasym gibi kullanabilmek iin, using deyimi ile ihtiya duyduumuz ktphaneyi ieren isim uzayna
atfta bulunmak yeterlidir.
C# nesneye dayal bir dildir. Bu nedenle, C# ierisinde yazlan btn programlarn bir
tr ierisinde bulunmas zorunluluktur. Bizim rneimizde bu nedenle MerhabaCSharp
snf yer almakta.
Snflar Yazmak
Bir snfn dardan bakldnda iki temel trden eleman olabilir: alan ve metot. Alan,
bir deer atanabilen ve deeri okunabilen snf bileenidir. Snf ierisinde fonksiyonellikleri yerine getirecek bileene de metot denir. Nesneye dayal programlamada metot, bir
snf ierisinde yazlm stored procedure'ler gibi dnlebilir.
zellikler iin rnek vermek gerekirse, bir nesnenin Boy, En, Renk gibi parametrik deerler alacak bileenleridir.
Ek B: C# ve OOP Klavuzu
671
Metodlar bir ilevi yerine getirirler. Yazdr, Topla, arp, kart, Birlestir gibi
C#'da bir programn altrlabilir olmas iin bir snfnn Main() adl metodu olmas
gerekir. Yukardaki rnekte bu trden bir metot yer almaktadr.
rnek 1:
En basit olarak marka bilgilerini saklayacak bir Class u ekilde tanmlanabilir:
//Marka.cs
public class Marka{
public int markaKod;
public string markaAd;
public MarkaBilgileriniYaz(){
Console.WriteLine("MarkaKodu:{0} \t MarkaAd:{1}",
markaKod, markaAd);
}
}
672
Deiken Tr
Aklama
sbyte
short
int
long
byte
ushort
uint
ulong
float
double
ift duyarlkl kayan noktal say (daha byk yaklak deer ondalk)
char
decimal
bool
Ek B: C# ve OOP Klavuzu
673
Dikkat: C#'da bir deiken, ilk olarak deer atanmadan, baka bir ilemde kullanlamaz, sadece tanmlanabilir.
Referans tipler, snf gibi boyutu her atamada farkl deerler alabilecek tipler iin idealdir. Referans tiplere dorudan atama yaplamaz. nk referans tipler, deerlerini Heap
denilen zel bir blgede tutarak o blgedeki deere referans ierirler. new operatr,
heap blgesinden yeni bir adres tahsis ederek bu blgenin adresini, atfta bulunulan deikenin deeri ile eletirir.
ekil B.4:
CLR ortamnda bir
deer tip deiken
stack blgesinde
tutulurken, referans tip deikenin sadece kendisi
stack blgesinde
tutulur. Deeri
Heap blgesinde
tutulur ve deiken buraya bir
refarans ierir.
rnek 4:
yeniMarka adnda bir deikenin stack blgesinde tanmlanmas ve heap blgesinden
yeni bir adres alnmas.
int x, y;
int z=0;
Marka yeniMarka ;
// marka trnde bir deikeni stack blgesine at
yeniMarka = new Marka();
// heap blgesinden bir adresi bu deikene tahsis et.
ekil B.5:
Stack ve Heap
blgelerindeki
deiken ve
deerlerin davranlar
Stack blgesindeki deikenlere dorudan null deeri atanabilir veya saha dna kldnda bu deikenler silinebilir. Bu tr durumlarda, Heap blgesindeki ayrlm alan ksz kalacaktr. Heap blgesindeki ksz alanlar, hafza limitleri zorlanmaya balandnda
Garbage Collector ad verilen zel .NET Framework bileeni tarafndan otomatik olarak
temizlenirler. Temizlenme esnasnda nesnelerin Finalize() metodlar altrlr.
674
pucu: String tipi, C#'ta referans tipli olmasna ramen, deer tipli gibi davranr. Bunun arka planda
yansmas olarak sk deien string tipteki veriler fazla hafza tketirler. Bu nedenle, fazla deien
string deikenler yerine System.Text snf ierisinde yer alan StringBuilder snfn kullanabilirsiniz.
String tiplerin balang ve bitileri "" ile belirtilir. Ancak string ifadenin kendi ierisinde
de bir " geerse, bu derleyicinin sentaks anlamasn imkansz klar. Bu nedenle baz durumlar u durumlar olarak ele almak gerekir. Bu trden karakterler ve ilevlerini aadaki tabloda bulabilirsiniz.
Tablo B.2:
U (escape)
karakter ve karlklar.
U Karakter
Karl
\'
Tek trnak
\"
ift Trnak
\\
Ters bl
\0
Null
\a
\b
Backspace
\f
form besleme
\n
Alt satr
Satr ba
U karakterleri dorudan bir string ifade ierisinde vermek istiyorsanz string ifadenin
bana@ iareti koymak gerekir.
rnek 5:
string ucKarakterler = @"\, ' ve \t gibi karakterler
her zaman bir metin
iinde gemeyebilir"
Tr Dnmleri
C# asndan tr dnmlerini iki ana balk altnda ele alabiliriz: Bilinsiz Tr Dnm ve Bilinli Tr Dnmleri.
Bilinsiz tr dnm, dorudan bir atama ilemi ile dnmn yaplabilmesidir.
rnek 6:
Bilinsiz dnm, sadece uygun tiplerden byk olan kk olana atandnda yaplabilir.
Ek B: C# ve OOP Klavuzu
675
int i =0;
sbyte j=1;
i=j; // j sbyte deeri bir int trden deikene atand iin
kendiliinden dnt.
Ancak bu trden dnmler yaparken, veri kaybna zellikle dikkat etmek gerekir.
C#'da uyumsuz trleri birbirine dntrmek iin Convert snfn kullanabilirsiniz.
Convert snfnn hemen her tr bir dier tre dntrecek uygun metodlar vardr.
rnek 8:
String trden, say ieren bir deeri Int trne dntrebiliriz.
string sYas="23";
int iYas;
iYas = Convert.ToInt32(sYas);
// veya Int32.Parse(sYas) da edeer bir yntemdir.
Deer ve Referans Tipler Aras Dnm: Boxing ve Unboxing
Bazen, adres temelli bir deikeni deer tipli gibi veya tam tersi deer tipli bir deikeni
adres temelli gibi kullanmak gerekebilir. Mesela bir metot, dardan nesne bekliyordur
ama elimizdeki deer int (Stack deiken)dir veya bir nesne int bekliyordur ama elimizdeki int deeri bir nesnede tutuluyordur.
Deer tipli bir deikenin adres tipe (Object) evrilmesine Boxing denir.
rnek 9:
int x=3;
object o = x; // artk 3 deeri heap'te tutulmuyor
Adres temelli deer tayan bir deikeni, deer trne dndrmeye de Unboxing denir.
rnek 10:
int y= (int) o;
Dngler ve Karar Yaplar
676
Bazen, belli artlarn hsl olmas iin ka dng atlaca belli olmayan ifadeler olabilir.
Bu tr ifadeleri while yaps ile artlar oluuncaya kadar tekrarlatabiliriz.
int x = 99;
while (x > 36)
{
System.Console.WriteLine(
"Henz x deeri 36dan byk.. ");
x--;
}
pucu: Dngleri bir defaya mahsus yarda kesmek iin continue ve geri kalan tm dngleri brakp
dngy kesmek iin break ifadelerini kullanabilirsiniz.
Nesnelerle almak
Yazm olduunuz snflar Int gibi yeni bir trdr. Bu trlerde deikenler tanmlayabilirsiniz. Herhangi bir snf trnden tanmlanan deikene nesne denir. Programlamada
Nesnel Yaklam, gnlk hayatta etrafmzdaki aralar kullanmaya bak amz yanstmak zere gelitirilmitir.
Ek B: C# ve OOP Klavuzu
677
Nesne, "kapal bir kutudur". Belli bir ilevi yerine getirmek iin tasarlanmtr. Nesneyi
kullanabilmek iin girdiler veririz. Nesne ileyii, bizim deil tasarlayanlarn bilgisi dahilindedir. Biz i ieyiini bilmeden ne verdiimizde ne alacamz bilerek kullanrz. Yani
nesne, bilmediimiz ilemler yapar ve bize bir kt verir.
Snflarda Eriim Seviyelerini Anlamak
Bir "kapal kutunun" i ileyiini problemsiz olarak yerine getirebilmesi, d dnyadan soyutlanm olmasna baldr.
Mesela bir cep telefonunu dnn. Kablolarna eriip ksa devreler yaptrarak da pekl
bir eyler yaptrabilirsiniz. Ama retici firmas, bu 'kapal kutu' yani telefon'un ilevini istikrarl olarak yerine getirebilmesi iin, bir ok i ileyiini bir klfn arkasnda saklam
ve bize sadece tutarl, amaca uygun kullanm girdilerinde bulunabileceimiz tular tasarlayp bu tulara erimemize olanak salamtr.
te programlama dnyasndaki nesneler de kullanlmadan nce tanmlanrlar. Yani snf
halinde kodlanrlar. Snf halinde kodlama aamasnda, hangi metotlarn, hangi zelliklerin dardan eriilebilir olaca, hangi elemanlarn sadece i ileyile ilgili olduundan d
dnyadan eriilemez ve bilinemez olmas gerektiine karar veririz. Bu trden karar verme
ilemini belirleyebileceimiz anahtar kelimeleri ve ilevlerini aadaki tabloda bulabilirsiniz.
Tablo B.3:
nesnelerin elemanlarna eriimi
belirleyen kelimelerden sk kullanlanlar.
Eriim Belirleyici
Kullanm Yeri
levi
public
private
rnek 12:
Daha nceki rneklerde u ekilde kodladmz marka snfnda, markaKod ve markaAd
alanlarna dorudan eriimi kapatalm:
public class Marka{
private int markaKod;
private string markaAd;
private void MarkaBilgileriniYaz(){
Console.WriteLine("MarkaKodu:{0} \t MarkaAd:{1}",
markaKod,
markaAd);
}
}
678
Ek B: C# ve OOP Klavuzu
679
Dikkat edilirse, artk markaKod ve markaAd stunlarna atanan deerler belli bir kontrole tabi tutulabilecek durumdadr. (mesela markaKod deerinin sfrdan kk olmamas gerektii kontrol edilmekte)
ekil B.7:
Marka Snf
ekil B.9:
Snflardan nesne
tretilmesi
Bir snftan nesne nshalandrlmas aamasnda, snfa ait bir metodun devreye girmesi
gerekir. Bu metod,
680
rnek 14:
Yeni bir marka oluturulurken, bu markaya ait balang verilerinin otomatik olarak atanabilir olmasn istersek,
public class Marka
{
private int markaKod;
private string markaAd;
public Marka(int markaKod, string markaAd)
{
MarkaKod = markaKod;
MarkaAd = markaAd;
}
public int MarkaKod
{
get { return markaKod; }
set
{
if (value > 0)
markaKod = value;
}
}
public string MarkaAd
{
get { return markaAd; }
set { markaAd = value; }
}
public void MarkaBilgileriniYaz()
{
Console.WriteLine("MarkaKodu:{0} \t MarkaAd:{1}",
MarkaKod,
MarkaAd);
}
}
Ek B: C# ve OOP Klavuzu
681
ekil B.10:
Programn almas
Herhangi bir anda, snftaki elemanlarn 'o' anda stnde allrkenki hali ile nesne iin
nshalanm kopyalarn kastetmek zere this anahtar szcn kullanabilirsiniz.
rnek 15:
Marka snfnn, MarkaBilgileriniAl adnda aadaki gibi bir metodu olsun:
public void MarkaBilgileriniAl(int MarkaKod, int MarkaAd)
{
this.MarkaKod=MarkaKod;
this.MarkaAd=MarkaAd;
}
Metodlar Ar Yklemek
T-SQL ile Stored Procedure'ler gibi prosedrel rutinler kodlarken, istee bal parametreler iin default deerler verebiliyorduk. C# bu trden bir seenek sunmaz. Bunun yerine ayn adda farkl sayda veya tipte parametreler alan metodlar tanmlayabiliriz. Bu ileme Metot Ar Ykleme (Method Overloading) denir.
Bir durum iin method ad arldnda, parametre olarak verilen deer ve deikenlerin tip ve saysna gre uygun olan method otomatik olarak devreye girer.
682
Mademki nesneleri, snflardan oaltarak kullanyoruz, bu durumda her nesne iin snfn ierisindeki her eyi kopyalatmaya gerek var mdr? Gereksiz eyleri hafzada gereksiz
yere oaltmasak da olur mu? Gibi sorular kendinize sormu olabilirsiniz. Nesneye dayal
programlama, her eyin illa da bir nesne stnden eriilebilir olmasn zorunlu klmaz.
Baz elemanlara snf stnden eriilebilir. Mesela, markalarn marka kodlarnn belli bir
deerin altnda kalmamas gerekiyor diyelim. Bu trden bir parametrenin her bir snf ile
oaltlmas yerine sadece snfn bir paras olarak kalmas daha akllca olacaktr.
rnek 17:
Marka snfna, minimum marka kodunu iaretlemek zere static bir alan ekleyelim.
public class Marka
{
public static int minimumMarkaKod = 0;
private int markaKod;
private string markaAd;
public Marka(){
// bo yapc metot
}
public Marka(int markaKod, string markaAd)
{
MarkaKod=markaKod;
MarkaAd=markaAd;
}
public int MarkaKod{
get{return markaKod;}
set
{
if (value > 0)
markaKod = value;
}
}
Ek B: C# ve OOP Klavuzu
683
rneimizde sadece bir deikeni static olarak tanmlandk. Bir metodu, bir zellii de
static olarak tanmlamak mmkndr. Ancak unutulmamas gereken nokta, statik tanmlanan elemanlara nesne stnden ulalamaz, dorudan snf stnden ulalabilir.
using System;
public class MerhabaCSharp{
public static void Main()
{
Marka verivizyon = new Marka();
verivizyon.MarkaKod=500;
verivizyon.MarkaAd="Verivizyon";
verivizyon.MarkaBilgileriniYaz();
Marka seckin = new Marka();
// kurala uymayan bir atamay,
// nesne kabul etmeyecektir
seckin.MarkaKod = 501;
seckin.MarkaAd = "Sekin Yayn A..";
Console.WriteLine("bir marka kodu {0} deerinden byk olmaldr", Marka.minimumMarkaKod);
}
}
ekil B.11:
Static bir alana
snf stnden
eriilmesi.
ekil B.12:
Static snf elemanlar, nesnelerle birlikte oaltlmaz, snf stnden eriilebilir.
684
Nesne ynelimli programlamann temelini Class'lar oluturur. Bir class, gnlk anlamda
bildiimiz nesne'nin kodlanarak tanmlamasdr. Nesnelerle alma teorisinin temelinde,
ieriinin nasl altn bilmeden onu kullanabilme mant yatar. Araba, DVD Player
gibi... nasl yaptklarn bilmeyiz ama ne yaptklarn biliriz.
1.
Bir class genel olarak u yapdan ibarettir (rnek iin blmn ilerleyen ksmnda
yer alan snflara bakabilirsiniz. )
Property'ler yazlabilir ve okunabilir olabilir. Sadece okunabilir veya sadece yazlabilir tanlanmas mmkndr. Ancak deikenleri okunabilir yapmak iin, Method'lar
yerine, property (zellik) ad verilen yar method yar deiken yap kullanlabilir.
2.
Class'lar yazldktan sonra, ktphanelerde saklanrlar. MFC, .NET gibi belli bir gelitirme ortam ile birlikte gelen ktphanelere, temel ktphane (base library-base
class) denir. Bu ve kullanc tarafndan gelitirilmi ktphaneler, isim uzay
(namespace) denilen nokta notasyonlu yaplarla dzenlenir. Namespace kavram,
fiziksel deil mantksal bir kavramdr. Yani, farkl dokmanlarda birbiri ile ayn seviyede class'lar olabilir.
Dzenlenmi Class'lara eriim, isim uzayndan sonra snf ad gelecek ekilde bir
notasyon ile salanr. (System.Data gibi)
Ek B: C# ve OOP Klavuzu
685
Baz class'lar, miras alndktan sonra, methodlarn geersiz klacak ayn adda yeni
bir metod tanmlanabilir (method overriding)
4.
Class'lar, ebebeynleri ile ayn trdenmi gibi davranabilirler. Bylece, temelde ayn
class'tan tretildikleri halde farkl trlerde olup ayn trm gibi davranan class'lar
elde edilebilir. (Polimorfizm)
katman mimarisinin en alt katmann, buraya kadar rendiimiz tekniklerle gelitirdiimiz, Veri katman oluturur. Veri katman ile temasta bulunan, uygulamann en alt
katmanna i katman denir ve prensip olarak class'lardan oluur. Class'lar, meseleye ok
iyi vakf kiiler tarafndan tasarlanabilirler.
Class'lar tasarlamak iin gelitirilmi standart yollar var. Bunlardan en genel olan UML
(Unified Modeling Language)'dir. Bu konuda yeni iseniz, nesneye dayal bir dil ile kodlama iinin temellerini kavradktan sonra UML ile de hair neir olmanz, yararl olacak-
686
tr. Arkasndan, genel olarak karlalan sorunlara yaklam tarzlar hakknda bilgi
edinmek iin Tasarm Desenleri (Design Pattern) renmeniz, bu yoldaki son nokta olacaktr. Tasarm Deseni, sadece nesneye dayal programlamaya uygulanmasa da, nesneye
dayal programlama iin, bir ok tasarm desenini bir ok nesneye dayal dilde bulmak
mmkndr (C++, Java, C#).
Btn bu detaylar, size brakp projemizin genel olarak, katmana dalmn inceleyelim:
Tablo B.4:
En st katman
olutururan sunum katmannn
grevi, i katman
ile kullancy etkiletirmektir. Sunum katman
dorudan veritabanna erimez!
Bu ilemler iin, i
katmannda gelitirilmi Class'lar
nshalandrarak
kullanabilir.
Katman
Sunum
levi
kurallarnn salanmas
Veri
KullaniciVT.cs
Guvenlik.cs
Buraya kadar rendiklerimiz erevesinde bir katman mimari yaklam ile, daha nce, ASP-ADO ile gereklediimiz rneimizi yeniden ele alalm:
Veri katmann biliyoruz. tblKullanici adnda bir tablomuz var. Bu tabloya eriip verilerin
doruluunu onaylayan, SP$yetkilendir adnda stored procedure kodladk, bu
nedenle. katman ile alrken, bilmemiz gereken ey, SP$yetkilendir'dir. teki ksmlar artk veri katmannda kalmtr. Neticede, veri katman ile ilgili ilemleri bitirdiimizi varsayabiliriz.
Katmann Tasarlamak
Bir sonraki katman olan i katmann tasarlamaya geelim. Bu i iin, nesneye dayal
programlamaya tam destek salayan, Managed C# dilini kullanacaz. Managed ve
Unmanaged kavramlar kafanz kartrabilir. Aralarnda ufak bir fark vardr: Managed
ortamda, sistemden hafza gibi kaynak alma ve sisteme bu kayna, ii bittiinde iade etme iini, altrma ortam yerine getirir. JVM ve .NET Framework bu trden ortamlardr. Ama ortam, her zaman byle olmayabilir. ayet iletim sistemi ile kaynak alveriini programcnn kendisi yrtyorsa, (ki bu durumda programcya ok fazla i der
ve sistemde daha fazla hata ihtimali vardr!) bu trden altrma ortamna da
Unmanaged ortam denir.
C# bir dil olarak her iki ortam da destekler. Ancak .NET ortam, C#'n btn meziyetlerini gsterebilecei bir ortam deildir. Buna ramen, biz .NET ortamnda alacaz.
Veritabanna eriip kullanc ile ilgili ilemleri yerine getirecek bir snfa ihtiyacmz var.
Bu snfa KullaniciVT adn verelim. Class adlarnn ilk harfi byk harfle balatlr. Bu
Ek B: C# ve OOP Klavuzu
687
bir zorunluluk deildir ama tre olmu bir kodlama tarzdr. imdi ilk snfmz kodlayalm:
Bu snfn amac, Web'den gelen verileri her seferinde zetlemek (Digest)tir. Bir yemiz
ilk kaydolduunda, setii ifresi veritabanmzda saklanmaz. Bunun yerine, zeti saklanr. Daha sonra, yetkilendirmek iin geldiinde de ifresinin zeti alnr. Bylelikle, her
seferinde gelen veririn daha nceki veri olup olmad bilinir, ama en nemli taraf, ne
olduu asla bilinemez. nk zet alma ile ifreleme yapan, SHA, MD5 gibi
algoritamalar, tek ynl veri dnmn esas alan, ters ynde bir dnme asla msaade etmeyen algoritmalardr.
///Guvenlik.cs
using System;
using System.Security.Cryptography;
using System.Text;
using System.Text.RegularExpressions;
namespace Verivizyon.Bilesenler
{
public class Guvenlik
{
public static string OzetCek(string gercekDuzMetin)
{
Byte[] gercekByteMetin = new
UnicodeEncoding().GetBytes(gercekDuzMetin);
Byte[] ozetByteMetin = ((HashAlgorithm)
CryptoConfig.CreateFromName("MD5")).ComputeHash(gercekByteMetin);
return BitConverter.ToString(ozetByteMetin);
}
}
}
pucu: C#'ta fonksiyon yoktur. Bunun yerine, class'larn method'larn kullanacaz. Ancak bir
methodu, gerek manada sabit bir fonksiyon gibi her yerde nshalandrmadan kullanmak istiyorsanz, static deyimi ile tanmlayabilirsiniz.
Takip eden snflar, aadaki gibi kodlayalm
///dosya:KullaniciVT.cs
using System;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;
namespace Verivizyon
{
//KullaniciVT, kullanicilarla veritabani
// arasinda iliskiyi kuran,
688
Ek B: C# ve OOP Klavuzu
Cmd.CommandType =
System.Data.CommandType.StoredProcedure;
Cmd.Connection = Conn;
// Parameter : @KullaniciKod
Cmd.Parameters.Add(new
System.Data.SqlClient.SqlParameter("@KullaniciKod",
System.Data.SqlDbType.Int, 4));
Cmd.Parameters["@KullaniciKod"].Direction =
System.Data.ParameterDirection.ReturnValue;
// Parameter : @kullaniciAd
Cmd.Parameters.Add(new
System.Data.SqlClient.SqlParameter("@kullaniciAd",
System.Data.SqlDbType.VarChar, 50));
Cmd.Parameters["@kullaniciAd"].Direction =
System.Data.ParameterDirection.Input;
Cmd.Parameters["@kullaniciAd"].Value = kullaniciAd;
// Parameter : @sifre
Cmd.Parameters.Add(new
System.Data.SqlClient.SqlParameter("@sifre",
System.Data.SqlDbType.VarChar, 50));
Cmd.Parameters["@sifre"].Direction =
System.Data.ParameterDirection.Input;
Cmd.Parameters["@sifre"].Value = sifre;
// Parameter : @yetkiSeviye
Cmd.Parameters.Add(new
System.Data.SqlClient.SqlParameter("@yetkiSeviye",
System.Data.SqlDbType.Int, 4));
Cmd.Parameters["@yetkiSeviye"].Direction =
System.Data.ParameterDirection.Output;
// Parameter : @sonGirisTarih
Cmd.Parameters.Add(new
System.Data.SqlClient.SqlParameter("@sonGirisTarih",
System.Data.SqlDbType.VarChar, 12));
Cmd.Parameters["@sonGirisTarih"].Direction =
System.Data.ParameterDirection.Output;
// Parameter : @isim
Cmd.Parameters.Add(new
System.Data.SqlClient.SqlParameter("@isim",
System.Data.SqlDbType.VarChar, 30));
Cmd.Parameters["@isim"].Direction =
System.Data.ParameterDirection.Output;
Conn.Open();
Cmd.ExecuteNonQuery();
string KullaniciKod=
Cmd.Parameters["@KullaniciKod"].Value.ToString();
689
690
if (KullaniciKod=="0")
{
Conn.Close();
return null;
}
else
{
YetkilendirmeBilgi YetkiBilgileri= new
YetkilendirmeBilgi();
YetkiBilgileri.kullaniciKod =
Cmd.Parameters["@KullaniciKod"].Value.ToString();
YetkiBilgileri.isim=Cmd.Parameters["@isim"].Value.ToString();
YetkiBilgileri.sonGirisTarih =
Cmd.Parameters["@sonGirisTarih"].Value.ToString();
Conn.Close();
return YetkiBilgileri;
}
}
public string KullaniciEkle(KullaniciDetay yeniKullanici)
{
/* Kullanici bilgilerini yeniKullanici nshasindan al
* Command nesnesine aktar
* ifadeyi calistir.
* neticesini cagrildigi yere dondur.
* */
return null;
}
}
}
KullaniciDetay ve YetkilendirmeBilgi snflar, veri klflamas (encapsulation) iin kullanlmaktadr. Ama, verilerin belli bir formatta btn olarak aktarlabilmesini salamaktr. Bu ama iin, C#'ta struct tipi deikenler de kullanlabilirdi ancak, biz
class'larla bu ii gerekletirdik.
pucu: struct, kk veri yaplarnn aktarlmasnda daha baarldr. Class ise referans bazl altndan,
byk verileri aktarrken tercih edilebilir bir klflama (encapsulation) yntemidir.
KullaniciVT snfnn birok metodu yeralmakta. nk, ele aldmz rnekte, btn ilemler bu snfa dmekte. Ancak snfn sadece rnekte gerekli olan ksmlarn
gerekledik, dier taraflarn basitlii korumak iin gereklemedik.
Bu metodlardan, KullaniciYetkilendir, dardan ald iki parametreyi kullanarak, SP$yetkilendir stored procedure'ne eriip veri katman ile bilgileri kontrol
edebilmektedir. Sonuta, yetkilendirme ilemi olursa, YetkilendirmeBilgi snfndan bir
nsha alnmakta ve bu nshaya doldurulan veriler (encapsulation) arld yere, gnderilmektedir. Yetkilendirme olmazsa, null deeri gnderilmektedir. Peki bu snf veritabanna hangi balant ifadesini kullanarak erimektedir?
Ek B: C# ve OOP Klavuzu
691
Ancak, bu ifadeleri kullanabilmek iin, ilgili isimuzaylarn (namespace) yklemeniz gerekir. Bu iten sorumlu ierik, using System.Configuration; deyimi ile, ilgili
temel snflarn (base class) bulunduu ktphaneyi projemizin paras haline getirdik.
Byk uygulamalarda, i katman, ierisinde yer verilen btn snflar ve methodlarla
kendi bana bir proje olarak ele alnr ve bir dll haline getirilerek kullanlr. Btn i
katmann iine alan bu yapya, Application Framework (Uygulama Omurgas) ad verilir.
Sunum Katmann Tasarlamak
692
Codebehind dosyas, Visual Studio tarafndan otomatik oluturulmakta. Bizim tm yapmamz gereken, butonu ift tklamak ve ierisine u kodlar eklemek:
// yetkilendirmeyi yapacak sinifi olusturalim
Verivizyon.KullaniciVT kullanici = new KullaniciVT();
//yetkilendirme sonucunu encapsulate edecek sinifi
//olusturalim
Verivizyon.YetkilendirmeBilgi yetkilendirmeBilgi= new
YetkilendirmeBilgi();
//YetkilendirmeBilgi.KullaniciYetkilendir() metodunu
// nasl ardmza ve
// ifrenin nasl zetinin ekildiine dikkat edin...
yetkilendirmeBilgi =
kullanici.KullaniciYetkilendir(TxtKullanici.Text,
Verivizyon.Bilesenler.Guvenlik.OzetCek(TxtSifre.Text));
if(yetkilendirmeBilgi != null){
LblSonuc.Text = "Merhaba <b>" +
yetkilendirmeBilgi.isim +
"</b> sitemize en son <b>" +
yetkilendirmeBilgi.sonGirisTarih +
Ek B: C# ve OOP Klavuzu
693
Grld zere, veritabanna dorudan bir eriim yer almamaktadr. Sadece, bir alt
katmanda oluturulan snflar nshalandrld (instantaiting) ve bu nesneler kullanld.
Uygulama ilk baladnda, ilgili mesaj kullanclarmza gstermek iin, u kodu da ekleyebiliriz:
private void Page_Load(object sender, System.EventArgs e)
{
if ( !IsPostBack)
LblSonuc.Text = "Ltfen Kullanici adi ve sifrenizi giriniz.";
}
ekil B.15:
Projenin alan
hali
EK C
1. Blm
1.
2.
3.
Birinci Anahtar: Bir tablodaki varlklar ayrt edici olarak bulunan ve tekrar etmeyen satra verilen addr. Yabanc Anahtar: Bir varla ait ek bilgilerin bulunduu
baka tablo(lar)da, varl temsil etmek zere bulunan birincil anahtar deerlerini
ieren stuna yabanc anahtar denir.
4.
5.
SQL Server Configuration Manager, SQL Server servislerinin balatlp durdurulmasn salar. letim sisteminde alan dier servisler de dahil servislerle ilgili daha
detayl bilgi Denetim Masas, Ynetimsel Aralar, Hizmetler ksmndan alnabilir.
6.
SQL Server ierisinde C# ile yazlm bir kod yer alabilir. Bu kodun almasndan
CLR birimi sorumludur.
7.
Tablo, view, stored procedure, trigger, constraint, indeks, stun, role, kullanc,
login, veritaban, kuruk, kontrat
8.
SQL Server 2 farkl sunucu seviyeli kullanc eriim modu destekler: Windows Only
ve Mixed Mode. Her biri konu ierisinde ele alnmtr.
9.
696
2. Blm
1.
2.
Bir veritabannda performans kayglarndan tr denormalizasyonlara bavurulacaksa, bu fiziksel model seviyesinde ele alnmaldr.
3.
Bir veritabannn boyunu ve artm miktarn ilk haldeki veri miktar ve zaman ierisinde eklenecek veri eilimi ile kestirebiliriz.
4.
5.
Bir proje bittikten sonra srekli olarak Trke karakter problemleri ile karlaldnda, veritaban ve sunucu seviyeli Collation ayarlarnn dzgn olarak yaplandrlmas gerekiyor demektir.
6.
7.
8.
DEFAULT nesnesi ile ide olan Constraint Default Constraint'dir. Rule nesnesi
Check Constraint'in ilevini yerine getirir. Check constraint ayn ilevi daha az efor
ile yerine getirebilir.
9.
Birim Btnl ile Domain Btnl arasndaki en temel fark, birim btnl
bir satra ait verilerin kendi ierisinde tutarl olmasn hedeflerken, domain btnl bir stuna ait verilerin kendi iinde uyumlu olmasn hedefler.
10. Bir tabloda en fazla bir tane Primary Key Constraint yeralabilir.
11. Unique Constraint Primary Key Constraint'e ramen bir tabloda, PK dnda tekil
olmas gereken stunlar olduunda kullanlr. UC null olabilir, PK olamaz. Bir tabloda birden fazla fazla UC olabilir ama sadece bir tane PK olabilir.
12. Bir tabloya Unique Constraint eklenmek istediinde, tabloda nceden varolan kaytlarn en fazla bir tanesinin NULL olmas ve btn deerlerin birbirinden farkl
olmas gerekir.
13. Bir tablonun bir stununa gelebilecek deerlerin, baka bir tablonun ierdii deerlerden olmasnn SQL Server tarafndan denetlenmesi isteniyorsa hangi Constraint
tanmlanmaldr?
14. Ya dorudan Management Studio nesne ynetim arayzleri ile veya u yap ile:
ALTER TABLE tablo_ismi
ALTER COLUMN sutun_ismi
SET DEFAULT default_deger | fonksiyon_ismi()
697
15. likili iki tablodan birindeki veriler silindiinde veya gncellendiinde, ilikili bulunduu tabloya deiikliin yanstlabilmesi iin basamakl veri btnl tanmnn yaplm olmas gerekir. Aksi halde veri deiimi hi yaplmaz.
16. Veri eklemekle ilgili bir ilem iin Constraint'ler zorluk karyorsa gerekletirilebilecek en pratik zm bir sre constraint'leri susturmak, verileri ekleyip tutarl hale
getirdikten sonra geri amaktr.
17. Rule ve Default nesnelerinin yapabilecei eyleri Constraint'ler yapabildii halde, SQL
Server bu nesnelere geriye doru uyumluluk iin destek vermeye devam etmektedir.
3. Blm
1. Sorgu belli kriterleri salayan verileri veritabanndan semek demektir. Genel olarak bir sorgu SELECT, FROM ve WHERE yan cmleciklerinden olutur.
2. Tekrarlayan satrlar indirgemek iin DISTINCT deyimi kullanlr.
3. Metin ve tarihsel sabitler tek trnak ierisine alnarak kullanlr. Saysal sabitler dorudan kullanlr.
4. oker karakterler(_, % ve [XYZ] ile [^XYZ]) sadece LIKE operatr ile kullanlabilirler, '=' ile kullanlamaz.
5. Tarihi istenilen formatta gstermek iin CONVERT fonksiyonu kullanlr.
6.
7.
Altsorgu bir SELECT ifadesi ierisinde baka bir SELECT ifadesi daha yer almasdr. Altsorgu ile ilgili [NOT] IN, [NOT] EXISTS gibi kelimeler ayrlm kelimeler
kullanlabilir.
8.
Normalizasyon amacyla farkl tablolara dalm verileri birletirip bir tek tabloymu gibi sorgulamak gerektiinde JOIN kullanrz.
9.
Inner Join ile Outer Join arasndaki temel fark; birletirmeye katlan her iki tabloda
sadece eleen kaytlar gelmesi gerektiinde INNER JOIN, tablolardan elemeyenlerin de sonuta yer almas gerektiinde de OUTER JOIN ifadeleri kullanlmasdr.
10. Full Outer Join'e birletirmeye katlan her iki tablonun da fazladan olan satrlarn
grmek gerektiinde ihtiya duyulur.
11. WHERE ile HAVING arasndaki fark, HAVING'in gruplanm veriler stnde filtreleme
yapmasna ramen, WHERE'in gruplamaya girmeden nce filtreleme yapmasdr.
12. CUBE, GROUP BY'dan sonra yer alan her stun iin iten da doru btn farkl
kombinasyonlardaki gruplamal fonksiyon sonularn bulur. ROLLUP ise, sadece
iten da doru sonular korele eder.
13. GROUP BY verileri gruplara ayrarak sorgulamak amacyla kullanlr. ORDER BY
ise verileri seme ilemi bittikten sonra sraya koymak iin kullanlr.
14. COMPUTE'in kullanld her yerde, COMPUTE BY ifadesi kullanlamaz.
COMPUTE BY ifadesi kullanabilmek iin, sorguda, ORDER BY deyimi ile birlikte,
ilgili stunun yeralmas gerekir. COMPUTE iin byle bir kstlama yoktur.
15. Bir tabloda yer alan btn kaytlar, loglamadan boaltmak iin TRUNCATE
TABLE deyimi kullanlr.
698
16. Bir tablodaki veriler, baka bir tablodaki veriler de kullanlarak gncellenmek durumunda iken oluturulan bir sorguda alt sorgu kullanlmazsa, hem MS Access hem
de MS SQL Server tarafndan kullanlamaz. nk veri gncelleme esnasnda yaplan JOIN ilemi bu iki VTYS iin farkldr.
17. CTE ve Tretilmi tablo birbirine ilev olarak ok benzer. Ancak CTE rekrsif sorgulara olanak tanmas ve baz birka ileme izin vermebilmesi nedeniyle tretilmi
tabloya nazaran daha ilevsel olabilmektedir.
18. PIVOT ve UNPIVOT satr ierisindeki deerlerden stun olutururken veya stunlar birer satr deeriymi gibi gstermek iin kullanlrlar.
19. Bir tablodaki satrlarda yer alan verilerden her birine baklarak ayr ayr ilemler
yapmak gerekiyorsa, Cursor tr bir deiken ile verilere erimemiz gerekir.
20. Transact-SQL Sunucu Cursor'ler ve API Sunucu Cursor'ler olmak zere iki farkl
Cursor tr iin SQL Server 2005 destek salar. Cursorler'den kilitlenme ve performans kayplar nedeniyle kanmak gerekir.
4. Blm
1.
View'ler karmak veritaban emalarn basitletirmek iin, gvenlik ve yetkilendirme maksatl, birim dnmleri gibi farkl grnmesi gerekli veri ihtiyacn karlamak maksatl, indekslenerek performans maksatl kullanlabilirler.
2.
WITH CHECK OPTIONS,baz satrlara eriimi olmayan bir view stnden kapsam dndaki verilere mdahale edilmesini engellemek amal kullanlr.
3.
view sadece kayt dndren ifadeler tayin etmek iin kullanlr. Oysa senonim, tablo,
stored procedure gibi bir ok trden nesne iin kalc takma ad tayin etmede kullanlabilir.
4.
Unique olmayan Clustered Indeks tanmlanabilir. Hatta bu genellikle doru kullanldnda performans artrc bir unsur olabilir.
5.
6.
Bir indeks iin fillfactor deeri verilmezse, Global Fillfactor deerleri(Sunucu veya
veritaban seviyeli default ayarlar) esas alnarak indeks oluturulur.
7.
Oluturulmu bir indeks'in fillfactor deerini ALTER INDEX REBUILD ile deitirmek mmkndr.
8.
9.
Clustred Indeks'ler ve daha nce indekslenmi stunlar, covering indeks iin, tekrardan indekslenmezler. Bu nedenle, geriye kalan iki stunun indekslenmesi yeterlidir.
CREATE INDEX idx_Covering ON tblUrun(urunKod,urunAd)
699
Sorgusu iin, idealdir. nk, covering indeks'tir ve daha da iyi bir durum, clustred
bir indekstir.
11. Bir indeks iin sralama verilmezse, anahtarlar artan srada(ASC) olarak varsaylr.
Bu nedenle de artan deerler eklinde sralanr.
12. Bir tablo sadece bir tek nonclustred indeks ieriyorsa, bir heap tanmlanr. Verilere,
bu heap stnden eriilir.
13. Database Tuning Advisor bir Sql Profiler trace dosyasn veya bizim belirlediimiz
bir sorguyu ele alarak bu sorgu ile ilgili iyiletirmeler nerir. SQL Profiler, SQL Server'a gelen ve altrlan ifadeleri takip etmek maksatl kullanlr. Bu takibat kaydedip daha sonra DTA ile analiz edebiliriz.
5. Blm
1.
2.
3.
Bir stored procedure'n kaynak kodunu WITH ENCRYPTION seenei ile tanmlanarak, bir bir stored procedure'n kaynak kodunu korumal hale getirebiliriz.
Encrypted Stored Procedure'ler SQL Profiler tarafndan da grntlenmezler ve
Replike edilemezler.
4.
Girdi parametreler, stored procedure'e deer aktarmak iin standart bir giri tanmlar. kt parametreler, zellikle stored procedure'n birden fazla deer dndrmesi
veya INTEGER tr dnda deer dndrmesi gerektiinde kullanlr. RETURN
deyimi, stored procedure sadece bir tek deer dndrecekse ve bu deer de
INTEGER ise kullanlabilir. Genellikle hata kodu, sorgudan etkilenen kayt gibi deerleri dndrmek iin kullanlr
5.
altrma plan, Procedure Cash denilen blgede tutulduu iin, karmak stored
procedure'ler genel olarak ikinci altrmada, ilk altrmaya gre daha hzl alrlar.
6.
Yerel Stored Procedure'ler oturuma zgdr. Ayn anda oturum aan fakl kullanclar birbirlerinin geici stored procedure'lerini gremezler.
7.
Bir stored procedure ilk almasnda hzl sonu getirmesine ramen takip eden almalarnda yava sonu getiriyorsa, stored procedure'n her altrlmada, yeniden
derlenmesi gerekiyor demektir. Bunun iin, stored procedure'n WITH
RECOMPILE seenei ile tanmlanmas performans artrc etkide bulunabilir
700
8.
Stored Procedure, derlenmitir. Yani altrma plan procedure cash denilen hafza blgesinde tutulmaktadr. lk altrmadan sonraki altrmalarda daha hzl netice verir. Script
ise, hi bir derlemeye tabi tutulmaz. Her altrlmasnda btn ilemler batan ele alnr.
9.
10. Tablo gibi ve stun gibi olmak zere ilevsel olarak iki farkl Kullanc Tanml
Fonksiyon vardr.
11. Bir view parametre alamaz. Parametre alacak view gereksinimi iin Tablo gibi davranan Kullanc Tanml Fonksiyonlar kullanlabilir.
12. Fonksiyonlar, yan etkide bulunamadklar iin sistemdeki verileri deitiremezler.
Veritabanna veri ekleme ve silme gibi ilemler iin veritaban u noktas olarak
fonksiyonlar deil, stored procedure'ler kullanlr.
13. T-SQL dnda CLR dillerinde de KTF programlanabilir. zellikle CPU'yu youn
kullanacak ilemler iin tercih etmek
14. Bir tablo ile bir fonksiyonu, ayet tablonun bir stununu fonksiyon parametre olarak alyorsa, APPLY operatr yardm ile birletirebiliriz. Ama fonksiyon tablodan
bamsz tablo tipi sonu dndryorsa, APPLY operatr olmadan, JOIN ifadesi
ile birletirme yaplabilir.
15. EXEC() ve sp_executesql arasndaki fark, sp_executesql'in altrma plan optimize
edilebilir ifadeler altrmak iin uygun olmasdr. Bir veritabanndaki btn indeksleri yeniden derleyecek bir program yazmanz gerekse plan derleme gereksinimi
olmadndan EXEC() fonksiyonu ama dinamik olarak oluturulmas gereken ve
ok sayda verilerin olduu bir tabloyu sorgulayan bir ifadeyi parametrik altrmak
gerekiyorsa sp_executesql stored procedure'n tercih etmek mantkl olacaktr.
16. Bir SP ierisinde TRY-CATCH yaps kullanlmayan noktada hata meydana gelirse hata ele alnamaz ve program kullancsna programn almasnn krlmas olarak yansr.
17. RAISERROR fonksiyonu ile bir hata ortama frlatldnda balant kopuyorsa, hatann seviyesi 21 veya daha yukardaki bir deer ile frlatldn gsterir.
6. Blm
1.
2.
3.
XML veri tipini herhangi bir metin tr(meslea NVARCHAR(MAX) )veri tipinden
ayran en nemli fark binary olarak parse edilmi olmas ve bu nedenle de eitli geerlilik denetlemelerine ve sorgulamalara tabi tutulabiliyor olmasdr.
701
4.
birincil ve ikincil indeks tanmlanabilir. XML stun stnde indeks tanmlamas, ait
olduu tablonun birincil anahtar olmasn ve stun stnde bir birincil XML indeks tanmlanm olmasn gerektirir.
5.
XML bir veriyi sadece veritabannda tutmak iin ilikisele evirmek, gereksiz ilem
maliyeti getirdii iin tercih edilmez.
6.
7.
OPEN XML, XML verileri ilikisel domaine dntrmede kullanlr. ve yardmc sistem
stored procedure'leri sp_xml_preparedocument ve sp_xml_removedocument'dir.
7. Blm
1.
Daha kk paralara ayrlamayan bir dize ilemin bir btn olarak ele alnmasn
salayan yapya transaction denir.
2.
Harici Transaction: Programc tarafndan BEGIN TRAN ile balatlan ve programc veya sistem tarafndan bitirilebilen, genel manada kastedilen transaction
modudur.
Dahili Transaction: SQL Server'in belli ifadelerden nce otomatik transaction balatmas eklindeki mod olup, bu moda geirme iini kullancnn veya programcnn
yapmas gerekir. Bu modda, her bir transaction aldnda, sonlandrma ii kullancya braklmtr.
3.
Hayalet Okuma(fantom-read)
4.
Read Uncommited
Read Commited
Repeatable Read
Serialisible
5.
ki proses veya kullancdan her biri fakl ilemler yaparken aslnda karlkl olarak
dierinin bir sonraki admn tkayan ve bu nedenle de her ikisi de ilerleyemeyen
proseslerin iinde bulunduklar duruma dead lock denir.
702
6.
sp_lock ve sp_who sistem stored procedure'leri kullanlarak, kaynaklardan hangilerini kimler tarafndan kilitlendii grntlenir. Ardndan kilitleme yapan
transaction ksm gzden geirilir.
7.
stediimiz zaman devreye sokamayz. Sadece belli veri deiimlerinde(EklemeSilme veya Gncelleme annda) devreye girerler
8.
9.
UPDATE ve DELETE ilemlerinin her ikisi iin de devreye girecek bir AFTER
trigger' yazlabilir. Ayn ekilde bir INSTEAD OF trigger' da yazlabilir. Ancak bu
durumda, UPDATE ve DELETE ilemlerinden herhangi biri iin ikinci bir
INSTEAD OF trigger' tanmlanamaz.
10. Trigger'lar da Constraint'ler gibi belli bir sre iin devre d braklabilirler.
Constraint'lerden farkl olarak, trigger pasif iken gerekletirilen ilemleri, trigger
aktif edildiinde denetleyemez. Bunun iin,
ALTER TABLE tablo_ismi
DISABLE TRIGGER trigger_ismi | ALL
yaps kullanlr.
11. Bir tablo stnde INSTEAD OF trigger varsa, ilk olarak bu tepkimeye girer. Arkasndan Constraint tepki verebilir. Constraint'ten sonra, tanml bulunan
trigger'lardan biri devreye girer. Ancak hangisinin nce girecei belirlenemez. Bu
nedenle, en son tepkimeye girecek nesne iki INSERT tirgger'ndan biridir ancak
hangisi olaca garanti edilemez. Garanti etmek iin, bir tek AFTER INSERT
trigger' ierisinde bu iki trigger'n uygun srada arlmas gerekir.
12. AFTER UPDATE trigger' devreye girdiinde, hem Inserted hem de Deleted szde
tablolarn oluturur.
8. Blm
1.
2.
3.
703
4.
5.
6.
Teorik olarak, CLR bileenlerini T-SQL'e ramen kullanmay CPU'yu youn olarak
kullanan ilemler, .NET ktphanesine gereksinim duyan programlar, dk seviye
veri ilemi yapan ve veritaban seviyeli veri eriimleri dndaki ilemlerde kullanlr.
7.
Genelde Cursor yaplarndan kanmak iin ve sistemde hali hazrda bulunmayan grupsal
fonksiyonlar iin grupsallar kullanmak gerekir. SUM fonksiyonunu biz yazdnzda daha
hzl almaz. nk gerek SUM fonksiyonu alt seviyeli olarak gereklenmitir.
9. Blm
1.
Uzaktaki bir SQL Server'daki verileri hzl bir balant stnden, yereldeki SQL
Server'in ierdii verilerle birlikte sorgulamanz gerekiyorsa bal sunucu tanmlayarak bu tanmlama stnden sorgulamak yeterli olacaktr.
2.
Metin dosyalarn, Excel ve Access dosyalarn SQL Server'da birer tablo gibi sorgulayabiliriz. Bunun iin OLE-DB Driver'larn dinamik olarak ykleyecek cmlecikleri yazarz veya
bir bal sunucu tanmlayp bu sunucu stnden bu kaynaklar sorgulayabiliriz.
3.
Programlanabilir elerden Stored Procedure'ler ve Skaler sonu dndren kullanc tanml fonksiyonlar bir XML Web Servisi metodu olarak darya alabilir.
4.
Bir endpoint XML Web Servisi olarak yaplandrld ise, platform bamsz olarak,
XML Web Servisi tketebilen her trl uygulama balanabilir.
5.
Service Broker mimarisini gereklemek iin Tip, Contract, Mesaj, Kuyruk, Servis
Program, Servis, Route gibi bileenler kullanlr.
6.
Service Broker, SOA temelli mimariyi veritaban seviyesinde gereklemek gerektiinde kullanlr.
10. Blm
1.
ADO.NET 2 eit veri eriimine olanak salar: Bal Mod ve Kopuk mod.
2.
Ayn anda iki tane DataReader bir tek connection stnden veritabanna ADO.NET
2.0'dan itibaren MARS destei sayesinde eriebilir. Ayr iki Command nesnesi ile.
3.
Bal modda bir veritaban eriimi kodlamak iin 1. Connection nesnesinin Open()
metodu, 2. Command nesnesinin dnecek deer trne uygun bir metodu (Tabular
sonu iin ExecuteReader()) ve son olarak SqlDataReader stnden herhangi bir
satra eriebilmek iin Read() metodu kullanlr.
4.
5.
Veri balama, veritabanndan gelen verileri kullanc arayzlerine ilintilendirme sistematii demektir.
6.
ASP.NET, Hzl Uygulama Gelitirme yaklamna SqlDataSource bileeni ile destek verir.
EK D
706
EK E
CD KULLANIM KILAVUZU
CD Kullanm Klavuzu
Kitapta anlatlan rnekleri en azndan kstl olarak altrabilmeniz iin lisanslama creti gerektirmeyen aralardan bir ksmn CD ierisinde bulabilirsiniz.
Aralar
Kitapta anlatlan rnekleri en azndan kstl olarak altrabilmeniz iin gerekli aralardan bir ksmn CD ierisinde bulabilirsiniz.
SQL Server Express Edition
708
ekil E.1:
CD ierisinde yer
alan veritabanlar
ve ilevleri
Veritaban Ad
Veri Dosyas Ad
lev
Dukkan veritaban
2000_dukkan_mdf_
ldf.zip
Dukkan Veritaban
2008_dukkan_data_
mdf.zip
Adventureworks
adventureworks.zip
Microsoft'un SQL Server 2005 iin rnek bir bisiklet paras reticisi veritaban Adventureworks' bu dosya ierisinde bulabilirsiniz.
Dikkat: Sktrlm olan bu dosyalar, SQL Server'a attach edebilmek iin ncelikle diskinizde bir yere
amanz gerekir.
SQL Server Veritaban Srm Ykseltme Klavuzu
Eski bir srmde hali hazrdaki veritaban sisteminizi SQL Server 2008'e aktarma konusunda CD\Araclar\SQL2008UpgradeTechRef.pdf dokmanna gz atabilirsiniz.
alma Dkmleri
Her bir blme ait SQL ifadeleri dndaki uygulama rneklerini, baz altrmalar yapabilmeniz iin gerekli ek bilgileri CDROM\CalismaDokumleri klasr altnda bulabilirsiniz.
Kaynaka
Addison Wesley, A First Look at Microsoft SQL Server 2005 for Developers
www.verivizyon.com
www.csharpnedir.com
www.microsoft.com/sql
www.sswug.org
www.sqlservercentral.com
www. sqlnedir.com
Dizin
@@CONNECTION, 79
@@ERROR, 373, 379, 380, 390
@@IDENTITY, 135
@@ROWCOUNT, 390, 471
@@SERVERNAME, 79
@@TRANCOUNT, 444
@@VERSION, 79
1-N, 100, 101
A
Activity Monitor, 464, 465
ADD, 114, 147, 160, 162, 163, 164, 165, 168, 170,
267, 291, 390, 404, 408, 422, 424, 476, 503, 506,
531
Ad-Hoc, 376, 378, 548, 553, 592, 664
Aggregate, 77, 137, 214, 536, 537
AGGREGATE, 77, 214, 539
Alias, 128, 178, 203
ALTER, 70, 72, 73, 86, 113, 114, 115, 116, 117, 118,
119, 120, 121, 123, 147, 148, 159, 160, 162, 163,
164, 165, 168, 170, 172, 256, 258, 259, 261, 267,
291, 299, 300, 301, 302, 304, 306, 315, 353, 355,
360, 361, 362, 385, 390, 404, 406, 407, 408, 422,
424, 445, 446, 448, 457, 458, 470, 473, 476, 483,
484, 488, 489, 490, 503, 504, 505, 506, 528, 531,
552, 573, 587, 644, 645, 646
Anahtar, 47, 49, 87, 100, 104, 470, 476
AND, 165, 176, 181, 182, 183, 184, 193, 218, 238,
245, 274, 285, 286, 292, 304, 307, 311, 320, 321,
337, 350, 351, 352, 353, 355, 357, 360, 363, 481,
629, 667
ANSI SQL-92, 40
ANSI SQL-99, 211
API, 115, 334, 339, 340, 364, 497, 591, 594, 634, 668
APPLY, 387, 395, 396, 397, 413, 416, 417
AS, 79, 80, 120, 131, 141, 147, 163, 166, 178, 185,
192, 197, 198, 203, 207, 208, 215, 226, 227, 229,
230, 232, 233, 234, 235, 237, 238, 239, 240, 253,
254, 256, 258, 260, 261, 262, 263, 266, 268, 269,
298, 324, 331, 335, 336, 349, 350, 351, 352, 353,
354, 355, 356, 357, 360, 361, 362, 363, 364, 365,
366, 370, 371, 372, 377, 378, 380, 381, 384, 385,
389, 390, 391, 392, 393, 394, 395, 396, 397, 404,
412, 413, 424, 429, 434, 435, 436, 445, 446, 473,
475, 476, 477, 478, 479, 480, 481, 484, 485, 487,
488, 501, 524, 535, 580, 581, 582, 584, 585, 587,
600, 624, 651
ASC, 75, 176, 184, 227, 290
ASCII, 72, 129, 130, 131, 137, 191, 666
ASSEMBLY, 333, 498, 499, 500, 503, 504, 505, 506,
507, 524
AVG(), 77, 78
B
BETWEN.... AND...., 184
BIGINT, 394, 395, 473, 481
BIT, 321, 380, 394
Birincil Anahtar, 47, 87, 100, 383, 470
Books Online, 60, 82, 119, 187, 191, 207, 209, 215,
333, 347, 541, 551
BREAK, 332, 371
BULK, 119, 412, 429, 655, 656
Btnlk, 156, 169
C
CASCADE, 85, 155, 169, 170, 480
CASE, 222, 330, 331, 343
CHECK, 155, 161, 164, 165, 166, 172, 256, 261, 262,
263, 264, 408, 531
CHECKPOINT, 465
cmd, 56, 314, 346, 462, 517, 519, 520, 524, 530, 593,
596, 597, 598, 600, 601, 602, 603, 607, 609, 610,
612, 613, 614, 615, 624
Collation, 120, 130, 131
COMMIT, 442, 443, 444, 445, 446, 448, 449, 454,
457, 458, 553
Compiling, 348
COMPUTE, 222, 249, 254, 255, 334
COMPUTED COLUMN, 147, 290
Concatenation, 190
Configuration Manager, 54, 87
CONTINUE, 333, 585
Contract, 572, 575
CONVERT, 80, 192, 193, 363, 384, 385, 401, 402, 463
Corelated, 198
712
COUNT(), 77
CREATE, 70, 72, 73, 82, 83, 84, 108, 109, 111, 112,
115, 116, 118, 134, 135, 139, 141, 142, 143, 144,
145, 146, 148, 149, 159, 160, 161, 162, 163, 164,
166, 168, 208, 231, 235, 253, 254, 255, 256, 258,
260, 261, 262, 263, 268, 269, 289, 290, 292, 293,
294, 295, 296, 297, 298, 299, 301, 303, 304, 306,
307, 315, 323, 349, 350, 351, 352, 354, 356, 357,
360, 361, 363, 365, 370, 377, 378, 380, 383, 384,
385, 389, 390, 391, 392, 393, 394, 395, 403, 404,
412, 422, 423, 424, 425, 429, 443, 444, 445, 448,
470, 472, 473, 475, 476, 477, 478, 479, 480, 481,
483, 484, 485, 486, 487, 498, 499, 500, 501, 524,
535, 539, 540, 544, 552, 574, 575, 576, 577, 580,
581, 582, 584, 585, 588, 596, 600, 613, 624, 644,
651, 667
CROSS APPLY, 396, 397, 416, 417
CROSS JOIN, 204, 208, 209, 213
CTE, 225, 226, 227, 228, 229, 230, 234, 247, 249, 395
CUBE, 220, 221, 222, 249
kt Parametre, 361
D
DAC, 61, 62
Dal Seviye, 277
Database Tuning Advisor, 308, 310, 314, 316
DBCC, 122, 123, 124, 304, 305, 307, 444, 453, 505
DBCC SHRINKDATABASE, 123, 124
DBCC SHRINKFILE, 123
DEADLOCK, 467
DEALLOCATE, 335, 337, 338, 340, 371
DECLARE, 318, 319, 321, 323, 324, 327, 328, 332,
333, 334, 335, 336, 338, 340, 361, 362, 363, 364,
370, 371, 372, 389, 390, 394, 402, 418, 429, 473,
481, 485, 512, 544, 578, 580, 582, 584, 585
Default, 47, 108, 113, 114, 154, 155, 156, 157, 158,
159, 162, 163, 164, 167, 170, 172, 173, 184, 192,
312, 350, 357, 451, 549, 661, 696, 697
DELETE, 71, 73, 77, 86, 118, 148, 155, 169, 170, 226,
227, 241, 244, 245, 246, 247, 259, 284, 307, 325,
326, 327, 338, 341, 342, 362, 377, 378, 443, 448,
469, 470, 471, 472, 473, 477, 478, 479, 480, 481,
491, 514, 517, 527, 552, 652, 668
DENY, 82, 84, 85, 353
DESC, 71, 75, 176, 184, 185, 186, 227, 238, 240, 290,
337, 339
E
ENCRYPTION, 256, 258, 353, 355, 389, 473, 588
Enterprise Manager, 114, 121, 122, 123, 150, 164,
167, 170, 298, 483, 488, 548
Entity, 155
Executing, 348
EXISTS, 176, 199, 200, 212, 329, 360, 377, 476, 477,
478, 479, 481
Explict, 444
Extend, 63, 64, 276, 464
F
FETCH, 335, 336, 338, 340, 371, 448
FILEGROWTH, 109, 111, 112, 114, 121, 267
FILENAME, 109, 111, 112, 114, 267
FILLFACTOR, 284, 287, 295, 296, 297, 300, 303, 306
Filtreli indeks, 294
Filtreli ndeks, 282, 293, 294
FLOAT, 133, 160
Fonksiyon, 48, 79, 179, 191, 192, 214, 222, 382, 388,
392, 393, 396, 494, 497, 500, 507, 528, 529, 530,
534
For, 409, 471, 473
FOR BROWSE, 334
FULL [OUTER] JOIN, 208
Dizin
G
GAM, 64
Geography, 564
Geometry, 564
GETDATE(), 79, 80, 81, 82, 95, 132, 155, 162, 192,
235, 350, 351, 352, 353, 355, 357, 363, 380, 383,
388, 390, 481, 485, 600
Girdi Parametre, 356
Global Deikenler, 322
GO, 73, 79, 81, 149, 164, 208, 253, 254, 263, 350,
351, 353, 355, 356, 357, 360, 361, 362, 363, 377,
378, 380, 476
GOTO, 333, 381, 382
GRANT, 82, 83, 84, 85, 116, 353, 448
GROUP BY, 176, 198, 212, 216, 217, 218, 219, 220,
221, 222, 249, 256, 258, 266, 330, 331, 337, 338,
339, 401, 530, 536, 539, 540
GROUPING, 222, 540
H
HASH, 210
HAVING, 176, 218, 219, 249, 338, 666
Hesaplanm Alan, 147, 424
HierarchyID, 139, 228, 555, 556
Hiyerarik Veri, 100
HOLDLOCK, 452, 466
I
IDENTITY, 134, 135, 208, 238, 247, 260, 261, 265,
268, 269, 326, 383, 384, 412, 470, 485, 581, 584
IF ... ELSE, 328
IN, 176, 195, 196, 212, 232, 233, 234, 235, 236, 239,
243, 295, 300, 337, 371, 388, 394, 433
Indeks, 47, 51, 63, 64, 65, 122, 154, 159, 161, 252,
259, 260, 261, 266, 271, 272, 273, 274, 275, 276,
277, 278, 279, 280, 281, 283, 284, 285, 286, 289,
290, 291, 292, 293, 294, 295, 297, 298, 299, 301,
302, 304, 306, 307, 310, 311, 313, 315, 316, 402,
422, 423, 463, 464, 698
INDEXDEFRAG, 304
INNER JOIN, 176, 204, 205, 206, 210, 213, 218, 350,
355, 356, 357, 377, 391, 393, 395, 434, 475, 476,
478
INSERT, 73, 74, 75, 84, 86, 118, 135, 139, 146, 149,
155, 156, 164, 227, 231, 235, 241, 242, 243, 244,
246, 259, 260, 261, 263, 264, 269, 284, 325, 326,
713
327, 337, 351, 360, 380, 384, 385, 388, 392, 393,
394, 406, 407, 412, 416, 419, 429, 443, 444, 448,
449, 469, 470, 471, 472, 473, 475, 476, 478, 479,
480, 481, 485, 488, 491, 514, 528, 552, 553, 580,
581, 584, 596, 607, 610, 615, 635, 655, 656, 668
INSTEAD OF, 259, 469, 470, 471, 473, 480, 481, 482,
483, 489, 491, 527
INT, 86, 116, 135, 139, 149, 172, 208, 231, 263, 264,
319, 327, 332, 333, 356, 360, 363, 364, 365, 372,
377, 378, 383, 384, 385, 389, 390, 391, 393, 395,
403, 412, 422, 424, 429, 485, 512, 524, 534, 535,
600, 613, 651, 655
Intermediate, 277, 496
likisel Veritaban, 39, 40, 41, 42, 53, 87, 96, 271,
281, 695
Katman, 50, 686
J
JOIN, 112, 118, 176, 202, 203, 204, 205, 206, 207,
208, 209, 210, 217, 218, 219, 222, 229, 230, 232,
233, 234, 243, 244, 245, 256, 258, 260, 284, 285,
331, 350, 351, 352, 353, 355, 356, 357, 365, 377,
391, 392, 393, 395, 396, 405, 433, 475, 476, 477,
478, 479, 481
L
LEFT [OUTER] JOIN, 176, 207
LIKE, 131, 165, 176, 180, 187, 188, 189, 190, 274,
314, 315, 357, 524, 597, 607, 632
LOG ON, 109, 111, 112
M
Macar Notasyonu, 71, 72
Management Studio, 49, 55, 56, 60, 69, 82, 87, 100,
108, 109, 114, 115, 117, 121, 122, 123, 124, 125,
143, 144, 145, 150, 151, 159, 161, 167, 171, 172,
268, 299, 302, 305, 309, 318, 350, 457, 458, 464,
470, 474, 475, 487, 500, 524, 548, 549, 553, 583,
639, 640, 644, 646, 647, 653, 657
Master, 61, 124, 587, 661
MAX(), 77, 233
MAXSIZE, 109, 111, 112, 114, 121, 267
MERGE, 210, 266
MIN(), 77, 233
714
Microsoft Search, 54
Mixed Extend, 63, 64
Mode, 49, 67, 68, 463, 663
Model, 90, 95, 102, 105, 119, 661
MODIFY, 114, 121
MONEY, 235, 318, 319, 324, 390, 444, 445, 446
MSDTC, 553
mssqlsystemresource, 62
N
NAME, 109, 111, 112, 114, 121, 267, 274, 500, 501,
524, 535, 539, 544, 576, 587
NEWID(), 135, 139, 140, 187, 326
N-N, 101, 102
NOLOCK, 450, 453, 455, 466
NORECOMPUTE, 300, 302
northwind, 113, 476, 549, 552, 553, 554, 595
NOT, 71, 73, 134, 143, 144, 145, 147, 148, 149, 159,
176, 181, 183, 195, 199, 200, 208, 212, 244, 245,
263, 268, 329, 337, 357, 363, 403, 422, 444, 476
NOT EXISTS, 176, 199, 200, 212, 244, 245, 329, 476
NOT IN, 195, 212
NULL, 72, 73, 78, 99, 119, 128, 134, 139, 142, 143,
144, 145, 147, 148, 149, 154, 156, 159, 161, 164,
165, 166, 167, 169, 170, 183, 184, 191, 206, 208,
214, 216, 220, 228, 229, 230, 233, 245, 258, 260,
263, 268, 298, 304, 337, 354, 357, 360, 363, 377,
378, 380, 383, 385, 389, 397, 401, 403, 417, 422,
432, 435, 436, 444, 473, 512, 537, 542, 581, 584,
629, 645
O
OLAP, 45, 51, 53, 61, 231, 235, 283, 284, 650
OLTP, 45, 51, 61, 283, 284, 287
OPENROWSET, 79, 412, 429, 551, 553, 554
OR, 164, 165, 166, 181, 182, 195, 243, 321, 337, 360,
363, 385, 478, 585, 629, 665, 666, 667, 668
ORDER BY, 75, 79, 176, 184, 185, 186, 212, 216, 217,
218, 227, 236, 237, 238, 239, 240, 246, 249, 254,
255, 275, 297, 330, 337, 338, 339, 340, 372, 401,
409, 411, 435, 530, 535
osql, 56, 57, 323, 664
P
PAD_INDEX, 284, 287, 295, 296, 297, 300, 303, 306
PAGLOCK, 466
Parametre, 57, 110, 137, 345, 356, 359, 360, 362,
374, 375, 402, 488, 520, 549, 551, 554, 595, 598
Parsing, 348
Persist, 141
PFS, 64
PI(), 179, 388
PIVOT, 225, 231, 232, 233, 234, 235, 247, 249, 331,
371
PL/SQL, 40
Point, 137, 447, 497, 564
Polygon, 564
PRINT, 323, 324, 329, 333, 380, 381, 384, 385, 484,
487, 518, 519, 581, 584
PROCEDURE, 47, 323, 350, 355, 377, 378, 380, 382,
384, 385, 576, 580, 581, 582, 584, 585, 587, 667
pubs, 73, 76, 77, 142, 253, 351
Q
Queue, 365, 572, 576
R
RAD, 633
RAISERROR, 373, 375, 376, 377, 378, 379, 381, 382,
398, 476, 477, 478, 479, 519
READ COMMITTED, 466
READ UNCOMMITTED, 466
READPAST, 466
RECOVERY, 118
Recursive, 482, 483
Rekrsif, 225, 228, 229, 230, 393
REPEATABLEREAD, 466
REPLACE(), 388
Resource, 463
REVOKE, 82, 85, 448
RIGHT [OUTER] JOIN, 176, 207
RMO, 647
ROLLBACK, 442, 443, 444, 445, 446, 447, 449, 453,
455, 463, 465, 467, 472, 476, 477, 478, 479, 482,
484, 553
ROLLUP, 221, 222, 249
Root, 407
ROWCOUNT, 246, 326, 337, 338, 343, 352, 380, 390,
394, 471, 582, 585
Dizin
ROWLOCK, 466
Rowset, 79
RULE, 47, 154, 166, 173, 323, 350
S
sa, 67, 79, 80, 167, 168, 169, 255, 354, 372, 445, 498,
595, 604, 625, 626, 627, 628, 635, 663, 664, 667
SAC, 58, 59, 583
Satr, 45, 46, 47, 78, 97, 129, 139, 145, 155, 175, 214,
237, 238, 240, 280, 335, 342, 448, 449, 455, 466,
618, 674
SCHEMABINDING, 256, 258, 259, 297, 298, 424, 505
Seme, 39, 48, 69, 180
SERIALIZABLE, 452, 454, 455, 457, 466, 467
Serialisible, 452
Service Manager, 54
SET, 76, 119, 120, 123, 135, 139, 169, 170, 184, 191,
243, 244, 246, 269, 299, 301, 302, 319, 320, 321,
330, 337, 338, 343, 352, 353, 355, 356, 357, 360,
361, 362, 363, 370, 371, 372, 384, 385, 394, 402,
411, 418, 419, 420, 421, 445, 446, 453, 454, 455,
457, 458, 464, 465, 467, 473, 475, 483, 485, 498,
499, 503, 504, 512, 544, 553, 573, 580, 585, 609,
627, 629, 635
Seyrek Stun, 142
Seyrek Tablo, 142
SGAM, 64
SHRINK, 118, 119, 123
SIN(), 388
SIZE, 109, 111, 112, 114, 121, 267
Skaler, 79, 270, 388, 390, 391, 511, 518, 529, 530,
533, 537, 598, 602
Skaler Fonksiyon, 79, 270, 390
SMALLDATETIME, 192, 380
SMO, 602, 639, 640, 641, 642, 644, 645, 646, 647,
648, 650, 655
Snap-shot, 454
sp_catalogs, 550
sp_columns_ex, 550
sp_executesql, 369, 372
sp_foreignkeys, 550
sp_helpdb, 114, 120, 347, 351, 388
sp_helptext, 257, 258, 346, 347, 350, 388, 474
sp_tables_ex, 550
SQL enjeksiyonu, 349, 666
Sql Profiler, 459, 468
715
T
Tablo, 40, 41, 42, 45, 51, 57, 61, 64, 66, 79, 87, 90,
97, 103, 110, 118, 125, 127, 129, 130, 133, 136,
137, 139, 145, 148, 153, 156, 166, 171, 177, 180,
181, 188, 191, 192, 193, 204, 206, 209, 211, 214,
226, 230, 233, 246, 257, 270, 272, 273, 279, 281,
284, 290, 304, 310, 317, 320, 321, 325, 326, 327,
340, 342, 348, 370, 374, 375, 378, 382, 383, 387,
391, 392, 393, 395, 396, 402, 413, 419, 431, 432,
443, 446, 452, 462, 463, 464, 466, 467, 471, 472,
479, 488, 494, 497, 499, 502, 513, 514, 518, 520,
527, 529, 533, 534, 537, 541, 549, 550, 551, 554,
572, 593, 595, 597, 598, 602, 618, 623, 626, 629,
630, 634, 640, 656, 664, 666, 672, 674, 677, 686
TABLOCK, 466
TABLOCKX, 466
tempdb, 61, 111, 148, 149, 300, 449, 459, 661
TEXT, 74, 95, 136, 137, 146, 293, 380, 401, 651
THEN, 222, 330, 331
716
U
Ulama, 74, 137
UNION, 204, 210, 211, 212, 227, 228, 229, 230, 262,
263, 264, 395, 554, 666
UNIQUE, 161, 162, 238, 278, 281, 290, 291, 298, 301,
315, 401
UNIQUEIDENTIFIER, 135, 578, 580, 582, 585
Uniform Extend, 63
UPDATE, 71, 73, 76, 86, 118, 139, 140, 146, 155, 169,
170, 184, 226, 227, 241, 243, 244, 246, 259, 261,
284, 308, 325, 326, 330, 341, 342, 349, 360, 363,
394, 418, 419, 420, 421, 443, 445, 446, 448, 449,
453, 454, 456, 457, 458, 464, 467, 469, 470, 471,
472, 473, 475, 478, 479, 480, 481, 488, 491, 514,
552, 596, 609, 627, 629, 635, 652, 668
UPDLOCK, 466
USE, 56, 58, 70, 73, 74, 76, 77, 82, 115, 120, 253,
267, 269, 300, 308, 311, 323, 340, 342, 351, 406,
453, 457, 458, 476, 580, 587, 596, 600, 656
USER, 48, 82, 115, 116, 118, 372, 384, 485
User Defined Type, 542
V
VARCHAR (MAX), 95, 146, 296, 402, 425
W
WHEN, 222, 330, 331
WHERE, 75, 76, 77, 118, 139, 176, 180, 181, 182,
183, 184, 185, 187, 188, 189, 190, 193, 195, 196,
197, 198, 199, 200, 201, 202, 203, 204, 209, 216,
217, 218, 219, 226, 227, 228, 229, 230, 238, 239,
243, 244, 245, 247, 249, 253, 254, 261, 273, 274,
279, 281, 284, 285, 286, 292, 304, 307, 311, 314,
315, 316, 326, 327, 330, 337, 338, 342, 350, 351,
352, 353, 354, 355, 356, 357, 360, 363, 365, 372,
375, 377, 378, 388, 389, 390, 391, 393, 394, 395,
409, 411, 415, 419, 420, 421, 423, 425, 433, 434,
445, 446, 457, 458, 475, 477, 478, 479, 481, 485,
517, 524, 530, 573, 578, 579, 597, 600, 602, 603,
607, 609, 627, 628, 629, 632, 635, 651, 652, 665
WHILE, 317, 332, 333, 336, 338, 371, 394, 582, 585
WITH CHECK, 256, 261, 262, 264, 315
Workload, 310, 312
X
XACT_ABORT, 553
XLOCK, 466
XQuery, 41, 53, 138, 401, 402, 408, 409, 411, 412,
413, 414, 415, 416, 418, 419, 420, 423, 425, 439,
484, 584
XSD, 138, 401, 402, 403, 404, 405, 406, 408, 425,
433, 439, 484, 574
Y
Yn, 323, 443
Z
Zamanam, 465