Вы находитесь на странице: 1из 283

YAZILIM UZMANLII

Uygulamal Yazlm Projeleri

Okan Tekeli

Editr C. Banu ncolu


Uygulamal Yazlm Projeleri
Okan Tekeli

Editr: C. Banu ncolu

Kapak Tasarm: Melih Sancar

Grafik Tasarm: Tuna Erkan

Grafik Uygulama: Soner Ik

Genel Yayn Ynetmeni: Mehmet mleki

1. Basm: ubat 2008

Rev: 00

Bilge Adam Yaynlar: 22

Eitim Yaynlar Dizisi:22

ISBN: 978-605-5987-20-6

Copyright 2007, Bilge Adam Bilgisayar ve Eitim Hizmetleri San. ve Tic. A..

Eserin tm yayn haklar Bilge Adam Bilgisayar ve Eitim Hizmetleri San. ve Tic. A..ye aittir. Yaynevinden yazl izin
alnmadan ksmen ya da tamamen alnt yaplamaz, hibir ekilde kopya edilemez, oaltlamaz ve tekrar yaymlanamaz.
Bilge Adamn rencilerine cretsiz armaandr, para ile satlamaz.

Bilge Adam Bilgisayar ve Eitim Hizmetleri San. ve Tic. A..


19 Mays Mahallesi, 19 Mays Caddesi, UBM Plaza, No: 59-61, Kat: 4-7; ili, stanbul
Telefon: (212) 272 76 00 (212) 217 05 55 Faks: (212) 272 76 01
www.bilgeadam.com - info@bilgeadam.com
indekiler
Proje 1: herkesburada.com 3

Grmeler3

Ahmet Becerikli (Proje Sahibi)3

Uygulama Analizi3

Uygulama Tasarm4

Veritaban Tasarm4

Arayz Tasarm5

Proje 2: Otobs Otomasyonu 107

Genel Bak107

Grmeler107

zgr Koluksa (Genel Mdr)107

Seluk Huysuz (Mteri Hizmetleri Mdr)107

Baki okbilmi (Personel Sorumlusu)107

Vildan Parasever (Muhasebe Sorumlusu)108

Uygulama Tasarm108

Veritaban Tasarm108

Arayz Tasarm122

Uygulama166

Proje 3: DVDDukkani.com169

Grmeler169

Hsamettin Beceriksiz (Proje Sahibi)169

Uygulama Tasarm169

Veritaban Tasarm169

Arayz Tasarm172

Ek - A: Teknik Terimler Szl237


nsz
Yazlan bu proje kitab, eitiminiz boyunca greceiniz konularn toplu bir ekilde uygulamalarn
yapabileceiniz, size temel konularda pratik kazandrmay hedefleyen, yol gsteren projelerden
oluuyor. Amacmz sizi oyuna hazr birer oyuncu olarak karmak. Bu kitaptaki projeler ierisinde
bir projeye balanaca zaman Nereden balamal, nasl ilerlemeli? sorularna cevap bulacak-
snz.

Elinizdeki bu projeler derste ilenmeyecek, konu bitiminde sizlere tan altna elinizi koymanz iin
yol gsterecek. Proje kitab temelde eitim odakl ilerlemekte, verilen senaryolara destek amal
yazld. lgili konu bittii zaman projeyi adm adm takip ederek tamamlamanz, kitapta yazlmayp
sizden yapmanz istenen blmleri yapmanz, verilen uyar ve ipularn kullanmanz sizlere proje
yapmakta pratik kazandracak.Yaplan bu projeler ile birlikte, sizlere verilen rnek senaryolar
tamamlamanz, bir proje ierisindeki sorunlar zmenizde ve resmi daha en bandan grebil-
menizde byk katk salayacaktr. Kitaptaki projeleri tamamladktan sonra rnek senaryolar
bitirmeniz, eitiminiz sonunda sizlere i hayatna hazr birer yazlm uzman olma yolunda byk
katk salayacaktr.

Umarm sizler iin yararl bir alma olur. yi almalar.

Okan Tekeli
1 Proje 1:
herkesburada.com
1 Proje 1:
herkesburada.com
Grmeler

Uygulama Tasarm
Proje 1: herkesburada.com
Grmeler
Ahmet Becerikli (Proje Sahibi)
Yapmak istediimiz web uygulamas sayesinde yelerimizin site zerinden arkadalklar kurma-
larn, birbirlerinin albmlerini grebilmelelerini ve mesaj atmalarn istiyoruz. u andaki mevcut
internet sitelerindeki ye kayt sayfalar kullanclardan detayl bilgiler istiyor fakat bizim sitemize
ye olurken sadece kullancnn e-posta, ifre bilgisi ve rumuz girip ye olsun daha sonradan
kendi profil bilgilerini dzenlesin. Sitemizde her sayfaya ancak ye olan kullanc eriebilir, ye
olmayan kullancnn herhangi bir ilem yapmasn istemiyoruz.

ye profili olarak ise Tablo 1.1de verilen bilgileri girmesini istiyoruz.

Tablo 1.1: Mteri htiyalar Tablosu


Ad Hakknda
Soyad Rumuz
Doum Tarihi Dinledii Mzik
Cinsiyet Meslek
Eitim Durumu Okuduu Kitaplar
Bulunduu ehir Tuttuu Takm
Bulunduu lke Yapt Spor
Hobileri Sigara er mi
Fobileri Alkol Kullanr m

stediim zaman eitim durumu, ilgi alan, ehir, lke, meslek ve takm tanmlamalarn yapabil-
meliyim. Profil bilgilerini kimlerin grebileceini kullanc belirlesin. sterse herkes grr, isterse
sadece arkadalar grebilir.

yeler kendi profil resimleri haricinde farkl albmler oluturabilsin ama bu albmleri herkes
gremesin, profil grntlemedeki gibi sadece arkadalar veya herkes grebilsin deme imkan
olmal.

yeler birbirlerine zel mesaj atabilsinler. Mesaj atarken eer mesaj ataca ye kullancnn ar-
kada ise kullanc adnn veya kime ksmnn yazlaca yer otomatik tamamlansn, eer arkada
deil ise tamamlanmasn. Burada teklif dediimiz bir sistem olmal. Arkadalk teklifi sonrasnda
iki kullanc arkada olabilecek ve albm, profil gibi bilgilere erimeye balayacak. ou arka-
dalk sitesinde bulunan titreim gnderme ya da iek smarlama gibi uygulamalar istemiyoruz
sadece mesaj gndersin yeter. Kullanclar arkada listelerindeki online arkadalar ile chat yapa-
bilsin istiyoruz. Baz internet sitelerinde kullanclar kendi ana sayfalarn zelletirebiliyor. Bizim
sitemizde de kullanclar sayfalarnda istedikleri blmleri gstersin, istemediklerini gstermesin.
Farkl tema seenekleri olsun. Bir de baz siteler kullanc ilem yaparken ekranda kalyor hi gelip
gitmiyor, tpk Windows uygulamas gibi hemen ilem yapyor, bizim sitemiz de o ekilde olsun.

Uygulamada 2 rol istiyoruz. Bunlardan biri admin dieri ise standart. Admin grubu uygulama ie-
risinde kullanc rol deitirme, ifre resetleme ve ynetmesini istediimiz bilgileri ynetme gibi
ilemleri yapacak. Standart rol ise bildiimiz ye olacak.

Uygulama Analizi
Projeye balamadan nce bir analiz yaplacak olursa;

1. Uygulama rol bazl olacak. Uygulama ierisinde kullanclar istedii yerleri zelletirebilecei
iin web part kullanlacak ve Windows uygulamas gibi hzl tepki verebilmek iin ajax tekno-
lojisi kullanlacak.
 Proje 1

2. Kullanclar aras mesajlama sistemi olacak.


3. Kullanclar sadece onayladklar kullanclar ile mesajlaabilecek
4. Chat uygulamas olacak.
5. Kullanc bazl fotoraf galerisi olacak.
6. Tartma gruplar oluturulabilecek, gerektiinde mesajlar mail atlacak.

Uygulama Tasarm
Veritaban Tasarm
Asp.Net membership alt yaps kullanlaca iin veritaban sunucunuzu an.
HerkesBuradaDb isminde veritaban oluturun.
Balat > Programlar > Visual Studio 2008 > Visual Studio Tools < Visual Studio 2008 Com-
mand Prompt aracn altrn.
Uygulama ksayolu programlar mensnde buluna- Aspnet_regsql komutunu altrn. kan sihir-
myorsa Balat > altr > C:\Program Files\Mic- bazdan HerkesBuradaDb veritaban sein ve ya-
rosoft Visual Studio 9.0\VC\ komutunu yrtn.
plandrn.

ekil 1.1: Membership veritaban oluturmak.

Veritabannn yelik sistemini kullanaca tablolar oluturulduktan sonra HerkesBuradaDb ve-


ritabann an. ekil 1.2 ile ekil 1.9 arasndaki tablolalar aspnet_regsql arac ile oluturulan
membership tablolarna ek olarak oluturun.

ekil 1.2: Sehirler tablosu. ekil 1.3: Takimlar tablosu.

ekil 1.4: Albumler tablosu. ekil 1.5: ArkadasListesi tablosu.


herkesburada.com 

ekil 1.6: EgitimDurumlari tablosu. ekil 1.7: Fotograflar.

Tm tablolardaki primary key stunlarnnn


identity specification Yes yaplmal ve identitty
increment ve seed 1 olarak belirtilmelidir.

ekil 1 8: Mesajlar tablosu. ekil 1.9: Meslekler tablosu.

Oluturulan tablolardaki ilikileri yaplandrn.

Kaynak Tablo Kaynak Stun Hedef Tablo Hedef Stn


Albumler KullaniciId aspnet_Users UserId
ArkadasListesi Kim aspnet_Users UserId
ArkadasListesi Kimin aspnet_Users UserId
Fotograflar AlbumId Albumler AlbumId

Arayz Tasarm
Visual Studio programn an. New > Web Site > ablonunu sein. Proje adn HerkesBuradaWe-
bUI eklinde verin. Dil olarak C# sein. Version olarak ise .Net Framework 3.5 sein.

ekil 1.10 : Yeni web sitesi oluturma ekran.

Uygulama oluturulduktan sonra Solution Explorer penceresinden web.config dosyasn an.


Asp.Net membership altyapsndan yararlanabilmek iin configuration dm ierisinde (sys-
tem.web dm hemen zerine) connectionStrings dm ekleyin. Mevcut ConnectionS-
tring dm silinmeli ve daha sonra aadaki dm eklenmeli (Liste 1.1).
 Proje 1

<connectionStrings>
<clear/>
<add name=LocalSqlServer connectionString=server=.;data
base=HerkesBuradaDb;user id=dbUser;password=123/>
</connectionStrings>

Liste 1.1: Web.config connectionStrings tanmlamas.

Uygulamay yaplandrmak iin Asp.Net Configuration aracn an. Bu arac amak iin Web Site
> Asp.Net Configuration mensn takip edebilirsiniz.

ekil 1.11: Asp.Net Web Administration Application.

Alan Asp.Net Web Application Administration sitesinden security sekmesine gelin. ekil 1.11
haricinde bir kt grnyorsa, hatay okuyarak sorunu giderin. Oluabilecek muhtemel hatalar;

Web.config dosyas ierisinde connection stringin yanl yazlmas ve yazm hatas (; kul-
lanmay unutmak).
Sql Server veritabanna balant kurulamamas.
Balanlmak istenen veritaban sunucusunun almyor olmas.
Sorunsuz balant sadktan sonra sras ile;

1. Security sekmesi altndaki Users blm ierisinden Select authentication type linkine tkla-
yn.
2. From Internet seenei sein. Done butonuna tklayn.
3. Security Sekmesi ierisinden Roles blmnden Enable Roles linkine tklayn.
4. Security Sekmesi ierisinden Roles blmnden Create or Manage roles linkine tklayn.
5. Admin ve Standart olarak 2 adet rol ekleyin.
herkesburada.com 

6. Internet Explorer penceresini kapatp uygulamaya dnn.


7. Uygulamaya geri dnld zaman web.config dosyasnda yaplan deiiklikler yznden
Visual Studio dosya deiiklik uyars verecektir. kan uyarya Yes to All diyerek onaylayn.
8. Solution Explorer penceresinden uygulama zerinde sa tklayn. New Folder mensn ia-
ret edin. Klasr ismini admin olarak verin.
9. Asp.Net Configuration aracn altrn. Solution Expolorer
penceresi zerindeki en sada bulunan ikona tklayarak
aabilirsiniz. (ekil 1.12)
10. Security sekmesinden Access Rules blmnden Create
access rules linkine tklayn.
11. Select a directory for this rule blmden admin klasrn ekil 1.12: Asp.Net Configuration Toolu
sein. Rule applies to blmnden Role radio button kon- altrmak.
troln sein. Karsndaki dropdownlistten Admin sein.
12. Permission blnden Allow seeneini sein ve OK butonuna tklayn.
13. Security sekmesinden Access Rules blmnden Create access rules linkine tklayn.
14. Select a directory for this rule blmden admin klasrn sein Rule applies to blmnden
All users radio button kontroln sein. Permission blnden Deny seeneini sein.
15. OK butonsuna tklayn ve web administration toolu kapatn.
Bu admlar bitirdikten sonra Solution Explorer penceresinden admin klasr zerinde sa tk-
layn, Refresh Folder mensn sein. Klasr ierisinde bir web.config olduu grnecek. Bu
dosyaya izin verilen ve yasaklanan gruplar eklendi.

Bu aamaya kadar uygulama ierisine 2 rol tanmland. Tanmlanan bu rollerden admin rol grubu-
na, uygulama ierisindeki admin klasrne eriimine izin verildi, dier tm kullanclara kapatld.
Bir web uygulamas ierisinde klasre eriim izni verirken ilk nce eriimine izin verilecekleri
(allow) daha sonra yasaklanacak kullanc veya rolleri atayn. lk nce tm kullanclara yasak-
lanrsa, daha sonradan izin verilen kullanclar bile eriemeyecek. Yanl kullanma rnek olarak;

<authorization>
<deny users=* />
<allow roles=Admin />
</authorization>

Liste 1.2: Yanl tanmlanm authorization dm.

Standart olarak membership altyaps ierisinde kullanclarn kullanacaklar ifre format en az 7


karakter olmal ve bunlardan biri alfa numeric karakter (#,@,? gibi.) olmal. Uygulama ierisinde
bu ayar deitirmek iin web.config dosyasnda membership ayarlarn kendiniz belirleyin. Web.
config dosyasna system.web dm ierisine Liste 1.3deki kodu ekleyin.

<membership>
<providers>
<clear/>
<add name=AspNetSqlMembershipProvider
type=System.Web.Security.SqlMembershipProvider, System.
Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d
50a3a
connectionStringName=LocalSqlServer
 Proje 1

enablePasswordRetrieval=false
enablePasswordReset=true
requiresQuestionAndAnswer=true
applicationName=/
requiresUniqueEmail=false
passwordFormat=Hashed
maxInvalidPasswordAttempts=5
minRequiredPasswordLength=5
minRequiredNonalphanumericCharacters=0
passwordAttemptWindow=10
passwordStrengthRegularExpression= />
</providers>
</membership>

Liste 1.3: Web.config dosyasnda ezilmi membership bilgileri.

Bu ayardan sonra web uygulamas iin ifre uzunluu en az 5 karakter olacak ve alfa numeric ka-
rakter zorunluluu olmayacak. Web uygulanmasnn admin rolne sahip kullancsn tanmlamak
iin Asp.Net Configuration aracn altrarak security sekmesinden Users blm ierisindeki
Create User linkine tklayn. Admin kullanc isminde bir kullanc tanmlayn.
Admin kullancs olu- Kullanc bilgilerini tutmak iin (Ad, Soyad, Doum Tarihi) profile kullann.
turulurken Admin rol
seili olmal.
Profile tanmlamas iin web.config ierisinde profile dmn ezin.
Mterinin istedii kullanc bilgilerini tanmlayn.

<profile>
<properties>
<group name=KisiselBilgiler>
<add name=Ad type=System.String/>
<add name=Soyad type=System.String/>
<add name=DogumTarihi type=System.
DateTime/>
<add name=Cinsiyet type=System.
Boolean/>
<add name=YasadigiSehirId
type=System.String/>
</group>
<add name=EgitimDurumId type=System.
String/>
<add name=Hobileri type=System.String/>
<add name=Fobileri type=System.String/>
<add name=Hakkinda type=System.String/>
<add name=MeslekId type=System.String/>
<add name=OkuduguKitaplar type=System.
String/>
<add name=TuttuguTakimId type=System.
String/>
herkesburada.com 

<add name=YaptigiSporlar type=System.


String/>
<add name=SigaraKullanirMi type=System.
Boolean/>
<add name=AlkolKullanirMi type=System.
Boolean/>
<add name=ProfilYetki type=System.Boolean
defaultValue=true/>
<add name=ProfilResmi type=System.String
defaultValue=resimyok.jpg/>
</properties>
Profile dm
</profile> System.Web ie-
risinde yer alr.
Liste 1.4: web.config profile tanmlamas.

Gvenlik iin web.config dosyasnda kullanlacak authentication tanmlamasn yapn. Standart


olarak web.config ierisinde bu dm bulunur. Authentication dmn Liste 1.5teki ekilde
yaplandrn.

<authentication mode=Forms>
<forms defaultUrl=~/kullanici/default.aspx></
forms>
</authentication>

Liste 1.5: web.config authentication dm.

Uygulama ierisinde theme dndaki stilleri tanmlamak iin Style isminde bir klasr oluturun ve
iine Genel.css isminde stylesheet ekleyin. Eklenen dosyann ieriini temizleyin. Eklenen bu stil
belgesi ierisine Liste 1.6da belirtilen stili tanmlayn.

*
{
font-family: Tahoma, Arial, Helvetica;
}

#SayfaAna
{
width: 70%;
text-align: left;
border: 1px solid #89a5e0;
border-top: none;
}

.AnaIcerik
{
width:100%;
height:100%;
text-align:left;
10 Proje 1

}
#Menu
{
background-color: #89a5e0;
height: 30px;
width: 100%;
}

#Baslik
{
background-color:#3b5998;
}

#Icerik
{
padding: 10px 20px;
}

#SonBlum
{
text-align: center;
font-weight: bold;
color: Gray;
text-decoration: none;
margin-top: 10px;
}

body
{
margin: 0 auto 0 auto;
padding: 0;
color: #000000;
text-align: center;
}

.SolMenu
{

width:20%;
float:left;

}
.KullaniciIcerik
herkesburada.com 11

{
width:79%;
float:right;
font-size:small;
font-family:Verdana;
}

.KullaniciIcerik a
{
font-size:small;
}

a, a:link, a:visited, a:active


{
color: #000;
text-decoration: none;
}

a:hover
{
text-decoration: underline;
}

#Menu, #Menu a
{
color: #fff;
font-size: 18px;
font-weight: bold;
text-decoration: none;
}

#Menu .Separator
{
font-size: 18px;
}

#Menu .Text
{
font-size: 14px;
}

img
{
border: none;
12 Proje 1

p
{
margin-top: 0;
}

h1, h2, h3
{
margin: 0;
margin-bottom: 2px;
}

h1
{
font-size: 16px;
}

h2
{
font-size: 15px;
color: #de4d52;
}

h3
{
font-size: 13px;
}

Liste 1.6: Genel.css.

Uygulama ierisine SiteResimleri isminde bir klasr ekleyin ve size verilen proje materyalleri ie-
risindeki SiteResimleri klasr iindekileri bu klasre kopyalayn. Tasarm tanmlandktan sonra
her sayfada kullanlacak olan sayfann en stnde grnecek meny tanmlayn. Bu menu kulla-
ncnn rolne gre deiiklik gsterecei iin Login View kontrol kullann. Bilindii gibi bu kontrol
ye girii yapan ve yapmayan kiilere gre veya farkl rollere gre grnm kazanr. Uygulamaya
Controls isminde bir klasr oluturun ve iine UstMenu isminde bir Web User Control ekleyin.
(Liste 1.7)

<%@ Control Language=C# AutoEventWireup=true


CodeFile=UstMenu.ascx.cs Inherits=Controls_Menu %>
<table cellpadding=0 cellspacing=0 style=width: 700px;
height: 30px;>
<tr>
<td style=width: 500px; vertical-align: middle;>
&nbsp;
herkesburada.com 13

<a id=A1 href=~/ runat=Server>Ana Sayfa</a> <span


class=Separator>|</span>&nbsp;
<asp:LoginView runat=server ID=lv1>
<AnonymousTemplate>
<a id=A4 href=~/Login.aspx runat=Server>Giri</a>
</AnonymousTemplate>
<LoggedInTemplate>
<asp:LinkButton ID=lnkLogout runat=server
OnClick=lnkLogout_Click >k</asp:LinkButton>
</LoggedInTemplate>
<RoleGroups>
<asp:RoleGroup Roles=Admin>
<ContentTemplate>
<asp:LinkButton ID=lnkLogout runat=server
OnClick=lnkLogout_Click >k</asp:LinkButton>
<span class=Separator>|</span> <a id=A5 href=../
Admin/default.aspx runat=Server>
Ynetim</a>
</ContentTemplate>
</asp:RoleGroup>
</RoleGroups>
</asp:LoginView>
</td>
<td style=width: 200px; text-align: right; vertical-align:
middle;>
</td>
</tr>
</table>

Liste 1. 7: Ustmenu.ascx html tasarm.

Oluturulan st men kullanclarn giri yapmalarn salayacak, eer admin rol grubunda ise bu
gruba ait zel bir link kartmay salayacak.

lv1 ismindeki Login View kontrol iinde standart haricinde bir de admin rolndeki kullanclar iin
bir template oluturulmutur. Admin rolne sahip kullanclar, admin klasrne ynlendirilecek.

k butonuna tkland zaman k yapabilmek iin lnkLogout button kontrolnn Click olayn-
da kullanc k ilemini yaptrn. (Web User Controln kod dosyas - Liste 1.8.)

protected void lnkLogout_Click(object sender, EventArgs e)


{
FormsAuthentication.SignOut();
Session.Clear();
Response.Redirect(~/default.aspx);
}

Liste 1.8: lnkLogout linkbutton kontrol Click olay.


14 Proje 1

Uygulamann tasarmda tek bir arayz kullanabilmek iin Ajax Master Page ekleyin ve ismini her-
kesburada.master olarak belirleyin ve Liste 1.9da belirtilen tasarm yapn.

<%@ Master Language=C# AutoEventWireup=true


CodeFile=herkesburada.master.cs Inherits=herkesburada %>
<%@ Register Src=Controls/UstMenu.ascx TagName=Menu
TagPrefix=uc1 %>

<!DOCTYPE html PUBLIC -//W3C//DTD XHTML 1.0 Transitional//EN


http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd>

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


<head id=Head1 runat=server>
<title>Herkes Burada</title>
<link href=Style/Genel.css rel=stylesheet type=text/css
/>
</head>
<body>
<form id=form1 runat=server>
<div id=SayfaAna>
<div id=Baslik>
<img src=~/SiteResimleri/Logo.gif runat=server
id=imgLogo alt=Herkes Burada /></div>
<div id=Menu>
<uc1:Menu ID=Menu1 runat=server />
<asp:ScriptManager ID=ScriptManager1 runat=server>
</asp:ScriptManager>
</div>
<div id=Icerik>
<asp:ContentPlaceHolder ID=AnaIcerik runat=server>
</asp:ContentPlaceHolder>
</div>
</div>
<div id=SonBolum>
<!-- Daha sonradan buraya copyright bilgileri gelebilir. --
>
</div>
</form>
</body>
</html>

Liste 1.9: herkesburada.master dosyas tasarm.

Herkesburada.master master sayfasnn UstMenu.ascx user control eklenmi ekran grnts


ekil 1.13de belirtilmitir.
herkesburada.com 15

ekil 1.13: herkesburada.master sayfa tasarm.

Bu aamadan sonra uygulamaya eklenecek tm Ajax Web Formlarn


Web Form eklerken
herkesburada.master dosyasndan tretin. Yeni bir Ajax Web Form ek- master page setirme-
lerken master page setirip herkesburada.master dosyasn sein. Kul- yi unutmayn.
lanclarn kayt olabilmelelerini salamak iin kayit.aspx isminde bir Ajax
Web Form ekleyin.

kayit.aspx ierisine bir fieldset ekleyin. Eklenecek fieldseti Content Place Holder ierisine ekleyi
unutmayn.

<fieldset style=width: 320px; height: 260px>


<legend>Yeni ye?</legend>
</fieldset>

Eklenen bu fieldset ierisine Create User Wizard kontrol ekleyin. ID zelliini KullaniciKayit ola-
rak deitirin. zelliklerinde Trkeletirilebilen tm zellikleri Trkeletirin. rnein Password-
LabelText zelliini ifre olarak deitirin. Ek olarak Tablo 1.2deki zellikleri atayn.

Tablo 1.2: CreateUserWizard Kontrolnde Deitirikecek zellikler


zellik Deer
ContinueDestinationPageUrl ~/kullanici/default.aspx

Kayit.aspx formunun tasarm ekil 1.14deki gibidir.

ekil 1.14: Kayit.aspx sayfas.

Uygulama ierisinde 2 rol kullanlacak. Kayt olan kullancnn Standart rol grubuna alnmas iin
kayt esnasnda kayt olan kullancy bu gruba dahil edin. Bunun iin CreateUserWizard kontro-
lnn CreatedUser olaynda kullancy standart rol grubuna aln.

protected void KullaniciKayit_CreatedUser(object sender, EventArgs


e)
{
16 Proje 1

MembershipUser user = Membership.GetUser(KullaniciKayit.


UserName);
Roles.AddUserToRole(KullaniciKayit.UserName, Standart);
Membership.UpdateUser(user);
}

Liste 1.10: Kayt olan kullancy standart rol grubuna alma kodu.

Kayt olan kullancnn giri yapmasn salayacak olan Login.aspx sayfas iin uygulamaya Web
Form ekleyin ve ismini login.aspx olarak belirleyin. Kayit.aspx sayfasndaki gibi fieldset ekleyin
ve ierisine Login kontrol atn. Trkeletirilebilen zellikleri Trkeletirin ve ek olarak Tablo
1.3deki zellikleri atayn.

Tablo 1.3: Login.aspx Sayfas zerindeki Login Kontrolne Eklenecek zellikler


zellik Deer
CreateUserText Beni de aranza aln
CreateUserUrl ~/kayit.aspx
PasswordRecoveryText ifremi Unuttum
PasswordRecoveryUrl ~/sifrehatirlat.aspx

Login.aspx sayfasnn kts ekil 1.15de gsterilmitir.

ekil 1.15: Login.aspx sayfasnn tasarm grnm.

Uygulamaya sifrehatirlat.aspx isimli bir tane Web Form ekleyin. Sayfadaki Contente Password-
Recovery kontrol ekliyin. Trkeletirilebilen zellikleri Trkeletirin. Sifrehatirlat.aspx sayfasnn
grnts ekil 1.16da gsterilmitir.

ekil 1.16: SifreHatirlat.aspx sayfasnn tasarm grnm.


herkesburada.com 17

Bir ziyareti web sitesine ilk girdii zaman kullancy karlayacak olan default.aspx sayfasn
uygulamaya ekleyin.

<%@ Page Language=C# MasterPageFile=~/herkesburada.master


AutoEventWireup=true CodeFile=Default.aspx.cs Inherits=_
Default Title=Herkesburada.com %>
<asp:Content ID=Content1 ContentPlaceHolderID=AnaIcerik
Runat=Server>
<center> <asp:Panel ID=Panel1 runat=server
CssClass=AnaIcerik Height=100% Width=70%>
<p>
&nbsp;</p>
<p>
<font style=font-size: small; color: gray; font-
family: Verdana>&nbsp;Album outurun,
arkadalarnz ile mesajlan, yeni arkadalar
bulun, profil gncelleyin ve albumlere
gz atn.&nbsp;</font></p>
<center>
<asp:Button ID=btnKaydol runat=server
BackColor=Green Font-Names=Verdana Font-Size=Small
ForeColor=White Text=Aramza Katl
OnClick=btnKaydol_Click />
</center>
</asp:Panel></center>
</asp:Content>

Liste 1.11: Default.aspx html tasarm grnm.

btnKaydol button kontrolnn Click olaynda giri sayfasna ynlendirme yapn. Load olaynda ise
eer kullanc giri yapmsa Kullanici klasrne ynlendirin.

protected void Page_Load(object sender, EventArgs e)


{
if (User.Identity.IsAuthenticated)
Response.Redirect(@~\kullanici\default.aspx);
}
protected void btnKaydol_Click(object sender, EventArgs e)
{
Response.Redirect(login.aspx);
}

Liste 1.12: Default.aspx kod satr.


18 Proje 1

ekil 1.17: Default.aspx sayfa tasarm grnm.

Web sitesinde oluabilecek hatalar kullancya daha gzel ve anlalr gstermek iin hata say-
falar yapn. Hata isminde bir klasr ekleyin. 404 hata kodu internet sitelerinde bulunamayan
sayfalar, 403 nolu hata kodu ise eriilmeye yasak sayfalar belirtir. Bir web uygulamasnda olu-
abilecek en sk hatalar 404 ve 403 hatalardr. Bu hatalar iin ayr birer sayfa, dier tm hatalar
iin ise tek bir sayfa yapabilirsiniz. Bu klasre 404.aspx isminde bir Web Form ekleyin. Aradnz
sayfaya ulalamyor hatasn kullancya gsterin.

<%@ Page Language=C# MasterPageFile=~/herkesburada.master


AutoEventWireup=true CodeFile=404.aspx.cs Inherits=Hata_404
Title=Untitled Page %>
<asp:Content ID=Content1 ContentPlaceHolderID=AnaIcerik
Runat=Server>
<font color=Red>
<center>
&nbsp;</center>
<center>
&nbsp;</center>
<center>
Hata olutu ve yneticiye bildirildi.
<br />
Aradnz sayfaya ulalamyor.
</center></font>
</asp:Content>

Liste 1.13: 404.aspx hata sayfas html tasarm.

Ayn ekilde 403.aspx sayfas ekleyin ve Bu sayfaya eriim izniniz yok mesaj verdirin. Bu ha-
talar haricinde oluabilecek her hata iin genel bir generic hata sayfas yapn ve ismini hata.aspx
verin.

<%@ Page Language=C# MasterPageFile=~/herkesburada.master


AutoEventWireup=true CodeFile=hata.aspx.cs Inherits=Hata_
hata Title=Untitled Page %>
<asp:Content ID=Content1 ContentPlaceHolderID=AnaIcerik
Runat=Server>
<font color=Red>
<center>
&nbsp;</center>
<center>
herkesburada.com 19

&nbsp;</center>
<center>
Hata olutu ve yneticiye bildirildi.
<br />
leminizi tekrar deneyin.
</center></font>
</asp:Content>

Liste 1.14: Hata.aspx sayfas html tasarm.

Web.config dosyasn ap oluturulan hata sayfalarn tantn. Artk IIS kendi hata mesajlar yeri-
ne sizin zelletirdiiniz hata sayfalarn (custom error page) gsterecek.

<customErrors mode=RemoteOnly defaultRedirect=~/Hata/hata.


aspx>
<error redirect=~/Hata/404.aspx statusCode=404/>
<error redirect=~/Hata/403.aspx statusCode=403/>
</customErrors>

Liste 1.15: Web.Config CustomErrors dm.

Giri yapan kullanclarn eriecei sayfalar Kullanc klasr altnda toplamak iin uygulamaya
Kullanici klasr ekleyin. Eklenen klasre ilk olarak web.config dosyas ekleyin ve sadece giri
yapm kullanclarn bu klasre erimesine izin verin.

<?xml version=1.0 encoding=utf-8?>


<configuration>
<system.web>
<authorization>
<allow roles=Standart />
<allow roles=Admin />
<deny users=? />
</authorization>
</system.web>
</configuration>

Liste 1.16: Kullanc klasr ierisindeki web.config dosyas.

Controls klasr ierisine her sayfada grnecek olan sol menu iin KullaniciSolMenu.ascx is-
minde Web User Control ekleyin. Bu mende kullancnn profil resmi, sayfalarda gezinmesini
salayacak Menu kontrol ve kullanc aramasn salayacak arama blm olacak.

<%@ Control Language=C# AutoEventWireup=true CodeFile=Kullan


iciSolMenu.ascx.cs Inherits=Controls_KullaniciSolMenu %>
<fieldset style=height: auto; width: auto>
<legend><font style=font-size:smaller>Bilgilerim</font></
legend>
<br />
20 Proje 1

<a href=profilresmi.aspx title=Resminizi Guncelleyin><c


enter><asp:Image ID=imgUser runat=server AlternateText=Uye
Resminiz GenerateEmptyAlternateText=True /></center></a><br />
<font style=font-size:x-small>&nbsp; Hogeldin</font>
<asp:LoginName ID=LoginName1 runat=server Font-
Names=Verdana Font-Size=X-Small
ForeColor=Blue />
</fieldset>
<br />
<asp:Menu ID=Menu1 runat=server BackColor=#E3EAEB
DynamicHorizontalOffset=2
Font-Names=Verdana Font-Size=Small ForeColor=#666666
Height=115px StaticSubMenuIndent=10px
Width=158px>
<StaticMenuItemStyle HorizontalPadding=5px
VerticalPadding=2px />
<DynamicHoverStyle BackColor=#666666 ForeColor=White />
<DynamicMenuStyle BackColor=#E3EAEB />
<StaticSelectedStyle BackColor=#1C5E55 />
<DynamicSelectedStyle BackColor=#1C5E55 />
<DynamicMenuItemStyle HorizontalPadding=5px
VerticalPadding=2px />
<Items>
<asp:MenuItem Text=Mesajlarm Value=Mesajlarm
NavigateUrl=~/Kullanici/mesajlarim.aspx></asp:MenuItem>
<asp:MenuItem Text=Arkadalarm Value=Arkadalarm
NavigateUrl=~/Kullanici/arkadaslarim.aspx></asp:MenuItem>
<asp:MenuItem Text=Albumlerim Value=Albumlerim
NavigateUrl=~/Kullanici/albumlerim.aspx></asp:MenuItem>
<asp:MenuItem Text=Bilgilerim Value=Bilgilerim
NavigateUrl=~/Kullanici/bilgiler.aspx></asp:MenuItem>
</Items>
<StaticHoverStyle BackColor=#666666 ForeColor=White />
</asp:Menu>
<br />
<fieldset style=height: auto; width: auto>
<legend><font style=font-size:smaller>ye Ara</font></legend>
<asp:TextBox ID=txtRumuz runat=server Width=125px></
asp:TextBox><br />
&nbsp;<asp:Button ID=btnAra runat=server Text=Ara /><br
/>
<asp:HyperLink ID=HyperLink1 runat=server Font-
Size=Small ForeColor=Blue
NavigateUrl=~/kullanici/detayliarama.aspx>Detayl
Arama</asp:HyperLink><br /></fieldset>
&nbsp;<br />
<br />
herkesburada.com 21

KullaniciSolMenu.ascx kontrolnde en stte bir fieldset tanmland ve LoginName kontrol otu-


rum aan kullancnn otu-
ierisine kullancnn resimini gsterebilmek iin Image kontrol ek- rum adn almay salar.
lendi. Hemen altnda karlama mesaj olarak Hogeldiniz yazld ve
LoginName kontrol eklendi.

Orta blmde kullanclarn sayfalarda gezinmelerini salamak iin Menu kontrol eklendi ve ge-
rekli sayfalar link verildi. En altta ise kullanclarn site ierisinde arama yapmalarn salamak iin
arama blm yapld. Kullanc ilk oturum atnda Profile bilgilerinden ProfilResmini belirtme-
mi olacak. Eer kendisi resim belirtmemi ise otomatik olarak resimyok.jpg dosyas kullancnn
resmi yerine gsteriyoruz. Kullanc resimlerini depolomak iin uygulama ierisine UyeResimleri
klasr ekleyin. Bu klasr sitedeki kullanclarn resimlerini tutucak, dolaysyla resimler daha d-
zenli tutulmu olacak. Klasr ierisine resimyok.jpg resmini ekleyin. Bu resim profil bilgisini dol-
durmam kullancnn resminde gsterilecek. Bundan sonra oluturulacak her sayfada bu menu
kullanlacak.

protected void Page_Load(object sender, EventArgs e)


{
if (String.IsNullOrEmpty(Profile.ProfilResmi))
imgUser.ImageUrl = Server.MapPath(~/UyeResimleri/
resimyok.jpg);
else
imgUser.ImageUrl = Server.MapPath(~/UyeResimleri/)
+ Profile.ProfilResmi;
} Eklenen her sayfay
herkesburada.master
sayfasndan tretin.
Liste 1.17: Default.aspx Page_Load olay.

Kullanc klasrne default.aspx isminde bir Web Form ekleyin.

Oluan sayfann kullancya ho grnebilmesi iin Contenti tasarmsal olarak ikiye bln, yani
div kullanarak ekillendirin. Solda oluan div ierisine biraz nce oluturduunuz KullaniciSolMe-
nu.ascx kontroln ekleyin.

<%@ Page Language=C# MasterPageFile=~/herkesburada.


master AutoEventWireup=true CodeFile=Default.aspx.cs
Inherits=Kullanici_Default Title=ye Ana Sayfa %>
<%@ Register Src=../Controls/KullaniciSolMenu.ascx TagName=Kul
laniciSolMenu TagPrefix=uc1 %>

<asp:Content ID=Content1 ContentPlaceHolderID=AnaIcerik


Runat=Server>
<div class=SolMenu>
<uc1:KullaniciSolMenu ID=KullaniciSolMenu1 runat=server
/>

</div>
<div class=KullaniciIcerik>
</div>
</asp:Content>

Liste 1.18: Default.aspx sayfas html tasarm.


22 Proje 1

Bundan sonraki her sayfada ayn tasla kullann. Eklenen her sayfay Liste 1.18de belirtidii gibi
2 paraya bln ve sol tarafa KullaniciMenu.ascx kontroln ekleyin.

ekil 1.18: Kullanici/default.aspx sayfa tasarm grnts.

Kullanici klasr ierisine Mesajlarim.aspx isminde bir Web


Default.aspx sayfasnn en stnde be-
Form Ekleyin. Kullancnn gelen ve giden mesajlarnn liste-
lirtilen declaration haricindeki tm kod-
lar koplayalp yaptrabilirsiniz. lenecei sayfas olacak. Sayfay default.aspxteki gibi iki div
ierisine bln.

<%@ Register Assembly=AjaxControlToolkit Namespace=AjaxControl


Toolkit TagPrefix=cc1 %>
<%@ Register Src=~/Controls/KullaniciSolMenu.ascx TagName=Kull
aniciSolMenu TagPrefix=uc1 %>

<asp:Content ID=Content1 ContentPlaceHolderID=AnaIcerik


Runat=Server>
<div class=SolMenu>
<uc1:KullaniciSolMenu ID=KullaniciSolMenu1 runat=server
/>

</div>

<script language=javascript type=text/javascript>



function YeniMesajGoster()
{

window.open(yenimesaj.aspx,yenimesaj,width=350,h
eight=250);
}
</script>
herkesburada.com 23

<div class=KullaniciIcerik>
<br />
<asp:LinkButton ID=lnkYeniMesaj OnClientClick=YeniMe
sajGoster(); return false; runat=server ForeColor=Blue
Width=67px>Yeni Mesaj</asp:LinkButton><br />
<asp:UpdatePanel ID=UpdatePanel1 runat=server>
<ContentTemplate>
<br />
<cc1:TabContainer ID=TabContainer1 runat=server
ActiveTabIndex=0 Width=625px>
<cc1:TabPanel ID=TabPanel1 runat=server
HeaderText=TabPanel1>
<ContentTemplate>
<asp:GridView ID=gelenMesajlar runat=server
AllowPaging=True AllowSorting=True
AutoGenerateColumns=False BackColor=White
BorderColor=#CCCCCC BorderStyle=None
BorderWidth=1px CellPadding=4 DataKeyNames=M
esajId,OkunduMu DataSourceID=SqlDataSource1
EmptyDataText=Gelen Mesajnz bulunmuyor...
ForeColor=Black GridLines=Horizontal
Width=100% OnRowDeleting=gelenMesajlar_
RowDeleting OnRowDataBound=gelenMesajlar_RowDataBound>
<FooterStyle BackColor=#CCCC99 ForeColor=Black
/>
<Columns>
<asp:HyperLinkField DataNavigateUrlFields=
UserName DataNavigateUrlFormatString=~/kullanici/profildetay.
aspx?user={0}
DataTextField=UserName HeaderText=G&#2
46;nderen />
<asp:HyperLinkField DataNavigateUrlFields
=MesajId DataNavigateUrlFormatString=~/kullanici/mesajoku.
aspx?mesaj={0}
DataTextField=Baslik HeaderText=Konu
/>
<asp:BoundField DataField=Tarih
DataFormatString={0:d} HeaderText=Tarih HtmlEncode=False
SortExpression=Tarih />
<asp:TemplateField ShowHeader=False>
<ItemTemplate>
<asp:LinkButton ID=LinkButton1
OnClientClick=return confirm(Mesaj silmek istediinizden
emin misiniz?) runat=server CausesValidation=False
CommandName=Delete
Text=Sil></asp:LinkButton>
</ItemTemplate>
</asp:TemplateField>
24 Proje 1

</Columns>
<SelectedRowStyle BackColor=#CC3333 Font-
Bold=True ForeColor=White />
<PagerStyle BackColor=White ForeColor=Black
HorizontalAlign=Right />
<HeaderStyle BackColor=#333333 Font-Bold=True
ForeColor=White />
</asp:GridView>
</ContentTemplate>
<HeaderTemplate>
Gelen Mesajlarm
</HeaderTemplate>
</cc1:TabPanel>
<cc1:TabPanel ID=TabPanel2 runat=server
HeaderText=TabPanel2>
<ContentTemplate>
<asp:GridView ID=gidenMesajlar
runat=server AllowPaging=True AllowSorting=True
AutoGenerateColumns=False
BackColor=White BorderColor=#CCCCCC BorderStyle=None
BorderWidth=1px CellPadding=4
DataKeyNames=MesajId DataSourceID=SqlDataSource2
EmptyDataText=Giden mesajnz
bulunmuyor... ForeColor=Black GridLines=Horizontal
OnRowDeleting=gidenMesajlar_
RowDeleting Width=100%>
<FooterStyle BackColor=#CCCC99
ForeColor=Black />
<Columns>
<asp:BoundField
DataField=UserName HeaderText=Kime SortExpression=Kimden />
<asp:BoundField DataField=Baslik
HeaderText=Balk SortExpression=Baslik />
<asp:BoundField DataField=Tarih
DataFormatString={0:d} HeaderText=Tarih HtmlEncode=False
SortExpression=Tarih />
<asp:TemplateField
ShowHeader=False>
<ItemTemplate>
<asp:LinkButton
ID=LinkButton1 runat=server CausesValidation=False
CommandName=Delete
OnClientClick=return
confirm(Mesaj silmek istediinden emin misiniz?) Text=Sil></
asp:LinkButton>
</ItemTemplate>
</asp:TemplateField>
herkesburada.com 25

</Columns>
<SelectedRowStyle BackColor=#CC3333
Font-Bold=True ForeColor=White />
<PagerStyle BackColor=White
ForeColor=Black HorizontalAlign=Right />
<HeaderStyle BackColor=#333333
Font-Bold=True ForeColor=White />
</asp:GridView>
<asp:SqlDataSource ID=SqlDataSource2
runat=server ConflictDetection=CompareAllValues
ConnectionString=<%$
ConnectionStrings:ConStrHerkesBurada %> DeleteCommand=DELETE
FROM [Mesajlar] WHERE [MesajId] = @original_MesajId AND [Kimden]
= @original_Kimden AND [Kime] = @original_Kime AND [Baslik] = @
original_Baslik AND [MesajIcerik] = @original_MesajIcerik AND
[Tarih] = @original_Tarih
InsertCommand=INSERT INTO [Mesajlar]
([MesajId], [Kimden], [Kime], [Baslik], [MesajIcerik], [Tarih],
[OkunduMu]) VALUES (@MesajId, @Kimden, @Kime, @Baslik, @
MesajIcerik, @Tarih)
OldValuesParameterFormatString=orig
inal_{0} SelectCommand=SELECT [MesajId], [UserName], [Baslik],
[MesajIcerik], [Tarih] &#13;&#10;FROM [Mesajlar] m &#13;&#10;Inner
Join aspnet_Users a on a.UserId = m.Kime&#13;&#10;WHERE ([Kimden]
= @Kimden And GondericiyeGosterme=False) ORDER BY [Tarih]
UpdateCommand=UPDATE [Mesajlar]
SET [Kimden] = @Kimden, [Kime] = @Kime, [Baslik] = @Baslik,
[MesajIcerik] = @MesajIcerik, [Tarih] = @Tarih WHERE [MesajId] =
@original_MesajId AND [Kimden] = @original_Kimden AND [Kime] = @
original_Kime AND [Baslik] = @original_Baslik AND [MesajIcerik] =
@original_MesajIcerik AND [Tarih] = @original_Tarih>
<InsertParameters>
<asp:Parameter Name=MesajId
Type=Object />
<asp:Parameter Name=Kimden
Type=Object />
<asp:Parameter Name=Kime
Type=Object />
<asp:Parameter Name=Baslik
Type=String />
<asp:Parameter Name=MesajIcerik
Type=String />
<asp:Parameter Name=Tarih
Type=DateTime />
</InsertParameters>
<SelectParameters>
<asp:SessionParameter
Name=Kimden SessionField=UserId />
</SelectParameters>
26 Proje 1

<UpdateParameters>
<asp:Parameter Name=Kimden
Type=Object />
<asp:Parameter Name=Kime
Type=Object />
<asp:Parameter Name=Baslik
Type=String />
<asp:Parameter Name=MesajIcerik
Type=String />
<asp:Parameter Name=Tarih
Type=DateTime />
<asp:Parameter Name=OkunduMu
Type=Boolean />
<asp:Parameter Name=original_
MesajId Type=Object />
<asp:Parameter Name=original_
Kimden Type=Object />
<asp:Parameter Name=original_
Kime Type=Object />
<asp:Parameter Name=original_
Baslik Type=String />
<asp:Parameter Name=original_
MesajIcerik Type=String />
<asp:Parameter Name=original_
Tarih Type=DateTime />
</UpdateParameters>
<DeleteParameters>
<asp:Parameter Name=original_
MesajId Type=Object />
<asp:Parameter Name=original_
Kimden Type=Object />
<asp:Parameter Name=original_
Kime Type=Object />
<asp:Parameter Name=original_
Baslik Type=String />
<asp:Parameter Name=original_
MesajIcerik Type=String />
<asp:Parameter Name=original_
Tarih Type=DateTime />
</DeleteParameters>
</asp:SqlDataSource>
</ContentTemplate>
<HeaderTemplate>
Giden Mesajlarm
</HeaderTemplate>
</cc1:TabPanel>
</cc1:TabContainer><br />
herkesburada.com 27

<asp:SqlDataSource ID=SqlDataSource1 runat=server


ConflictDetection=CompareAllValues
ConnectionString=<%$ ConnectionStrings:
ConStrHerkesBurada %>
DeleteCommand=DELETE FROM [Mesajlar] WHERE
[MesajId] = @original_MesajId AND [Kimden] = @original_Kimden
AND [Kime] = @original_Kime AND [Baslik] = @original_Baslik AND
[MesajIcerik] = @original_MesajIcerik AND [Tarih] = @original_
Tarih
InsertCommand=INSERT INTO [Mesajlar] ([MesajId],
[Kimden], [Kime], [Baslik], [MesajIcerik], [Tarih]) VALUES (@
MesajId, @Kimden, @Kime, @Baslik, @MesajIcerik, @Tarih)
OldValuesParameterFormatString=origi
nal_{0} SelectCommand=SELECT [MesajId], [UserName],
[Baslik], [MesajIcerik], [Tarih] ,OkunduMu&#13;&#10;FROM
[Mesajlar] m &#13;&#10;Inner Join aspnet_Users a on
a.UserId = m.Kimden&#13;&#10;WHERE ([Kime] = @Kime And
AliciyaGosterme=False) ORDER BY OkunduMu,[Tarih] &#13;&#10;
UpdateCommand=UPDATE [Mesajlar] SET [Kimden] =
@Kimden, [Kime] = @Kime, [Baslik] = @Baslik, [MesajIcerik] = @
MesajIcerik, [Tarih] = @Tarih WHERE [MesajId] = @original_MesajId
AND [Kimden] = @original_Kimden AND [Kime] = @original_Kime
AND [Baslik] = @original_Baslik AND [MesajIcerik] = @original_
MesajIcerik AND [Tarih] = @original_Tarih AND [OkunduMu] = @
original_OkunduMu>
<DeleteParameters>
<asp:Parameter Name=original_MesajId
Type=Object />
<asp:Parameter Name=original_Kimden
Type=Object />
<asp:Parameter Name=original_Kime
Type=Object />
<asp:Parameter Name=original_Baslik
Type=String />
<asp:Parameter Name=original_MesajIcerik
Type=String />
<asp:Parameter Name=original_Tarih
Type=DateTime />

</DeleteParameters>
<UpdateParameters>
<asp:Parameter Name=Kimden Type=Object />
<asp:Parameter Name=Kime Type=Object />
<asp:Parameter Name=Baslik Type=String />
<asp:Parameter Name=MesajIcerik
Type=String />
<asp:Parameter Name=Tarih Type=DateTime
/>
28 Proje 1

<asp:Parameter Name=original_MesajId
Type=Object />
<asp:Parameter Name=original_Kimden
Type=Object />
<asp:Parameter Name=original_Kime
Type=Object />
<asp:Parameter Name=original_Baslik
Type=String />
<asp:Parameter Name=original_MesajIcerik
Type=String />
<asp:Parameter Name=original_Tarih
Type=DateTime />
<asp:Parameter Name=original_OkunduMu />

</UpdateParameters>
<SelectParameters>
<asp:SessionParameter Name=Kime
SessionField=UserId Type=Object />
</SelectParameters>
<InsertParameters>
<asp:Parameter Name=MesajId Type=Object
/>
<asp:Parameter Name=Kimden Type=Object />
<asp:Parameter Name=Kime Type=Object />
<asp:Parameter Name=Baslik Type=String />
<asp:Parameter Name=MesajIcerik
Type=String />
<asp:Parameter Name=Tarih Type=DateTime
/>

</InsertParameters>
</asp:SqlDataSource>
</ContentTemplate>
</asp:UpdatePanel>
&nbsp;&nbsp;<br />
<br />
</div>
</asp:Content>
Liste 1.19: Mesajlarim.aspx html tasarm.

Eklenen bu formun en st ksmnda bir link button kontrol bulunur. Bu link butonuna tkland
zaman yeni bir pencerede popup olarak yeni mesaj gnderme sayfas alacak. Bu linkin hemen
altnda bir update panel bulunur. Update panel ierisinde Tab Container kontrol bulunur. Tab
Container kontrol ierisinde 2 adet tab oluturuldu ve bu tablardan birinde gelen mesajlar, die-
rinde ise giden mesajlar listelendi. Gelen mesaj eer okunmam ise mesajn bulunduu satrn
stili deitirilecek. Bunun iin gelenMesajlar grid view kontrolnn RowDataBound olaynda me-
sajn okunup okunmad bilgisini alp gerekli deiiklii yapn.
herkesburada.com 29

protected void gelenMesajlar_RowDataBound(object sender,


GridViewRowEventArgs e)
{
if (e.Row.RowType != DataControlRowType.DataRow)
return;

bool neymis = Convert.ToBoolean(gelenMesajlar.DataKeys[e.


Row.RowIndex][OkunduMu]) ;

if (!neymis)
{
e.Row.BackColor = Color.Brown;
e.Row.ForeColor = Color.White;
}
}

Liste 1.20: Mesajlarim.aspx gelenMesajlar RowDataBound olay.

Giden ve gelen mesajlarda silinme ileminde deiik bir sistem kullanlr. Bir mesaj geldii zaman
veritabannda tek bir satra kayt girilecek. Mesaj gnderen kii gelen mesajlarndan mesaj sil
dedii zaman aslnda bana gsterme demi olacak. Mesaj gelen kii gelen mesaj sil dedii za-
man aslnda bana gsterme demi olacak. Eer mesaj gerekten silinirse gnderen veya alan kii
mesaj sildii zaman dier kii mesaj grememi olacak. O yzden bir kullanc mesaj sil dedii
zaman aslnda o kullancya mesajn gsterilip gsterilmeyecei belirtilecek. Bu yzden gelen ve
giden mesajlar iin silinme olaynda gerekli mesajlar gncelleyin.

protected void gelenMesajlar_RowDeleting(object sender,


GridViewDeleteEventArgs e)
{
Guid mesajId = new Guid(gelenMesajlar.DataKeys[e.
RowIndex].Value.ToString());
SqlConnection con = new SqlConnection(ConfigurationManage
r.ConnectionStrings[LocalSqlServer].ConnectionString);
SqlCommand cmd = new SqlCommand(Update mesajlar set
AliciyaGosterme = True Where MesajId = @MesajId, con);
cmd.Parameters.AddWithValue(@MesajId, mesajId);
try
{

con.Open();
cmd.ExecuteNonQuery();
}
catch (SqlException ex)
{

throw ex;
}
finally
30 Proje 1

{
con.Close();
}

SqlDataSource1.DataBind();
}

protected void gidenMesajlar_RowDeleting(object sender,
GridViewDeleteEventArgs e)
{
Guid mesajId = new Guid(gidenMesajlar.DataKeys[e.
RowIndex].Value.ToString());
SqlConnection con = new SqlConnection(ConfigurationManage
r.ConnectionStrings[LocalSqlServer].ConnectionString);
SqlCommand cmd = new SqlCommand(Update mesajlar set
GondericiyeGosterme = True Where MesajId = @MesajId, con);
cmd.Parameters.AddWithValue(@MesajId, mesajId);
try
{
con.Open();
cmd.ExecuteNonQuery();
}
catch (SqlException ex)
{
throw ex;
}
finally
{
con.Close();
}

SqlDataSource2.DataBind();
}

Liste 1.21: Mesajlarim.aspx gelen ve giden mesajlarn silinme olay.

Mesaj alan kii ve gnderen kii birlikte silinme istediinde bulunursa mesaj gerekten veritaba-
nndan silinir. Bu yzden veritaban zerine bu ilemi yapacak trigger oluturun. Liste 1.22de
belirtilmitir.

USE herkesburadadb
GO

CREATE TRIGGER MesajSilici


ON Mesajlar
For Update
herkesburada.com 31

AS
BEGIN

Declare @MesajId uniqueidentifier

Select @MesajId = MesajId From Inserted

Delete From Mesajlar Where GondericiyeGosterme = True


And AliciyaGosterme=True And MesajId = @MesajId

END

Liste 1.22: MesajSilici trigger kodu.

Mesajlarim.aspx sayfas tasarm ekil 1.19da belirtilmitir.

ekil 1.19: Mesajlarim.aspx sayfa tasarm grnm.

Yeni mesaj gnderebilmek iin Kullanici klasr ierisine yenimesaj.aspx isimli bir sayfa ekleyin
fakat bu sayfay eklerken master page semeyin.

<%@ Page Language=C# AutoEventWireup=true CodeFile=yenimesaj.


aspx.cs Inherits=Kullanici_yenimesaj %>
<%@ Register Assembly=AjaxControlToolkit Namespace=AjaxControl
Toolkit TagPrefix=cc1 %>
<!DOCTYPE html PUBLIC -//W3C//DTD XHTML 1.0 Transitional//EN
http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd>
<html xmlns=http://www.w3.org/1999/xhtml >
<head runat=server>
<title>Yeni Mesaj Gnder</title>
32 Proje 1

<link href=../Style/Genel.css rel=stylesheet type=text/


css />
</head>
<body style=margin-left:0;margin-top:0>
<form id=form1 runat=server>
<div style=text-align:left>
<table width=300>
<tr>
<td style=width: 55px>
</td>
<td colspan=2>
<asp:ScriptManager ID=ScriptManager1
runat=server>
</asp:ScriptManager>
<cc1:AutoCompleteExtender
EnableCaching=false
id=AutoCompleteExtender1
MinimumPrefixLength=2 runat=server
servicemethod=GetCompletionList

targetcontrolid=txtKime
UseContextKey=true
></cc1: AutoCompleteExtender>

</td>
<td style=width: 100px>
</td>
</tr>
<tr>
<td style=width: 55px>
Kime :
</td>
<td style=width: 69px>
<asp:TextBox ID=txtKime runat=server></
asp:TextBox></td>
<td style=width: 69px>
</td>
<td style=width: 100px>
</td>
</tr>
<tr>
<td style=width: 55px>
Konu :
</td>
<td colspan=3>
herkesburada.com 33

<asp:TextBox ID=txtBaslik runat=server


Width=100%></asp:TextBox></td>
</tr>
<tr>
<td style=width: 55px; height: 18px
valign=top>
Mesaj :
</td>
<td colspan=3 style=height: 18px>
<asp:TextBox ID=txtMesaj runat=server
Height=107px TextMode=MultiLine Width=100%></asp:TextBox></
td>
</tr>
<tr>
<td style=width: 55px>
</td>
<td style=width: 69px>
<asp:Button ID=btnGonder runat=server
Text=Gnder OnClick=btnGonder_Click />
</td>
<td style=width: 69px>
<asp:Button ID=btnIptal runat=server
Text=ptal CausesValidation=False OnClientClick=javascript:
window.close(); /></td>
<td style=width: 100px>
</td>
</tr>
<tr>
<td style=width: 55px; height: 18px>
</td>
<td style=width: 69px; height: 18px>
&nbsp;</td>
<td style=width: 69px; height: 18px>
</td>
<td style=width: 100px; height: 18px>
</td>
</tr>
</table>

</div>
</form>
</body>
</html>

Liste 1.23: Yenimesaj.aspx.


34 Proje 1

Yeni mesaj gndermek iin sayfaya bir scriptmanager ve bir autocompleteextender konrol
eklendi. Eer mesaj gnderilecek kii kullancnn arkada ise otomatik olarak textbox altnda
kacak. Kullanc mesaj gidecek kiinin ismini yazd zaman tamamlama olmayacak. Mesaj
gnderilecek kii, mesaj gnderen kiinin arkada olup olmadn renebilmesi iin veritaban
zerinde ArkadasListem isminde bir stored procedure oluturun. Arkada listesi tek bir tabloda
tanmlanyor.

CREATE proc [ArkadasListem]


(
@UserId uniqueidentifier
)
As

SELECT aspnet_Users.UserName , Kimin As KullaniciId


FROM ArkadasListesi INNER JOIN aspnet_Users
ON ArkadasListesi.Kimin = aspnet_Users.UserId WHERE
ArkadasListesi.OnaylandiMi =
True And (ArkadasListesi.Kim = @UserId)
Union
SELECT aspnet_Users.UserName, Kim As KullaniciId
FROM ArkadasListesi INNER JOIN aspnet_Users
ON ArkadasListesi.Kim = aspnet_Users.UserId WHERE ArkadasListesi.
OnaylandiMi =
True And (ArkadasListesi.Kimin = @UserId)

Liste 1.24: ArkadasListem StoredProcedure.

Mesaj gnderilecei zaman mesaj gnderecek kii, alacak mesaj gnderecei kiinin adn ya-
zar. Veritaban ise bir mesaj kaydedebilmesi iin kullancnn ID bilgisine ihtiya duyacaktr. Ve-
ritaban zerinde kullancnn adn parametre olarak alan ve IDsini dndren function yazn.
(Liste 1.25)

CREATE function KullaniciIdAl


(
@UserName nvarchar(50)
)
returns uniqueidentifier
As
begin
Declare @userId uniqueidentifier

Select @UserId =UserId From aspnet_Users Where [UserName] = @


username

return @userId
end

Liste 1.25: KullancIdAl function tanmlamas.


herkesburada.com 35

Yenimesaj.aspx sayfasna geri dnp arkada listesini dndrecek metodu tanmlayn.

public static List<string> uyeler = new List<string>();


[System.Web.Services.WebMethodAttribute(), System.Web.Script.
Services.ScriptMethodAttribute()]
public static string[] GetCompletionList(string prefixText,
int count, string contextKey)
{
SqlConnection con = new SqlConnection(ConfigurationManage
r.ConnectionStrings[LocalSqlServer].ConnectionString);
SqlCommand cmd = new SqlCommand(ArkadasListem,con);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue(@UserId, Membership.
GetUser(HttpContext.Current.User.Identity.Name).ProviderUserKey);
SqlDataAdapter da = new SqlDataAdapter(cmd);

DataTable dt = new DataTable();
da.Fill(dt);
uyeler.Clear();
foreach (DataRow dr in dt.Rows)
{
if (dr[UserName].ToString().StartsWith(prefixText))
uyeler.Add(dr[UserName].ToString());
}

return uyeler.ToArray();
}

Liste 1.26: Kullancnn arkada listesini otomatik dolduran metod.

Arkada listesini doldurduktan sonra yeni mesaj gndermek iin btnGonder button kontrolnn
Click olaynda yeni mesaj gnderme kodlarn yazn.

protected void btnGonder_Click(object sender, EventArgs e)


{
SqlConnection con = new SqlConnection(ConfigurationManage
r.ConnectionStrings[LocalSqlServer].ConnectionString);
SqlCommand cmd = new SqlCommand(Insert into mesajla
r(Kimden,Kime,MesajIcerik,Baslik,Tarih) values(@Kimden,dbo.
KullaniciIdAl(@Kime),@MesajIcerik,@Baslik,@Tarih), con);

cmd.Parameters.AddWithValue(@Kimden,Membership.
GetUser(User.Identity.Name).ProviderUserKey);
cmd.Parameters.AddWithValue(@Kime,txtKime.Text);
cmd.Parameters.AddWithValue(@MesajIcerik,txtMesaj.
Text);
cmd.Parameters.AddWithValue(@Baslik,txtBaslik.Text);
cmd.Parameters.AddWithValue(@Tarih,DateTime.Now );
36 Proje 1

int i = 0;
try
{
con.Open();
i = cmd.ExecuteNonQuery();
}
catch (SqlException ex)
{

throw ex;
}
finally
{
con.Close();
}

if (i == 1)
{
Response.Redirect(~/kullanici/mesajgonderildi.
aspx);
}
}

Liste 1.27: btnGonder button kontrol Click olay.

ekil 1.20: YeniMesaj.aspx sayfa tasarm grnm.

Mesaj gnderildikten sonra kullancya mesajn gittiine dair mesaj gnderilecek ve tekrar mesaj
gndermek isteyip istemediini sorulacak mesajgonderildi.aspx sayfasn Kullanici klasrne ek-
leyin ve master page setirmeyin.

<%@ Page Language=C# AutoEventWireup=true CodeFile=mesajgond


erildi.aspx.cs Inherits=Kullanici_mesajgonderildi %>

<!DOCTYPE html PUBLIC -//W3C//DTD XHTML 1.0 Transitional//EN


http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd>

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


<head runat=server>
herkesburada.com 37

<title>Mesaj Gnderildi</title>
<link href=~/Style/Genel.css rel=stylesheet type=text/
css />
</head>
<body>
<form id=form1 runat=server>
<div>
<br />
<asp:Label ID=Label1 runat=server Font-Size=Medium
ForeColor=Red Text=Mesajnz Gnderildi...></asp:Label><br />
<br />
<asp:LinkButton ID=LinkButton1 runat=server
OnClick=lnkYeniMesaj_Click>Yeni Mesaj</asp:LinkButton>
<asp:HyperLink ID=HyperLink1 runat=server
NavigateUrl=javascript:window.close();>Kapat</asp:HyperLink></
div>
</form>
</body>
</html>

Liste 1.28: Mesajgonderildi.aspx sayfas html tasarm.

Yeni Mesaj button kontrolnn Click olaynda yenimesaj.aspx sayfasna ynlendirme yapn.

protected void lnkYeniMesaj_Click(object sender, EventArgs e)


{
Response.Redirect(~/kullanici/yenimesaj.aspx);
}

Liste 1.29: lnkYeniMesaj button kontrol Click olay.

Bu aamadan sonra eklenen tm sayfalar herkesbu-


rada.master sayfasndan tretin ve default.aspx sayfa-
sndaki ekilde sol ve sa taraf olacak ekilde bln.
ekil 1.21: MesajGonderildi.
aspx tasarm grnm.

Mesaj gnderme ve gelen/giden mesajlar grntleme tamamlandktan sonra mesajoku.aspx


sayfasn Kullanici klasrne ekleyin.

<%@ Page Language=C# MasterPageFile=~/herkesburada.


master AutoEventWireup=true CodeFile=mesajoku.aspx.cs
Inherits=Kullanici_mesajoku Title=Untitled Page %>
<%@ Register Src=../Controls/KullaniciSolMenu.ascx TagName=Kul
laniciSolMenu TagPrefix=uc1 %>

<asp:Content ID=Content1 ContentPlaceHolderID=AnaIcerik


Runat=Server>
<div class=SolMenu>
38 Proje 1

<uc1:KullaniciSolMenu ID=KullaniciSolMenu1 runat=server


/>

</div>
<div class=KullaniciIcerik>
<asp:Label ID=lblGonderen runat=server ForeColor=Blue
Text=Gnderen : ></asp:Label>
der ki;
<br />
<br />
<asp:Label ID=lblBaslik runat=server Font-Bold=True
Text=Selamlar></asp:Label><br />
<br />
<asp:Label ID=lblMesaj runat=server Text=Label></asp:
Label>&nbsp;<br />
<br />
<asp:Button ID=btnSil runat=server OnClick=btnSil_Click
Text=Sil />
<asp:Button ID=btnYanitla runat=server
OnClick=btnYanitla_Click Text=Yantla /></div>
</asp:Content>
Liste 1.30: Mesajoku.aspx html tasarm.

Mesaj okutmak iin mesajoku.aspx sayfasnn code blmne Liste 1.31deki kodlar yazn.

protected void Page_Load(object sender, EventArgs e)


{

if (!Page.IsPostBack)
{
MesajOku();
}
}

void MesajOku()
{
if (Request.QueryString[mesaj] != null)
{
try
{
Guid g = new Guid(Request.QueryString[mesaj]);
SqlConnection con = new SqlConnection(Configurati
onManager.ConnectionStrings[LocalSqlServer].ConnectionString);
SqlCommand cmd = new SqlCommand(Select m.*,
[UserName] From Mesajlar m Inner join aspnet_Users a on a.UserId
= m.Kimden Where MesajId = @MesajId And Kime=@Kime, con);
herkesburada.com 39

cmd.Parameters.AddWithValue(@MesajId, g);
cmd.Parameters.AddWithValue(@Kime, Membership.
GetUser(User.Identity.Name).ProviderUserKey);

try
{
con.Open();
SqlDataReader rdr = cmd.ExecuteReader();
if (rdr.Read())
{
lblBaslik.Text = rdr[Baslik].ToString();
lblGonderen.Text = rdr[UserName].
ToString();
lblMesaj.Text = rdr[MesajIcerik].
ToString();

SqlCommand cmdGuncelle = new


SqlCommand(Update mesajlar Set OkunduMu=True Where MesajId=@
MesajId,con);
cmdGuncelle.Parameters.AddWithValue(@
MesajId, new Guid(Request.QueryString[mesaj]));
cmdGuncelle.ExecuteNonQuery();
}
else
{
Response.Redirect(~/kullanici/default.
aspx);
}
}
catch (SqlException ex)
{

throw ex;
}
finally { con.Close(); }

}
catch (FormatException ex)
{
Response.Redirect(mesajlarim.aspx);
}
}
}

Liste 1.31: MesajOku.aspx Page_Load olay ve MesajOku metodu.


40 Proje 1

Okunan mesaj cevaplamak ve silmek iin btnSil ve btnCevapla button kontrol Click olaylarna
Liste 1.32deki kodu ekleyin.

protected void btnSil_Click(object sender, EventArgs e)


{
if (Request.QueryString[mesaj] != null)
{
try
{
Guid g = new Guid(Request.QueryString[mesaj]);
}
catch { return; }
}
SqlConnection con = new SqlConnection(ConfigurationManage
r.ConnectionStrings[LocalSqlServer].ConnectionString);
SqlCommand cmd = new SqlCommand(Update mesajlar set
AliciyaGosterme = True Where MesajId = @MesajId, con);
cmd.Parameters.AddWithValue(@MesajId, new Guid(Request.
QueryString[mesaj]));
int i = 0;
try
{
con.Open();
i = cmd.ExecuteNonQuery();
}
catch (SqlException ex)
{

throw ex;
}
finally
{
con.Close();
}

if (i > 0) Response.Redirect(~/kullanici/mesajlarim.
aspx);

}
protected void btnYanitla_Click(object sender, EventArgs e)
{
Session[cevap] = Cvp : + lblBaslik.Text + | +
lblGonderen.Text; ;
Response.Redirect(~/kullanici/cevapla.aspx);
}

Liste 1.32: btnSil ve btnYanitla button kontrol Click olay.


herkesburada.com 41

MesajOku.aspx tasarm grnm ekil 1.22de gsterilmitir.

ekil 1.22: MesajOku.aspx tasarm grnm.

btnYanitla button kontrolne tkland zaman ynlendirilecek olan cevapla.aspx sayfasn Kulla-
nici klasrne ekleyin. Sayfay eklerken masterpage setirmeyi unutmayn.

<%@ Page Language=C# MasterPageFile=~/herkesburada.


master AutoEventWireup=true CodeFile=cevapla.aspx.cs
Inherits=Kullanici_cevapla Title=Untitled Page %>

<%@ Register Assembly=AjaxControlToolkit Namespace=AjaxControl


Toolkit TagPrefix=cc1 %>
<%@ Register Src=../Controls/KullaniciSolMenu.ascx TagName=Kul
laniciSolMenu TagPrefix=uc1 %>

<asp:Content ID=Content1 ContentPlaceHolderID=AnaIcerik


Runat=Server>
<div class=SolMenu>
<uc1:KullaniciSolMenu ID=KullaniciSolMenu1 runat=server
/>

</div>
<div class=KullaniciIcerik>
<div style=text-align:left>
<table style=width: 423px>
<tr>
<td style=width: 55px>
</td>
<td style=width: 69px>
</td>
42 Proje 1

<td style=width: 69px>


</td>
<td style=width: 100px>
</td>
</tr>
<tr>
<td style=width: 55px>
Kime :
</td>
<td style=width: 69px>
<asp:TextBox ID=txtKime runat=server></
asp:TextBox></td>
<td style=width: 69px>
</td>
<td style=width: 100px>
</td>
</tr>
<tr>
<td style=width: 55px>
Konu :
</td>
<td colspan=3>
<asp:TextBox ID=txtBaslik runat=server
Width=100%></asp:TextBox></td>
</tr>
<tr>
<td style=width: 55px; height: 18px
valign=top>
Mesaj :
</td>
<td colspan=3 style=height: 18px>
<asp:TextBox ID=txtMesaj runat=server
Height=107px TextMode=MultiLine Width=100%></asp:TextBox></
td>
</tr>
<tr>
<td style=width: 55px>
</td>
<td style=width: 69px>
<asp:Button ID=btnGonder runat=server
Text=Gnder OnClick=btnGonder_Click />
</td>
<td style=width: 69px>
<asp:Button ID=btnIptal runat=server
Text=ptal OnClick=btnIptal_Click /></td>
herkesburada.com 43

<td style=width: 100px>


</td>
</tr>
<tr>
<td style=width: 55px; height: 18px>
</td>
<td style=height: 18px colspan=3>
&nbsp;<cc1:AutoCompleteExtender ID=AutoCompl
eteExtender1 runat=server ServiceMethod=GetCompletionList
UseContextKey=True TargetControlID=txt
Kime>
</cc1:AutoCompleteExtender>
</td>
</tr>
</table>

</div>
</div>
</asp:Content>

Liste 1.33: Cevapla.aspx sayfas html tasarm.

Bu sayfada mesaj gnderilecek kii kullancnn arkadaysa, mesaj gnderilecek kiinin ad oto-
matik tamamlanacaktr. Cevapla.aspx.cs dosyasna Liste 1.34de belirtilen metodu aynen yazn.

Sayfa ilk yklendiinde mesaja cevap yazlaca iin sessiondan gelen konu bilgisini ilgili textbox
kontrolne yazdrn ve btnGonder butonuna tkland zaman mesaj gnderme kodunu yazn.

protected void Page_Load(object sender, EventArgs e)


{
if (!Page.IsPostBack)
{
if (Session[cevap] != null)
{

txtBaslik.Text = Session[cevap].ToString().
Split(|)[0];
txtKime.Text = Session[cevap].ToString().
Split(|)[1];
}
}
}
protected void btnGonder_Click(object sender, EventArgs e)
{
SqlConnection con = new SqlConnection(ConfigurationManage
r.ConnectionStrings[LocalSqlServer].ConnectionString);
44 Proje 1

SqlCommand cmd = new SqlCommand(Insert into mesajla


r(Kimden,Kime,MesajIcerik,Baslik,Tarih) values(@Kimden,dbo.
KullaniciIdAl(@Kime),@MesajIcerik,@Baslik,@Tarih), con);
cmd.Parameters.AddWithValue(@Kimden, Membership.
GetUser(User.Identity.Name).ProviderUserKey);
cmd.Parameters.AddWithValue(@Kime, txtKime.Text);
cmd.Parameters.AddWithValue(@MesajIcerik, txtMesaj.
Text);
cmd.Parameters.AddWithValue(@Baslik, txtBaslik.Text);
cmd.Parameters.AddWithValue(@Tarih, DateTime.Now);

int i = 0;
try
{
con.Open();
i = cmd.ExecuteNonQuery();
}
catch (SqlException ex)
{

throw ex;
}
finally
{
con.Close();
}

if (i == 1)
{
Response.Redirect(~/kullanici/mesajlarim.aspx);
}
}
protected void btnIptal_Click(object sender, EventArgs e)
{
Response.Redirect(~/kullanici/mesajlarim.aspx);
}

Liste 1.34: Cevapla.aspx sayfas Page_Load ve btnGonder button Click olaylar.

Cevapla.aspx sayfas tasarm grnm ekil 1.23de gsterilmitir.


herkesburada.com 45

ekil 1.23: Cevapla.aspx sayfa tasarm grnm.

Bu aamaya kadar yaplanlar test etmek iin uygulamay altrn ve kayt olun. Kendi kendinize
yeni bir mesaj gnderin. Gnderdiiniz mesaj gelen mesajlarda ve giden mesajlarda grnyor
ise, gelen mesajlardaki grnm okunmam mesaj olarak grnyor ve mesaj okuduktan sonra
okundu olarak iaretleniyorsa u ana kadar yaplanlar alyor demektir. Aksi bir durum var ise
yazdnz kodlar test edin.

Kullanclarn kiisel bilgilerini ve profil bilgilerini girebilecekleri bilgiler.aspx sayfasn Kullanici kla-
srne ekleyin. Bu sayfadaki baz bilgiler veritabanndan, dier bilgiler ise web.config dosyasnda
tanmlanan profile zerinden alnacaktr.

ekil 1.24: Bilgiler.aspx sayfa tasarm grnm.


46 Proje 1

Bilgiler.aspx sayfas zerindeki ehir, Eitm Durumu, Meslek ve Tuttuu Takm bilgisi veritaba-
nndan alnyor. Dier bilgiler ise profiledan alnyor.

<%@ Page Language=C# MasterPageFile=~/herkesburada.


master AutoEventWireup=true CodeFile=bilgiler.aspx.cs
Inherits=Kullanici_bilgiler Title=Untitled Page %>

<%@ Register Assembly=System.Web.Extensions, Version=3.5.0.0,


Culture=neutral, PublicKeyToken=31bf3856ad364e35
Namespace=System.Web.UI TagPrefix=asp %>
<%@ Register Src=../Controls/KullaniciSolMenu.ascx TagName=Kul
laniciSolMenu TagPrefix=uc1 %>
<asp:Content ID=Content1 ContentPlaceHolderID=AnaIcerik
Runat=Server>
<div class=SolMenu>
<uc1:KullaniciSolMenu ID=KullaniciSolMenu1 runat=server
/>

</div>
<div class=KullaniciIcerik>
<table style=width: 100%>
<tr>
<td style=width: 280px>
</td>
<td style=width: 530px>
</td>
<td style=width: 494px>
</td>
</tr>
<tr>
<td style=width: 280px; height: 26px;>
Ad :</td>
<td style=width: 530px; height: 26px;>
<asp:TextBox ID=txtAd runat=server
Width=100%></asp:TextBox></td>
<td style=width: 494px; height: 26px;>
</td>
</tr>
<tr>
<td style=width: 280px; height: 26px;>
Soyad :</td>
<td style=width: 530px; height: 26px;>
<asp:TextBox ID=txtSoyad runat=server
Width=100%></asp:TextBox></td>
<td style=width: 494px; height: 26px;>
</td>
herkesburada.com 47

</tr>
<tr>
<td style=width: 280px>
Doum Tarihi :</td>
<td style=width: 530px>
<asp:TextBox ID=txtDogumTarihi runat=server
Width=100%></asp:TextBox></td>
<td style=width: 494px>
</td>
</tr>
<tr>
<td style=width: 280px; height: 24px;>
Cinsiyet</td>
<td style=width: 530px; height: 24px>
<asp:DropDownList ID=drpCinsiyet runat=server>
<asp:ListItem Value=True>Bay</asp:ListItem>
<asp:ListItem Value=False>Bayan</asp:
ListItem>
</asp:DropDownList></td>
<td style=width: 494px; height: 24px;>
</td>
</tr>
<tr>
<td style=width: 280px; height: 1px;>
Yaadnz ehir :
</td>
<td style=width: 530px; height: 1px;>
<asp:DropDownList ID=drpYasadiginizSehir
runat=server DataSourceID=SqlDataSource1
DataTextField=SehirAdi DataValueField=SehirId>
</asp:DropDownList></td>
<td style=width: 494px; height: 1px;>
</td>
</tr>
<tr>
<td style=width: 280px>
Eitim Durumu :
</td>
<td style=width: 530px>
<asp:DropDownList ID=drpEgitimDurumu
runat=server DataSourceID=SqlDataSource2 DataTextField=Egiti
mDurumAdi DataValueField=EgitimDurumId>
</asp:DropDownList></td>
<td style=width: 494px>
</td>
48 Proje 1

</tr>
<tr>
<td style=width: 280px; height: 24px>
Meslek :
</td>
<td style=width: 530px; height: 24px>
<asp:DropDownList ID=drpMeslek runat=server
DataSourceID=SqlDataSource3 DataTextField=MeslekAdi DataValue
Field=MeslekId>
</asp:DropDownList></td>
<td style=width: 494px; height: 24px>
</td>
</tr>
<tr>
<td style=width: 280px>
Fobileriniz :
</td>
<td style=width: 530px>
<asp:TextBox ID=txtFobi runat=server
TextMode=MultiLine Width=100%></asp:TextBox></td>
<td style=width: 494px>
</td>
</tr>
<tr>
<td style=width: 280px>
Hobileriniz :
</td>
<td style=width: 530px>
<asp:TextBox ID=txtHobi runat=server
TextMode=MultiLine Width=100%></asp:TextBox></td>
<td style=width: 494px>
</td>
</tr>
<tr>
<td style=width: 280px; height: 40px;>
Kendinizi Anlatn :
</td>
<td style=width: 530px; height: 40px;>
<asp:TextBox ID=txtHakkinda runat=server
TextMode=MultiLine Width=100%></asp:TextBox></td>
<td style=width: 494px; height: 40px;>
</td>
</tr>
<tr>
<td style=width: 280px>
herkesburada.com 49

Okuduunuz Kitaplar :</td>


<td style=width: 530px>
<asp:TextBox ID=txtOkuduguKitaplar
runat=server TextMode=MultiLine Width=100%></asp:TextBox></
td>
<td style=width: 494px>
</td>
</tr>
<tr>
<td style=width: 280px>
Tuttuunuz Takm :
</td>
<td style=width: 530px>
<asp:DropDownList ID=drpTakim runat=server
DataSourceID=SqlDataSource4 DataTextField=TakimAdi DataValueF
ield=TakimId>
</asp:DropDownList></td>
<td style=width: 494px>
</td>
</tr>
<tr>
<td style=width: 280px; height: 40px;>
Yaptnz Sporlar</td>
<td style=width: 530px; height: 40px;>
<asp:TextBox ID=txtYaptigiSporlar runat=server
TextMode=MultiLine Width=100%></asp:TextBox></td>
<td style=width: 494px; height: 40px;>
</td>
</tr>
<tr>
<td style=width: 280px>
Sigara kullanrmsnz ? :</td>
<td style=width: 530px>
<asp:DropDownList ID=drpSigara runat=server>
<asp:ListItem Value=True>Evet</asp:ListItem>
<asp:ListItem Value=False>Hayr</asp:
ListItem>
</asp:DropDownList></td>
<td style=width: 494px>
</td>
</tr>
<tr>
<td style=width: 280px>
Alkol kullanrmsnz ?&nbsp; :</td>
<td style=width: 530px>
50 Proje 1

<asp:DropDownList ID=drpAlkol runat=server>


<asp:ListItem Value=True>Evet</asp:ListItem>
<asp:ListItem Value=False>Hayr</asp:
ListItem>
</asp:DropDownList></td>
<td style=width: 494px>
</td>
</tr>
<tr>
<td style=width: 280px>
Profilimi Arkadalarm Grsn</td>
<td style=width: 530px><asp:DropDownList
ID=drpYetki runat=server>
<asp:ListItem Value=True>Evet</asp:ListItem>
<asp:ListItem Value=False>Hayr</asp:ListItem>
</asp:DropDownList></td>
<td style=width: 494px>
</td>
</tr>
<tr>
<td style=width: 280px valign=top>
</td>
<td style=width: 530px>
&nbsp;</td>
<td style=width: 494px valign=top>
</td>
</tr>
<tr>
<td style=width: 280px>
</td>
<td style=width: 530px>
<asp:Button ID=btGuncelle runat=server
OnClick=btGuncelle_Click Text=Gncelle /></td>
<td style=width: 494px>
</td>
</tr>
<tr>
<td style=width: 280px>
</td>
<td style=width: 530px>
</td>
<td style=width: 494px>
</td>
</tr>
</table>
herkesburada.com 51

<asp:SqlDataSource ID=SqlDataSource1 runat=server


ConnectionString=<%$ ConnectionStrings:ConStrHerkesBurada %>
SelectCommand=SELECT [SehirId], [SehirAdi] FROM
[Sehirler]></asp:SqlDataSource>
<asp:SqlDataSource ID=SqlDataSource2 runat=server
ConnectionString=<%$ ConnectionStrings:ConStrHerkesBurada %>
SelectCommand=SELECT [EgitimDurumId], [EgitimDurumAdi]
FROM [EgitimDurumlari]>
</asp:SqlDataSource>
<asp:SqlDataSource ID=SqlDataSource3 runat=server
ConnectionString=<%$ ConnectionStrings:ConStrHerkesBurada %>
SelectCommand=SELECT [MeslekId], [MeslekAdi] FROM
[Meslekler]></asp:SqlDataSource>
<asp:SqlDataSource ID=SqlDataSource4 runat=server
ConnectionString=<%$ ConnectionStrings:ConStrHerkesBurada %>
SelectCommand=SELECT [TakimId], [TakimAdi] FROM
[Takimlar] ORDER BY [TakimAdi]></asp:SqlDataSource>
</div>
</asp:Content>

Liste 1.35: Bilgiler.aspx sayfas html grnm.

Sayfa ilk yklendiinde profil bilgilerinin grntlenmesini, guncelle butonuna tkland zaman
profil bilgilerinin gncellenecei Liste 1.36daki kodu Liste.aspx.cs dosyasna yazn.

protected void Page_Load(object sender, EventArgs e)


{
if (!Page.IsPostBack)
{
BilgileriGoster();
}
}

void BilgileriGoster()
{
txtAd.Text = Profile.KisiselBilgiler.Ad;
txtSoyad.Text = Profile.KisiselBilgiler.Soyad;
txtDogumTarihi.Text = Profile.KisiselBilgiler.DogumTarihi.
ToShortDateString();
drpCinsiyet.SelectedValue = Profile.KisiselBilgiler.
Cinsiyet.ToString();

// Eitim Durumu
if (!string.IsNullOrEmpty(Profile.EgitimDurumId))
{
drpEgitimDurumu.SelectedValue = Profile.EgitimDurumId;
}
52 Proje 1

// Takimlar
if (!string.IsNullOrEmpty(Profile.TuttuguTakimId))
{
drpTakim.SelectedValue = Profile.TuttuguTakimId;
}

// ehir
if (!string.IsNullOrEmpty(Profile.KisiselBilgiler.
YasadigiSehirId))
{
drpYasadiginizSehir.SelectedValue = Profile.
KisiselBilgiler.YasadigiSehirId;
}

// Meslek
if (!string.IsNullOrEmpty(Profile.MeslekId))
{
drpMeslek.SelectedValue = Profile.MeslekId;
}

txtYaptigiSporlar.Text = Profile.YaptigiSporlar;
txtFobi.Text = Profile.Fobileri;
txtHobi.Text = Profile.Hobileri;
txtOkuduguKitaplar.Text = Profile.OkuduguKitaplar;
txtHakkinda.Text = Profile.Hakkinda;
drpAlkol.SelectedValue = Profile.AlkolKullanirMi.
ToString();
drpSigara.SelectedValue = Profile.SigaraKullanirMi.
ToString();
drpYetki.SelectedValue = Profile.ProfilYetki.ToString();


protected void btGuncelle_Click(object sender, EventArgs e)
{

Profile.KisiselBilgiler.Ad = txtAd.Text;
Profile.AlkolKullanirMi = Convert.ToBoolean(drpAlkol.
SelectedValue);
Profile.SigaraKullanirMi = Convert.ToBoolean(drpSigara.
SelectedValue);
Profile.Fobileri = txtFobi.Text;
herkesburada.com 53

Profile.Hobileri = txtHobi.Text;
Profile.OkuduguKitaplar = txtOkuduguKitaplar.Text;
Profile.Hakkinda = txtHakkinda.Text;
Profile.KisiselBilgiler.Soyad = txtSoyad.Text;
Profile.KisiselBilgiler.DogumTarihi = Convert.ToDateTime(
txtDogumTarihi.Text);
Profile.KisiselBilgiler.Cinsiyet = Convert.
ToBoolean(drpCinsiyet.SelectedValue);
Profile.YaptigiSporlar = txtYaptigiSporlar.Text;
Profile.KisiselBilgiler.YasadigiSehirId =
drpYasadiginizSehir.SelectedValue;
Profile.MeslekId = drpMeslek.SelectedValue;
Profile.TuttuguTakimId = drpTakim.SelectedValue;
Profile.EgitimDurumId = drpEgitimDurumu.SelectedValue;
Profile.ProfilYetki = Convert.ToBoolean(drpYetki.
SelectedValue);
}

Liste 1.36: Bilgiler.aspx sayfas kod grnm.

Kendi kullanc bilgilerinizi girip bilgiler.aspx sayfasnn durumunu test edin. Profil bilgilerinde kul-
lancnn kendi resmini gncellemesini ve deitirmesini salamak iin Kullanici klasr ierisine
profilresmi.aspx sayfas ekleyin. Default.aspxte yapld gibi sayfay divlere bln. KullaniciSol-
Menu.ascx User Control ierisindeki Image kontrolne link verilmiti. Bu linke tkland zaman
eklenen sayfaya ynlendirilecektir. ProfilResmi.aspx sayfasna gerekli Label ve FileUpload kon-
troln ekleyin.

<%@ Page Language=C# MasterPageFile=~/herkesburada.


master AutoEventWireup=true CodeFile=profilresmi.aspx.cs
Inherits=Kullanici_profilresmi Title=Untitled Page %>
<%@ Register Src=../Controls/KullaniciSolMenu.ascx TagName=Kul
laniciSolMenu TagPrefix=uc1 %>

<asp:Content ID=Content1 ContentPlaceHolderID=AnaIcerik


Runat=Server>
<div class=SolMenu>
<uc1:KullaniciSolMenu ID=KullaniciSolMenu1 runat=server
/>

</div>
<div class=KullaniciIcerik>
<br />
<table style=width: 100%>
<tr>
<td rowspan=5 style=width: 100px>
<center><asp:Image ID=imgUser runat=server
AlternateText=Profil resminiz /></center></td>
<td style=width: 100px>
54 Proje 1

</td>
<td style=width: 100px>
</td>
<td style=width: 100px>
</td>
</tr>
<tr>
<td colspan=3>
Yeni Resim Se</td>
</tr>
<tr>
<td style=width: 100px>
</td>
<td style=width: 100px>
</td>
<td style=width: 100px>
</td>
</tr>
<tr>
<td colspan=2>
<asp:FileUpload ID=FileUpload1 runat=server
Width=345px /></td>
<td style=width: 100px>
</td>
</tr>
<tr>
<td style=width: 100px>
</td>
<td style=width: 100px>
</td>
<td style=width: 100px>
</td>
</tr>
<tr>
<td style=width: 100px>
</td>
<td style=width: 100px>
<asp:Button ID=btnGuncelle runat=server
OnClick=btnGuncelle_Click Text=Gncelle /></td>
<td style=width: 100px>
</td>
<td style=width: 100px>
</td>
</tr>
<tr>
herkesburada.com 55

<td style=width: 100px>


</td>
<td style=width: 100px>
</td>
<td style=width: 100px>
</td>
<td style=width: 100px>
</td>
</tr>
<tr>
<td style=width: 100px>
</td>
<td style=width: 100px>
</td>
<td style=width: 100px>
</td>
<td style=width: 100px>
</td>
</tr>
<tr>
<td style=width: 100px>
</td>
<td style=width: 100px>
</td>
<td style=width: 100px>
</td>
<td style=width: 100px>
</td>
</tr>
</table>

</div>
</asp:Content>

Liste 1.37: ProfilResmi.aspx html tasarm.

Gerekli html tasarm yapldktan sonra ekil 1.25deki grnty elde edeceksiniz.
56 Proje 1

ekil 1.25: ProfilResmi.aspx sayfa tasarm grnm.

Kullanclardan gelecek resimler farkl formatlarda olabilir. rnein bir kullanc kendi resmini *.gif
uzants ile gnderirken, dier kullanc *.jpg olarak gnderebilir. Bu sorun iin elinizde 2 alternatif
vardr. Bunlardan ilki kullancnn gnderdii dosyann uzantsn alp dosyay uzants ile kay-
detmek, dieri ise sabit bir uzant ismi vermektir. Bu uygulama ierisinde kullanc resimleri iin
*.uyeresim olarak bir uzant kullanlr. Herhangi bir resim formatnda olduu srece sabit bir for-
mat sorun karmayacaktr. Bunun haricinde karlalacak olduunuz sorun ise resimlerin isimle-
ridir. Kullanclarn gnderecei resimlerin isimlerini akmayacak ekilde yeniden adlandrmanz
gereklidir, bunun da en iyi yolu GUID kullanmaktr. btnGuncelle button kontrol Click olayna Liste
1.38deki kodu yazn.

protected void btnGuncelle_Click(object sender, EventArgs e)


{
string resimAdi = Guid.NewGuid().ToString();
try
{
FileUpload1.SaveAs(Server.MapPath(~/UyeResimleri/)
+ resimAdi + .uyeResim);
Profile.ProfilResmi = resimAdi + .uyeResim;
Response.Redirect(profilresmi.aspx);

}
catch (HttpException ex)
{
throw ex;
}

}

Liste 1.38: btnGuncelle button Click olay.


herkesburada.com 57

Form ilk yklendiinde mevcut resmi gsterebilmek iin ProfilResmi.aspx sayfasnn Load olayn-
da mevcut resmi gsterin.

protected void Page_Load(object sender, EventArgs e)


{
imgUser.ImageUrl = Server.MapPath(~/UyeResimleri/) +
Profile.ProfilResmi;
}

Liste 1.39: ProfilResmi.aspx Page Load olay.

Arkadalarn profil bilgilerinin ve albmlerinin grlecei ve mesaj gndermeyi salayacak olan


arkadaslarim.aspx sayfasn Kullanici klasrne ekleyin ve Default.aspx sayfasndaki gibi 2 par-
aya bln. Mterinin istediine gre arkada olabilmek iin bir kii dierine arkadalk teklif
edecek yani kontaklarna eklemek iin izin istemi olacak. Teklif etme ilemi ilerleyen blmlerde
yaplacak. lk nce kullancya kendine gelen teklifleri gsterecek olarak kontroller eklenecek.
Daha sonra kullanc listesini gsterecek olan DataList kontrol eklenecek. Bu kontrol ile arkada-
lara mesaj gnderimi, Profil grntleme ve Album grntleme yaplabilecek.

<%@ Page Language=C# MasterPageFile=~/herkesburada.


master AutoEventWireup=true CodeFile=arkadaslarim.aspx.cs
Inherits=Kullanici_arkadaslarim Title=Arkadalarm %>
<%@ Register Src=../Controls/KullaniciSolMenu.ascx TagName=Kul
laniciSolMenu TagPrefix=uc1 %>

<asp:Content ID=Content1 ContentPlaceHolderID=AnaIcerik


Runat=Server>
<div class=SolMenu>
<uc1:KullaniciSolMenu ID=KullaniciSolMenu1 runat=server
/>

</div>
<div class=KullaniciIcerik>
<br />
&nbsp;<asp:LinkButton ID=LinkButton2 runat=server
ForeColor=Blue OnClick=LinkButton2_Click>Gelen Teklifler</
asp:LinkButton>
<asp:LinkButton ID=lnkTeklifSayisi runat=server
ForeColor=Red OnClick=lnkTeklifSayisi_Click></asp:
LinkButton><br />
<br />
<asp:UpdatePanel ID=UpdatePanel1 runat=server>
<ContentTemplate>
<asp:DataList id=dtArkadaslar runat=server ForeColor=#333333
OnItemCommand=dtArkadaslar_ItemCommand Width=632px DataSource
ID=SqlDataSource1 CellPadding=4>
<FooterStyle BackColor=#5D7B9D Font-Bold=True
ForeColor=White></FooterStyle>
58 Proje 1

<AlternatingItemStyle BackColor=White ForeColor=#284775></


AlternatingItemStyle>

<ItemStyle BackColor=#F7F6F3 ForeColor=#333333></ItemStyle>

<SelectedItemStyle BackColor=#E2DED6 Font-Bold=True


ForeColor=#333333></SelectedItemStyle>

<HeaderStyle BackColor=#5D7B9D Font-Bold=True


ForeColor=White></HeaderStyle>
<ItemTemplate>
<table style=width: 100%>
<tr>
<td rowspan=2 style=width: 100px>


<img src=<%# ResimAdres(DataBinder.
Eval(Container.DataItem, UserName).ToString()) %> alt=<%#
Eval(UserName).ToString() %> resmi />
</td>

<td style=width: 100px>
</td>
<td rowspan=3 style=width: 100px
valign=top>
<asp:LinkButton ID=LinkButton3
runat=server ForeColor=Blue CommandName=MesajGonder
CommandArgument=<%# Eval(UserName) %>>Mesaj Gnder</asp:
LinkButton><br />
<asp:LinkButton ID=LinkButton4
runat=server ForeColor=Blue CommandName=Sil
CommandArgument=<%# Eval(KullaniciId) %> OnClientClick=return
confirm(Arkadan silmekten emin misiniz ?)>Sil</asp:
LinkButton><br />
<asp:LinkButton ID=LinkButton1
runat=server
CommandName=AlbumGoruntule
ForeColor=Blue CommandArgument=<%# DataBinder.Eval(Container.
DataItem, UserName)%>>Album Grntle</asp:LinkButton><br />
<asp:LinkButton ID=LinkButton5
runat=server CommandArgument=<%# DataBinder.Eval(Container.
DataItem, UserName) %>
CommandName=ProfilGoruntule
ForeColor=Blue>Profil Grntle</asp:LinkButton></td>
</tr>
<tr>
<td style=width: 100px>
</td>
herkesburada.com 59

</tr>
<tr>
<td style=width: 100px>
&nbsp;<asp:Label ID=UserNameLabel
runat=server Text=<%# Eval(UserName) %>></asp:Label></td>
<td style=width: 100px>
</td>
</tr>
</table>
<br />
<br />

</ItemTemplate>
</asp:DataList><asp:SqlDataSource id=SqlDataSource1
runat=server SelectCommandType=StoredProcedure SelectComm
and=ArkadasListem ConnectionString=<%$ ConnectionStrings:
ConStrHerkesBurada %>>
<SelectParameters>
<asp:SessionParameter Name=UserId
SessionField=UserId />
</SelectParameters>
</asp:SqlDataSource>
</ContentTemplate>
</asp:UpdatePanel>
</div>
</asp:Content>

Liste 1.40: Arkadaslarim.aspx html tasarm grnts.

Sayfann grsel kts ekil 1.26da verilmitir.

ekil 1.26: Arkadaslarim.aspx sayfa kts.


60 Proje 1

Arkadaslarim.aspx sayfas ilk yklendii zaman sayfa zerinde kullancya gelen cevaplanmam
teklif saylarn gstermek iin TeklifSayisi() metodunu yazn ve ekrana teklif saysn yaz-
drn.

protected void Page_Load(object sender, EventArgs e)


{
if (!Page.IsPostBack)
{
TeklifSayisi();
}
}

void TeklifSayisi()
{
SqlConnection con = new SqlConnection(ConfigurationManage
r.ConnectionStrings[LocalSqlServer].ConnectionString);
SqlCommand cmd = new SqlCommand(Select Count(Kim) From
ArkadasListesi where kim=@UserId and OnaylandiMi = False,
con);
cmd.Parameters.AddWithValue(@UserId, Membership.
GetUser(User.Identity.Name).ProviderUserKey);
try
{
con.Open();
int i = Convert.ToInt32(cmd.ExecuteScalar());
if (i > 0)
{
lnkTeklifSayisi.Text = ( + i.ToString() + );
}
else
{
lnkTeklifSayisi.Text = ;
}
}
catch (Exception)
{

throw;
}
finally { con.Close(); }

Liste 1.41: Arkadaslarim.aspx.cs Page_Load olay ve TeklifSayisi metodu.


herkesburada.com 61

lnkTeklifSayisi ismindeki Linkbutton kontrolnn text zellii balangta bo brakld. Eer teklif
varsa Text dolacak ve dolaysyla tklanabilir bir hale gelecek. Eer tklanabiliniyor ise tekliflerim.
aspx sayfasna ynlendirin.

protected void lnkTeklifSayisi_Click(object sender, EventArgs


e)
{
Response.Redirect(~/Kullanici/Tekliflerim.aspx);
}

Liste 1.42: lnkTeklifSayisi linkbutton kontrol Click olay.

Arkadalar listeleyecek olan datalist kontrolnde bir eleman gsterilirken o elemana ait yani, sa-
tra ait bir ilem yaplacak ise RowCommand kullanlmas gerekir. Tanmlanan datalist kontroln-
de birden fazla ilem yaplacak ve yaplacak ilemler CommandName ierisinde tanmlanacak.
rnein:

<asp:LinkButton ID=LinkButton1 runat=server


CommandName=AlbumGoruntule
ForeColor=Blue CommandArgument=<%# DataBinder.Eval(Container.
DataItem, UserName)%>>Album Grntle</asp:LinkButton>

Liste 1.43: rnek bir Datalist Command tanmlamas.

Burada CommandName olarak AlbumGoruntule ismi verildi, Albumu grntlenecek olan kullanc
bilgisi ise CommandArgument ierisinde gnderildi. Bu ekilde Commandlere gre ilem yapa-
cak olan datalistin RowCommand olayn hazrlayn.

protected void dtArkadaslar_ItemCommand(object source,


DataListCommandEventArgs e)
{
if (e.CommandName == MesajGonder)
{
Session[cevap] = + | + e.CommandArgument.
ToString();
Response.Redirect(~/kullanici/cevapla.aspx);
}
else if (e.CommandName == AlbumGoruntule)
{
Response.Redirect(~/kullanici/albumler.aspx?album=
+ e.CommandArgument.ToString());
}
else if (e.CommandName == ProfilGoruntule)
{
Response.Redirect(profildetay.aspx?profil= +
e.CommandArgument.ToString());
}
else
{
62 Proje 1

SqlConnection con = new SqlConnection(ConfigurationMa


nager.ConnectionStrings[LocalSqlServer].ConnectionString);
SqlCommand cmd = new SqlCommand(delete from
ArkadasListesi Where Kim=@Kim And Kimin=@Kimin, con);
cmd.Parameters.AddWithValue(@Kim, new Guid(e.
CommandArgument.ToString()));
cmd.Parameters.AddWithValue(@Kimin, Membership.
GetUser(User.Identity.Name).ProviderUserKey);

try
{
con.Open();
cmd.ExecuteNonQuery();
}
catch (Exception)
{

throw;
}
finally
{
con.Close();
}

dtArkadaslar.DataBind();

}

}

Liste 1.44: dtArkadaslar datalist kontrol ItemCommand olay.

Kullanclarn resimlerini gsterebilmek iin Arkadaslar.aspx.cs ierisine ResimAdres() isminde


metod tanmlayn. Bu metod kullancnn resim adn alp datalist kontrol ierisinde gstermesini
salayacak. Kullancnn profil resmi veritaban yerine kullancnn Profile bilgisi ierisinde tutuldu-
u iin byle bir yntem kullanld.

// Arkada listesinde kullancnn resmini dndrr.


protected string ResimAdres(string username)
{
string resimAdres = Profile.GetProfile(username).
ProfilResmi;
return @../UyeResimleri/ + resimAdres;
}

Liste 1.45: Kullancnn resim adn dndrmeyi salayan metod.


herkesburada.com 63

Bu metod ise DataList ierisinde Liste 1.46daki ekilde kullanld.

<img src=<%# ResimAdres(DataBinder.Eval(Container.DataItem,


UserName).ToString()) %> alt=<%# Eval(UserName).ToString()
%> resmi />

Liste 1.46: Datalist ierisinden metod armak.

Kullancya gelen teklifleri gsterecek olan tekliflerim.aspx sayfasn Kullanici klasrne ekleyin.
Eklenen teliflerim.aspx sayfasnda kullancya gelen teklifler update panel ierisindeki datagrid
kontrol ierisinde gsteriliyor.

<%@ Page Language=C# MasterPageFile=~/herkesburada.


master AutoEventWireup=true CodeFile=tekliflerim.aspx.cs
Inherits=Kullanici_tekliflerim Title=Tekliflerim %>
<%@ Register Src=../Controls/KullaniciSolMenu.ascx TagName=Kul
laniciSolMenu TagPrefix=uc1 %>

<asp:Content ID=Content1 ContentPlaceHolderID=AnaIcerik


Runat=Server>
<div class=SolMenu>
<uc1:KullaniciSolMenu ID=KullaniciSolMenu1 runat=server
/>

</div>
<div class=KullaniciIcerik>
<br />
Teklif listeniz.<br />
<br />
<asp:UpdatePanel ID=UpdatePanel1 runat=server>
<ContentTemplate>
<asp:GridView ID=grdTeklifler runat=server
AllowPaging=True AllowSorting=True
AutoGenerateColumns=False CellPadding=4 DataSourceID=
SqlDataSource1 ForeColor=#333333
GridLines=None Width=606px DataKeyNames=Kim OnR
owCommand=grdTeklifler_RowCommand EmptyDataText=Listenizde
cevapsz teklifiniz bulunmuyor...>
<FooterStyle BackColor=#5D7B9D Font-Bold=True
ForeColor=White />
<Columns>
<asp:HyperLinkField DataNavigateUrlFields=UserName
DataNavigateUrlFormatString=~/kullanici/profildetay.aspx?type=r&
amp;value={0}
DataTextField=UserName HeaderText=Teklifte
Bulunan />
<asp:TemplateField ShowHeader=False>
<ItemTemplate>
64 Proje 1

<asp:LinkButton ID=LinkButton2
runat=server CausesValidation=False CommandName=Onayla
Text=Onayla CommandArgument=<%#
Eval(Kimin) %>></asp:LinkButton>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField ShowHeader=False>
<ItemTemplate>
<asp:LinkButton ID=LinkButton1
runat=server OnClientClick=return
confirm(Bu teklifi reddetmek istediinizden emin misiniz?)
CausesValidation=False CommandName=Sil
CommandArgument=<%# Eval(Kimin) %>
Text=Sil></asp:LinkButton>
</ItemTemplate>
</asp:TemplateField>
</Columns>
<RowStyle BackColor=#F7F6F3 ForeColor=#333333 />
<EditRowStyle BackColor=#999999 />
<SelectedRowStyle BackColor=#E2DED6 Font-Bold=True
ForeColor=#333333 />
<PagerStyle BackColor=#284775 ForeColor=White
HorizontalAlign=Center />
<HeaderStyle BackColor=#5D7B9D Font-Bold=True
ForeColor=White />
<AlternatingRowStyle BackColor=White ForeColor=#284775
/>
</asp:GridView>
<asp:SqlDataSource ID=SqlDataSource1 runat=server
ConnectionString=<%$ ConnectionStrings:ConStrHerkesBurada %>
SelectCommand=SELECT aspnet_Users.UserName,
ArkadasListesi.Kim, ArkadasListesi.Kimin FROM ArkadasListesi
INNER JOIN aspnet_Users &#13;&#10;ON ArkadasListesi.Kimin
= aspnet_Users.UserId WHERE ArkadasListesi.OnaylandiMi =
&#13;&#10;False And (ArkadasListesi.Kim = @UserId)>
<SelectParameters>
<asp:SessionParameter Name=UserId
SessionField=UserId />
</SelectParameters>
</asp:SqlDataSource>
</ContentTemplate>
</asp:UpdatePanel>
</div>
</asp:Content>

Liste 1.47: Tekliflerim.aspx html tasarm.


herkesburada.com 65

Eer kullancnn bir teklifi yoksa Listenizde cevapsz teklifiniz bulunmuyor... mesaj gsterilir.
Bu yazy datagrid kontrolnn EmptyDataText zelliini kullanarak yapn. Gelen teklifi onayla-
mak iin veya silmek iin DataList kontrolnn RowCommand olayn kullann.

protected void grdTeklifler_RowCommand(object sender,


GridViewCommandEventArgs e)
{

SqlConnection con = new SqlConnection(ConfigurationManage


r.ConnectionStrings[LocalSqlServer].ConnectionString);

SqlCommand cmd = new SqlCommand();



if (e.CommandName == Onayla)
{
cmd.CommandText = Update ArkadasListesi Set
OnaylandiMi=True Where Kim=@UserId And Kimin = @Isteyen And
OnaylandiMi=False;
}
else
{
cmd.CommandText = Delete from ArkadasListesi Where
Kim=@UserId And Kimin = @Isteyen And OnaylandiMi=False;

}
cmd.Parameters.AddWithValue(@UserId, new
Guid(Session[UserId].ToString()));
cmd.Parameters.AddWithValue(@Isteyen, e.CommandArgument.
ToString());


cmd.Connection = con;

try
{
con.Open();
cmd.ExecuteNonQuery();
}
catch (SqlException ex)
{

throw ex;
}
finally
{
con.Close();
66 Proje 1

Response.Redirect(tekliflerim.aspx);

Liste 1.48: Teklifleri listeleyen datalist kontrolnn RowCommand olay.

Tekliflerim.aspx sayfasnn grsel kts ekil 1.27de gsterilmitir.

ekil 1.27: Tekliflerim.aspx tasarm grnm.

Arkada listesindeki bir kullancnn profilini grntlemek iin veya arama sonrasnda kan kul-
lanclarn profillerini grntleyebilmek iin profildetay.aspx sayfasn Kullanici klasrne ekleyin.
Kullancnn profilindeki bilgileri gsterecek arayz tasarlayn.

<%@ Page Language=C# MasterPageFile=~/herkesburada.


master AutoEventWireup=true CodeFile=profildetay.aspx.cs
Inherits=Kullanici_profildetay Title=Untitled Page %>
<%@ Register Src=../Controls/KullaniciSolMenu.ascx TagName=Kul
laniciSolMenu TagPrefix=uc1 %>
<asp:Content ID=Content1 ContentPlaceHolderID=AnaIcerik
Runat=Server>
<div class=SolMenu>
<uc1:KullaniciSolMenu ID=KullaniciSolMenu1 runat=server
/>

</div>
<div class=KullaniciIcerik>
<table style=width: 100%>
<tr>
<td style=width: 118px>
herkesburada.com 67

</td>
<td style=width: 365px>
</td>
<td style=width: 494px>
</td>
</tr>
<tr>
<td rowspan=8 style=width: 118px valign=top>
<asp:Image ID=imgProfilResmi runat=server
Height=175px Width=145px /></td>
<td style=width: 365px; height: 12px; valign=top>
Ad :</td>
<td style=width: 530px; height: 12px;>
<asp:Label ID=lblAd runat=server></asp:
Label></td>
</tr>
<tr>
<td style=width: 365px; height: 8px; valign=top>
Soyad :</td>
<td style=width: 530px; height: 8px;>
<asp:Label ID=lblSoyad runat=server></asp:
Label></td>
</tr>
<tr>
<td style=width: 365px valign=top>
Doum Tarihi :</td>
<td style=width: 530px>
<asp:Label ID=lblDogumTarihi runat=server></
asp:Label></td>
</tr>
<tr>
<td style=width: 365px; height: 6px; valign=top>
Cinsiyet :</td>
<td style=width: 530px; height: 6px>
<asp:Label ID=lblCinsiyet runat=server></asp:
Label></td>
</tr>
<tr>
<td style=width: 365px; height: 1px; valign=top>
Yaad ehir :
</td>
<td style=width: 530px; height: 1px;>
<asp:Label ID=lblYasadigiSehir runat=server></
asp:Label></td>
</tr>
68 Proje 1

<tr>
<td style=width: 365px valign=top>
Eitim Durumu :
</td>
<td style=width: 530px>
<asp:Label ID=lblEgitimDurumu runat=server></
asp:Label></td>
</tr>
<tr>
<td style=width: 365px; valign=top>
Meslek :
</td>
<td style=width: 530px;>
<asp:Label ID=lblMeslek runat=server></asp:
Label></td>
</tr>
<tr>
<td style=width: 365px valign=top>
Fobileri :
</td>
<td style=width: 530px>
<asp:Label ID=lblFobileri runat=server></asp:
Label></td>
</tr>
<tr>
<td style=width: 118px>
</td>
<td style=width: 365px valign=top>
Hobileri :
</td>
<td style=width: 530px>
<asp:Label ID=lblHobileri runat=server></asp:
Label></td>
</tr>
<tr>
<td style=width: 118px;>
</td>
<td style=width: 365px; valign=top>
Hakknda :
</td>
<td style=width: 530px;>
<asp:Label ID=lblHakkinda runat=server></asp:
Label></td>
</tr>
<tr>
herkesburada.com 69

<td style=width: 118px>


</td>
<td style=width: 365px valign=top>
Okuduunu Kitaplar :</td>
<td style=width: 530px>
<asp:Label ID=lblOkuduguKitaplar
runat=server></asp:Label></td>
</tr>
<tr>
<td style=width: 118px>
</td>
<td style=width: 365px valign=top>
Tuttuu Takm :
</td>
<td style=width: 530px>
<asp:Label ID=lblTuttuguTakim runat=server></
asp:Label></td>
</tr>
<tr>
<td style=width: 118px;>
</td>
<td style=width: 365px; valign=top>
Yapt Sporlar</td>
<td style=width: 530px;>
<asp:Label ID=lblYaptigiSporlar
runat=server></asp:Label></td>
</tr>
<tr>
<td style=width: 118px>
</td>
<td style=width: 365px valign=top>
Sigara kullanrm ? :</td>
<td style=width: 530px>
<asp:Label ID=lblSigara runat=server></asp:
Label></td>
</tr>
<tr>
<td style=width: 118px>
</td>
<td style=width: 365px valign=top>
Alkol kullanrm ?&nbsp; :</td>
<td style=width: 530px>
<asp:Label ID=lblAlkol runat=server></asp:
Label></td>
</tr>
70 Proje 1

<tr>
<td style=width: 118px>
</td>
<td style=width: 365px>
</td>
<td style=width: 494px>
</td>
</tr>
<tr>
<td style=width: 118px>
</td>
<td style=width: 365px>
</td>
<td style=width: 494px>
</td>
</tr>
<tr>
<td style=width: 118px>
</td>
<td style=width: 365px>
</td>
<td style=width: 494px>
</td>
</tr>
<tr>
<td style=width: 118px>
</td>
<td style=width: 365px>
</td>
<td style=width: 494px>
</td>
</tr>
</table>
&nbsp;&nbsp;
</div>
</asp:Content>

Liste 1.49: ProfilDetay.aspx html tasarm.

Kullancnn baz bilgileri veritabanndan bazlar ise Profile zerinden alnacak. Kullanclarn
veritaban zerinden alnacak bilgileri iin veritaban sunucunuz zerinde KullaniciDetay stored
procedure oluturun.

Create Proc KullaniciDetay


(
@EgitimDurumId int,
herkesburada.com 71

@MeslekId int,
@TakimId int,
@SehirId int
)
AS
DECLARE @Egitim nvarchar(50)
DECLARE @Meslek nvarchar(50)
DECLARE @Takim nvarchar(50)
DECLARE @Sehir nvarchar(50)

Select @Egitim = EgitimDurumAdi From EgitimDurumlari Where


EgitimDurumId = @EgitimDurumId

Select @Meslek = MeslekAdi From Meslekler Where MeslekId = @


MeslekId

Select @Takim = TakimAdi From Takimlar Where TakimId = @TakimId

Select @Sehir = SehirAdi From Sehirler Where SehirId = @SehirId

Select @Egitim As Egitim, @Meslek As Meslek , @Takim as Takim, @


Sehir As Sehir

Liste 1.50: KullaniciDetay.sql stored procedure.

Kullancnn profilini gsterecek metodlar profildetay.aspx.cs dosyasna yazn. Burada dikkat


edilmesi gereken; profili grmek isteyen kullancnn, yani oturum aan kullancnn bu profili gr-
meye yetkisi olup olmamasdr. Eer profili grntlenmek istenen kullanc sadece arkadalar-
nn profili grntlemesine izin verdiyse, profili grntlemek isteyen kiinin arkada listesinde
olup olmadnn kontrolnn yaplmas gerekir. Kullanc profili grntlemeyi salayan kod Liste
1.51de verilmitir.

protected void Page_Load(object sender, EventArgs e)


{
if (Request.QueryString[profil] != null)
{
string kullanici = Request.QueryString[profil];

if (ProfilYetki(kullanici))
{
ProfilGoruntule(kullanici);
}
else
Response.Redirect(arkadaslarim.aspx);
}
else
{
72 Proje 1

Response.Redirect(arkadaslarim.aspx);
}

}
bool ProfilYetki(string kullanici)
{
if (Profile.GetProfile(kullanici).ProfilYetki)
{
SqlConnection con = new SqlConnection(ConfigurationMa
nager.ConnectionStrings[LocalSqlServer].ConnectionString);

SqlDataAdapter da = new SqlDataAdapter(ArkadasListem


, con);
da.SelectCommand.Parameters.AddWithValue(@
UserId,Membership.GetUser(kullanici).ProviderUserKey);
da.SelectCommand.CommandType = CommandType.
StoredProcedure;

DataTable dt = new DataTable();


da.Fill(dt);

bool sonuc = false;


foreach (DataRow dr in dt.Rows)
{
if (dr[Username].ToString() == kullanici)
{
sonuc = true;
}
}

return sonuc;
}
else
return true;
}
void ProfilGoruntule(string kullanici)
{
SqlConnection con = new SqlConnection(ConfigurationManage
r.ConnectionStrings[ConStrHerkesBurada].ConnectionString);
SqlCommand cmd = new SqlCommand(KullaniciDetay,con);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue(@EgitimDurumId,Profile.
EgitimDurumId);
cmd.Parameters.AddWithValue(@MeslekId,Profile.MeslekId);
herkesburada.com 73

cmd.Parameters.AddWithValue(@TakimId,Profile.
TuttuguTakimId);
cmd.Parameters.AddWithValue(@SehirId,Profile.
KisiselBilgiler.YasadigiSehirId);
try
{
con.Open();
SqlDataReader rdr = cmd.ExecuteReader();
if (rdr.Read())
{
lblEgitimDurumu.Text = rdr[Egitim].ToString();
lblMeslek.Text = rdr[Meslek].ToString();
lblTuttuguTakim.Text = rdr[Takim].ToString();
lblYasadigiSehir.Text = rdr[Sehir].ToString();
}
}
catch (Exception)
{

throw;
}
finally
{
con.Close();
}

string url = @../UyeResimleri/ + Profile.


GetProfile(kullanici).ProfilResmi;
imgProfilResmi.ImageUrl = url;
lblAd.Text = Profile.GetProfile(kullanici).
KisiselBilgiler.Ad;
lblSoyad.Text = Profile.GetProfile(kullanici).
KisiselBilgiler.Soyad;
lblDogumTarihi.Text = Profile.GetProfile(kullanici).
KisiselBilgiler.DogumTarihi.ToShortDateString();
lblHakkinda.Text = Profile.GetProfile(kullanici).Hakkinda;
lblAlkol.Text = DurumGosterici(Profile.AlkolKullanirMi);
lblCinsiyet.Text = CinsiyetGosterici(Profile.
KisiselBilgiler.Cinsiyet);
lblHobileri.Text = Profile.GetProfile(kullanici).Hobileri;
lblFobileri.Text = Profile.GetProfile(kullanici).Fobileri;
lblOkuduguKitaplar.Text = Profile.GetProfile(kullanici).
OkuduguKitaplar;
lblSigara.Text = DurumGosterici(Profile.SigaraKullanirMi);

74 Proje 1

lblYaptigiSporlar.Text = Profile.GetProfile(kullanici).
YaptigiSporlar;

}
string CinsiyetGosterici(bool cinsiyet)
{
if (!cinsiyet)
return Bay;
else
return Bayan;

}
string DurumGosterici(bool durum)
{
if (durum)
return Evet;
else
return Hayr;
}

Liste 1.51: Profil grntleme kodu. (ProfilDetay.aspx.cs)s

ProfilDetay.aspx sayfasnn tasarm grnm ekil 1.28de verilmitir.

ekil 1.28: ProfilDetay.aspx sayfas tasarm grnm.

Kiisel albm oluturmay salamak ve ynetmek iin Kullanici klasr ierisine albumlerim.aspx
isimli bir sayfa ekleyin. Bu sayfa ierisine aynen mesaj gndermedeki gibi yeni bir albm olu-
herkesburada.com 75

turma linki ekleyin ve bu linkte yeni mesaj gndermedeki gibi popup penceresinde yeni album
sayfas an.

<%@ Page Language=C# MasterPageFile=~/herkesburada.master


AutoEventWireup=true
CodeFile=albumlerim.aspx.cs Inherits=Kullanici_albumlerim
Title=Albmlerim %>

<%@ Register Assembly=System.Web.Extensions, Version=3.5.0.0,


Culture=neutral, PublicKeyToken=31bf3856ad364e35
Namespace=System.Web.UI TagPrefix=asp %>
<%@ Register Src=../Controls/KullaniciSolMenu.ascx TagName=Kul
laniciSolMenu TagPrefix=uc1 %>
<asp:Content ID=Content1 ContentPlaceHolderID=AnaIcerik
runat=Server>
<div class=SolMenu>
<uc1:KullaniciSolMenu ID=KullaniciSolMenu1
runat=server />
</div>
<div class=KullaniciIcerik>

<script language=javascript type=text/javascript>



function YeniMesajGoster()
{

window.open(yenialbum.aspx,yenimesaj,width=350,h
eight=80);

}

</script>

<asp:LinkButton ID=lnkYeniAlbum runat=server OnClient


Click=YeniMesajGoster(); return false;>Yeni Album Olutur</asp:
LinkButton><br />
&nbsp;<asp:UpdatePanel id=UpdatePanel1 runat=server><
contenttemplate>
<asp:GridView ID=grdAlbumler runat=server AutoG
enerateColumns=False CellPadding=4
DataKeyNames=AlbumId EmptyDataText=Tanmlanm
albmnz bulunmuyor
ForeColor=#333333 GridLines=None Width=100%
OnRowDeleting=grdAlbumler_RowDeleting OnRowEditing=
grdAlbumler_RowEditing
OnRowUpdating=grdAlbumler_RowUpdating OnRowCancelin
gEdit=grdAlbumler_RowCancelingEdit>
76 Proje 1

<FooterStyle BackColor=#5D7B9D Font-Bold=True


ForeColor=White />
<RowStyle BackColor=#F7F6F3 ForeColor=#333333 />
<Columns>
<asp:TemplateField>
<EditItemTemplate>
<asp:TextBox ID=txtAlbumAdi
runat=server Text=<%# DataBinder.Eval(Container.
DataItem,AlbumAdi) %> ></asp:TextBox>
</EditItemTemplate>
<ItemTemplate>
<a href=album.aspx?album=<%# DataBinder.
Eval(Container.DataItem,AlbumId) %>>
<asp:Label ID=lblAlbumAdi
runat=server Text=<%# Eval(AlbumAdi) %> ></asp:Label></a>
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField=OlusturulmaTarihi
DataFormatString={0:d} HeaderText=Oluturulma Tarihi
HtmlEncode=False ReadOnly=True SortExpres
sion=OlusturulmaTarihi />
<asp:HyperLinkField DataNavigateUrlFields=albumI
d DataNavigateUrlFormatString=resimekle.aspx?albumId={0}
Text=Resim Ekle />
<asp:TemplateField ShowHeader=False>
<EditItemTemplate>
<asp:LinkButton ID=lnkGuncelle
runat=server CausesValidation=True CommandName=Update
Text=Gncelle>
</asp:LinkButton>
<asp:LinkButton ID=lnkIptal
runat=server CausesValidation=False CommandName=Cancel
Text=ptal></asp:LinkButton>
</EditItemTemplate>
<ItemTemplate>
<asp:LinkButton ID=LinkButton3
runat=server CausesValidation=False CommandName=Edit
Text=Dzenle></asp:LinkButton>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField ShowHeader=False>
<ItemTemplate>
<asp:LinkButton ID=LinkButton1
runat=server
CausesValidation=False
CommandName=Delete OnClientClick=return confirm(Bu albm
herkesburada.com 77

silmek istediinizden eminmisiniz\rAlbm silerseniz albmdeki


resimler de silinecek)
Text=Sil></asp:LinkButton>
</ItemTemplate>
</asp:TemplateField>
</Columns>
<PagerStyle BackColor=#284775 ForeColor=White
HorizontalAlign=Center />
<SelectedRowStyle BackColor=#E2DED6 Font-Bold=True
ForeColor=#333333 />
<HeaderStyle BackColor=#5D7B9D Font-Bold=True
ForeColor=White />
<EditRowStyle BackColor=#999999 />
<AlternatingRowStyle BackColor=White
ForeColor=#284775 />
</asp:GridView></contenttemplate>
</asp:UpdatePanel>
</div>
</asp:Content>

Liste 1.52: Albumlerim.aspx html tasarm.

Yaplan tasarm sonucu albumlerim.aspx sayfas tasarm grnm ekil 1.29da gsterilmitir.

ekil 1.29: albumlerim.aspx sayfas tasarm grnm.

Sayfa ilk yklendiinde gerekli datagrid kontrolne verileri doldurmak iin gerekli kodlar Liste
1.53deki ekilde yazn.

protected void Page_Load(object sender, EventArgs e)


{
if (!Page.IsPostBack)
78 Proje 1

VerileriDoldur();
}
void VerileriDoldur()
{
SqlConnection con = new SqlConnection(ConfigurationManag
er.ConnectionStrings[LocalSqlServer].ConnectionString);
SqlDataAdapter da = new SqlDataAdapter(SELECT
[AlbumId], [AlbumAdi], [KullaniciId], [OlusturulmaTarihi],
[SadeceArkadaslarGorsun] FROM [Albumler] WHERE ([KullaniciId] = @
KullaniciId), con);
da.SelectCommand.Parameters.AddWithValue(@KullaniciId,
Membership.GetUser(User.Identity.Name).ProviderUserKey);
DataTable dt = new DataTable();
da.Fill(dt);

grdAlbumler.DataSource = dt;
grdAlbumler.DataBind();
}
Liste 1.53: albumlerim.aspx sayfasnda album listesini dolduran metodlar.

Albm dzenleme ve silme ilemleri iin grdAlbumler datagridview kontrolnn RowEditing,


RowUpdating, RowCancelEditing ve RowDeleting olaylarna gerekli kodlar Liste 1.54deki ekil-
de yazn.

protected void grdAlbumler_RowEditing(object sender,


GridViewEditEventArgs e)
{
grdAlbumler.EditIndex = e.NewEditIndex;
VerileriDoldur();

}
protected void grdAlbumler_RowCancelingEdit(object sender,
GridViewCancelEditEventArgs e)
{
grdAlbumler.EditIndex = -1;
VerileriDoldur();
}
protected void grdAlbumler_RowUpdating(object sender,
GridViewUpdateEventArgs e)
{
SqlConnection con = new SqlConnection(ConfigurationManage
r.ConnectionStrings[LocalSqlServer].ConnectionString);
SqlCommand cmd = new SqlCommand(update Albumler set
AlbumAdi = @AlbumAdi where albumId=@AlbumId, con);
cmd.Parameters.AddWithValue(@AlbumAdi,
((TextBox)grdAlbumler.Rows[e.RowIndex].FindControl(txtAlbumAdi)
).Text);
herkesburada.com 79

cmd.Parameters.AddWithValue(@AlbumId, new
Guid(grdAlbumler.DataKeys[e.RowIndex].Value.ToString()));
try
{
con.Open();
cmd.ExecuteNonQuery();
}
catch (Exception)
{
throw;
}
finally
{
con.Close();
}
grdAlbumler.EditIndex = -1;
VerileriDoldur();
}
protected void grdAlbumler_RowDeleting(object sender,
GridViewDeleteEventArgs e)
{
SqlConnection con = new SqlConnection(ConfigurationManage
r.ConnectionStrings[LocalSqlServer].ConnectionString);
SqlCommand cmd = new SqlCommand(delete from Albumler
where albumId=@albumId, con);
cmd.Parameters.AddWithValue(@albumId, new
Guid(grdAlbumler.DataKeys[e.RowIndex].Value.ToString()));
try
{
con.Open();
cmd.ExecuteNonQuery();
}
catch (Exception)
{

throw;
}
finally
{
con.Close();
VerileriDoldur();
}
}

Liste 1.54: grdAlbumler datagridview kontrol olaylar.


80 Proje 1

Yeni albm eklemek iin Kullanici klasr ierisine yenialbum.aspx sayfasn ekleyin. Bu sayfay
eklerken yenimesaj.aspx sayfasnda olduu gibi master page setirmeyin. Sayfa ierisinde albm
adnn yazlaca bir textbox kontrol ve albm izninin verilecei bir dropdownlist kontrol ekleyin.
Dropdownlist kontrolne Herkes Grebilsin ve Sadece Arkadalarm olmak zere 2 eleman ekle-
yin ve value zelliklerini true, false verin. Bo braklmamas gereken yerler iin gerekli validation
kontrolleri kullann.

<%@ Page Language=C# AutoEventWireup=true CodeFile=yenialbum.


aspx.cs Inherits=Kullanici_yenialbum %>

<!DOCTYPE html PUBLIC -//W3C//DTD XHTML 1.0 Transitional//EN


http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd>

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


<head runat=server>
<title>Yeni Albm Olutur</title>
<link href=../Style/Genel.css rel=stylesheet type=text/
css />
<script language=javascript type=text/javascript>

function Kapat()
{
window.opener.location.reload(true);
}
</script>

</head>
<body style=text-align:left onunload=Kapat();>
<form id=form1 runat=server>
<div>
<br />
&nbsp;&nbsp;
<asp:Label ID=Label1 runat=server Text=Album Ad :
></asp:Label>
<asp:TextBox ID=txtAlbum runat=server></asp:
TextBox>&nbsp;
<asp:RequiredFieldValidator ID=RequiredFieldValidator1
runat=server ControlToValidate=txtAlbum
ErrorMessage=Albm adn bo brakmayn>!</asp:Req
uiredFieldValidator><asp:Button ID=btnYeniAlbum runat=server
Text=Olutur OnClick=btnYeniAlbum_Click />&nbsp;&nbsp;<br />
&nbsp;&nbsp; zin:
<asp:DropDownList ID=drpIzinler runat=server>
<asp:ListItem Selected=True Value=False>Herkes
G&#246;rebilsin</asp:ListItem>
herkesburada.com 81

<asp:ListItem Value=True>Sadece Arkadalarm</asp:


ListItem>
</asp:DropDownList><br />
&nbsp;&nbsp;
<asp:Label ID=lblSonuc runat=server Font-Size=Small
ForeColor=Red></asp:Label><br />
<asp:ValidationSummary ID=ValidationSummary1
runat=server ShowMessageBox=True
ShowSummary=False />
</div>
</form>
</body>
</html>

Liste 1.55: Yenialbum.aspx html tasarm.

Bu sayfa ierisinde Kapat isminde bir javascript metodu kullanld. Bu metod sayfa kapatlrken
veya body elementinin unload olay arldnda popup olarak kendini atran sayfay, yani al-
bumlerim.aspx sayfasn yenileyecek ve dolaysyla popup ekrann eklenen albm bilgisi otomatik
olarak albumlerim.aspx sayfasnda grnecek. Bunu salayan ise window.opener.locati-
on.reload(true); kodu yani javascript ile yazlan Kapat metodudur.

btnYeniAlbum button kontrolnn Click olayna Liste 1.56daki kodu yazn.

protected void btnYeniAlbum_Click(object sender, EventArgs e)


{
SqlConnection con = new SqlConnection(ConfigurationManage
r.ConnectionStrings[LocalSqlServer].ConnectionString);
SqlCommand cmd = new SqlCommand(insert into Albumler(A
lbumAdi,KullaniciId, OlusturulmaTarihi,SadeceArkadaslarGorsun)
values(@AlbumAdi,@KullaniciId,@OlusturulmaTarihi,@Izin), con);
cmd.Parameters.AddWithValue(@AlbumAdi, txtAlbum.Text);
cmd.Parameters.AddWithValue(@KullaniciId, Membership.
GetUser(User.Identity.Name).ProviderUserKey);
cmd.Parameters.AddWithValue(@OlusturulmaTarihi,
DateTime.Now);
cmd.Parameters.AddWithValue(@Izin, Convert.
ToBoolean(drpIzinler.SelectedValue));
try
{

con.Open();
int i = cmd.ExecuteNonQuery();
if (i > 0)
{
lblSonuc.Text = Albm eklendi;
}
82 Proje 1

}
catch (Exception ex)
{
throw;
}
finally
{
con.Close();
}

}

Liste 1.56: btnYeniAlbum kontrol Click olay.

Yeni albm ekleme sayfas tasarm grnm ekil 1.30da verilmitir.

Bu aamadan sonra eklenen her albmden sonra bu say-


fay atran albumlerim.aspx sayfas da otomatik olarak
gncellenecek ve yeni eklenen albm eklendii an gr-
necektir. Albumlerim.aspx sayfasnda Resim Ekle buto-
nuna tkland zaman resimekle.aspx sayfasna ynlen-
dirme yapld. Kullanici klasrne resimekle.aspx sayfas
ekleyin ve an. Bu sayfa QueryString ile gelen veriye gre
ekil 1.30: YeniAlbum.aspx tasarm grnm. resim ekleyecek, yani querystringden gelen AlbumIdye
sahip albme resim ekleyecek. Gelen AlbumIdnin istenen
formatta olup olmadn kontrol etmelisiniz. Eer Int32 tipinden AlbumId varsa numeric olup ol-
madnn kontrol edilmesi gerekir. Bu projede AlbumId stun tipi veritabannda uniqueidentifier,
yani C#taki veri tipinde GUIDe karlk gelir. Page_Load olaynda gelen parametrenin GUID olup
olmadn kontrol edin.

protected void Page_Load(object sender, EventArgs e)


{
if (Request.QueryString[albumId] != null)
{
try
{
Guid album = new Guid(Request.
QueryString[albumId]);
}
catch (Exception)
{
Response.Redirect(~/kullanici/albumlerim.aspx);
}
}
else
Response.Redirect(~/kullanici/albumlerim.aspx);
}

Liste 1.57: Resimekle.aspx Page_Load olay QueryString kontrol.


herkesburada.com 83

Kontrol yapldktan sonra sayfa tasarm yapn. ProfilResmi.aspx sayfasndaki tasarma yakn bir
tasarm yapn. Gerekli FileUpload ve dier kontrolleri ekleyin.

<%@ Page Language=C# MasterPageFile=~/herkesburada.


master AutoEventWireup=true CodeFile=resimekle.aspx.cs
Inherits=Kullanici_resimekle Title=Untitled Page %>
<%@ Register Src=../Controls/KullaniciSolMenu.ascx TagName=Kul
laniciSolMenu TagPrefix=uc1 %>

<asp:Content ID=Content1 ContentPlaceHolderID=AnaIcerik


Runat=Server>
<div class=SolMenu>
<uc1:KullaniciSolMenu ID=KullaniciSolMenu1 runat=server
/>

</div>
<div class=KullaniciIcerik>
<br />
<table style=width: 100%>
<tr>
<td style=width: 100px>
<asp:Label ID=lblSonuc runat=server
ForeColor=Red></asp:Label></td>
<td style=width: 100px>
</td>
<td style=width: 100px>
</td>
</tr>
<tr>
<td colspan=3>
Resim Se</td>
</tr>
<tr>
<td style=width: 100px>
</td>
<td style=width: 100px>
</td>
<td style=width: 100px>
</td>
</tr>
<tr>
<td colspan=2>
<asp:FileUpload ID=FileUpload1 runat=server
Width=492px /></td>
<td style=width: 100px>
</td>
84 Proje 1

</tr>
<tr>
<td style=width: 100px>
</td>
<td style=width: 100px>
</td>
<td style=width: 100px>
</td>
</tr>
<tr>
<td style=width: 100px>
<asp:Button ID=btnEkle runat=server
OnClick=btnEkle_Click Text=Ekle Width=156px /></td>
<td style=width: 100px>
</td>
<td style=width: 100px>
</td>
</tr>
<tr>
<td style=width: 100px>
</td>
<td style=width: 100px>
</td>
<td style=width: 100px>
</td>
</tr>
<tr>
<td style=width: 100px>
</td>
<td style=width: 100px>
</td>
<td style=width: 100px>
</td>
</tr>
<tr>
<td style=width: 100px>
</td>
<td style=width: 100px>
</td>
<td style=width: 100px>
</td>
</tr>
</table>

herkesburada.com 85

</div>
</asp:Content>

Liste 1.58: ResimEkle.aspx html tasarm.

Yaplan html tasarm sonucu ortaya kan sayfa ekil 1.31de gsterilmitir.

ekil 1.31: ResimEkle.aspx sayfas tasarm grnm.

Ekle butonuna tkland zaman resmi siteye ykleyecek kodu Liste 1.59daki ekilde yazn.

protected void btnEkle_Click(object sender, EventArgs e)


{
string resimAdi = Guid.NewGuid().ToString();
SqlConnection con = new SqlConnection(ConfigurationManage
r.ConnectionStrings[LocalSqlServer].ConnectionString);
try
{
string resimUrl = Server.MapPath(~/Albumler/) +
resimAdi + .albumresmi;
FileUpload1.SaveAs(resimUrl);

SqlCommand cmd = new SqlCommand(Insert into fotogra


flar(AlbumId,ResimUrl,EklenmeZamani) values(@AlbumId,@ResimUrl,@
EklenmeZamani), con);
cmd.Parameters.AddWithValue(@AlbumId, new
Guid(Request.QueryString[albumId]));
cmd.Parameters.AddWithValue(@ResimUrl, resimAdi+.
albumresmi);
cmd.Parameters.AddWithValue(@EklenmeZamani,
DateTime.Now);
con.Open();
86 Proje 1

cmd.ExecuteNonQuery();
lblSonuc.Text = Resim eklendi;


}
catch (HttpException ex)
{
lblSonuc.Text = Hata olutu;

}
finally
{
con.Close();
}

}

Liste 1.59: ResimEkle.aspx btnEkle button kontrol Click olay.

Albumlerim.aspx sayfasnda listelenen bir albm adna tkland zaman albmdeki resimleri gs-
teren album.aspx sayfasn Kullanici klasrne ekleyin. Eklenen album.aspx sayfasnda da gelen
parametrenin GUID tipinde olup olmadn kontrol edin.

protected void Page_Load(object sender, EventArgs e)


{
if (Request.QueryString[album] != null)
{
try
{
Guid g = new Guid(Request.QueryString[album]);
}
catch
{
Response.Redirect(albumlerim.aspx);

}
}
}

Liste 1.60: Album.aspx Page_Load olay.

Albm ierisindeki resimleri listelemek iin sayfaya gridview ekleyip kullanaca Data Sourceu
yaplandrn. Resim gsterilecei iin TemplateField ierisinde resmi gsterin.

<%@ Page Language=C# MasterPageFile=~/herkesburada.


master AutoEventWireup=true CodeFile=album.aspx.cs
Inherits=Kullanici_album Title=Untitled Page %>
herkesburada.com 87

<%@ Register Src=../Controls/KullaniciSolMenu.ascx TagName=Kul


laniciSolMenu TagPrefix=uc1 %>

<asp:Content ID=Content1 ContentPlaceHolderID=AnaIcerik


Runat=Server>
<div class=SolMenu>
<uc1:KullaniciSolMenu ID=KullaniciSolMenu1 runat=server
/>

</div>
<div class=KullaniciIcerik>
<br />
<asp:Hyperlink ID=lnkYeniResim runat=server
NavigateUrl=resimekle.aspx>Yeni Resim Ekle</asp:Hyperlink><br
/>
<br />
<asp:GridView ID=GridView1 runat=server AutoGenerateColum
ns=False CellPadding=4
DataKeyNames=FotografId DataSourceID=SqlDataSource1
ForeColor=#333333 GridLines=None
Width=100% AllowPaging=True>
<FooterStyle BackColor=#5D7B9D Font-Bold=True
ForeColor=White />
<Columns>
<asp:TemplateField HeaderText=ResimUrl SortExpressi
on=ResimUrl>
<EditItemTemplate>
<asp:TextBox ID=TextBox1 runat=server
Text=<%# Bind(ResimUrl) %>></asp:TextBox>
</EditItemTemplate>
<ItemTemplate>
<img src=../Albumler/<%# DataBinder.
Eval(Container.DataItem,ResimUrl) %> alt= height=60
width=60 />
</ItemTemplate>
</asp:TemplateField>
<asp:CommandField DeleteText=Sil
ShowDeleteButton=True />
</Columns>
<RowStyle BackColor=#F7F6F3 ForeColor=#333333 />
<EditRowStyle BackColor=#999999 />
<SelectedRowStyle BackColor=#E2DED6 Font-Bold=True
ForeColor=#333333 />
<PagerStyle BackColor=#284775 ForeColor=White
HorizontalAlign=Center />
<HeaderStyle BackColor=#5D7B9D Font-Bold=True
ForeColor=White />
88 Proje 1

<AlternatingRowStyle BackColor=White ForeColor=#284775


/>
</asp:GridView>
<asp:SqlDataSource ID=SqlDataSource1 runat=server
ConnectionString=<%$ ConnectionStrings:ConStrHerkesBurada %>
SelectCommand=SELECT [FotografId], [AlbumId], [ResimUrl],
[EklenmeZamani] FROM [Fotograflar] WHERE ([AlbumId] = @AlbumId)
DeleteCommand=DELETE FROM [Fotograflar] WHERE [FotografId]
= @FotografId InsertCommand=INSERT INTO [Fotograflar]
([FotografId], [AlbumId], [ResimUrl], [EklenmeZamani])
VALUES (@FotografId, @AlbumId, @ResimUrl, @EklenmeZamani)
UpdateCommand=UPDATE [Fotograflar] SET [AlbumId] = @AlbumId,
[ResimUrl] = @ResimUrl, [EklenmeZamani] = @EklenmeZamani WHERE
[FotografId] = @FotografId>
<SelectParameters>
<asp:QueryStringParameter Name=AlbumId
QueryStringField=album Type=String />
</SelectParameters>
<DeleteParameters>
<asp:Parameter Name=FotografId Type=Object />
</DeleteParameters>
<UpdateParameters>
<asp:Parameter Name=AlbumId Type=Object />
<asp:Parameter Name=ResimUrl Type=String />
<asp:Parameter Name=EklenmeZamani Type=DateTime
/>
<asp:Parameter Name=FotografId Type=Object />
</UpdateParameters>
<InsertParameters>
<asp:Parameter Name=FotografId Type=Object />
<asp:Parameter Name=AlbumId Type=Object />
<asp:Parameter Name=ResimUrl Type=String />
<asp:Parameter Name=EklenmeZamani Type=DateTime
/>
</InsertParameters>
</asp:SqlDataSource>
</div>
</asp:Content>

Liste 1.61: Album.aspx html tasarm.

Yaplan html tasarm sonucu Album.aspx sayfas tasarm grnm ekil 1.32de gsterilmi-
tir.
herkesburada.com 89

ekil 1.32: Album.aspx sayfa tasarm grnm.

Arkadaslarim.aspx sayfasndan herhangi bir arkadan albm bilgileri grntlenmek istendii


zaman albmleri grntleyecek olan albumler.aspx sayfasn Kullanici klasrne ekleyin. Bu
sayfa ilk bata albm grntlenmek istenen kullancnn albmleri iin hangi izinleri verdiini
kontrol edecek. Albmlere bakan kii, kullancnn arkada ise hepsi, deilse sadece izinli olan-
lar grntlenecektir. Sayfaya DataList kontrol ekleyerek albmleri listeleyin. Hangi kullancnn
albm olduu bilgisi QueryString zerinden alnacak.

<%@ Page Language=C# MasterPageFile=~/herkesburada.


master AutoEventWireup=true CodeFile=albumler.aspx.cs
Inherits=Kullanici_albumler Title=Kullanc Albmleri %>
<%@ Register Src=../Controls/KullaniciSolMenu.ascx TagName=Kul
laniciSolMenu TagPrefix=uc1 %>

<asp:Content ID=Content1 ContentPlaceHolderID=AnaIcerik


Runat=Server>
<div class=SolMenu>
<uc1:KullaniciSolMenu ID=KullaniciSolMenu1 runat=server
/>

</div>
<div class=KullaniciIcerik>
<br />
<asp:DataList ID=DataList1 runat=server CellPadding=4
DataKeyField=AlbumId ForeColor=#333333 RepeatColumns=5
RepeatDirection=Horizontal
Width=100%>
<FooterStyle BackColor=#5D7B9D Font-Bold=True
ForeColor=White />
90 Proje 1

<AlternatingItemStyle BackColor=White
ForeColor=#284775 />
<ItemStyle BackColor=#F7F6F3 ForeColor=#333333 />
<SelectedItemStyle BackColor=#E2DED6 Font-Bold=True
ForeColor=#333333 />
<HeaderStyle BackColor=#5D7B9D Font-Bold=True
ForeColor=White />
<ItemTemplate>
<img src=../SiteResimleri/ok.gif />
<a href=albumgoruntule.aspx?album=<%# Eval(AlbumId)
%>>
<asp:Label ID=AlbumAdiLabel runat=server Text=<%#
Eval(AlbumAdi) %>></asp:Label></a><br />
</ItemTemplate>
</asp:DataList>
</div>
</asp:Content>

Liste 1.62: Albumler.aspx html tasarm.

Albumler.aspx sayfasnn grsel kts ekil 1.33deki gibidir.

ekil 1.33: Albumler.aspx sayfas tasarm grnm.

Albumler.aspx sayfasna gelen parametrenin doru olup olmadn kontrol edin. Daha sonra
albm grntlemek iin gerekli izin olup olmadnn kontroln yapn.

protected void Page_Load(object sender, EventArgs e)


{
if (Request.QueryString[album] == null)
{
Response.Redirect(arkadaslarim.aspx);
herkesburada.com 91

}
AlbumGoruntule();
}
void AlbumGoruntule()
{
SqlConnection con = new SqlConnection(ConfigurationManage
r.ConnectionStrings[LocalSqlServer].ConnectionString);
SqlDataAdapter da = new SqlDataAdapter(select AlbumId,A
lbumAdi,SadeceArkadaslarGorsun from albumler where kullaniciId =
dbo.KullaniciIdAl(@KullaniciAdi),con);
da.SelectCommand.Parameters.AddWithValue(@KullaniciAdi,
Request.QueryString[album]);
DataTable dt = new DataTable();
da.Fill(dt);

SqlDataAdapter daArkadasListesi = new SqlDataAdapter(Ark


adasListem, con);
daArkadasListesi.SelectCommand.Parameters.AddWithValue(@
UserId, Membership.GetUser(User.Identity.Name).ProviderUserKey);
daArkadasListesi.SelectCommand.CommandType = CommandType.
StoredProcedure;
DataTable dtArkadaslar = new DataTable();
daArkadasListesi.Fill(dtArkadaslar);

bool arkadasmiyiz = false;


for (int i = 0; i < dt.Rows.Count; i++)
{
if (Convert.ToBoolean(dt.Rows[i][SadeceArkadaslarGor
sun]))
{
foreach (DataRow dr2 in dtArkadaslar.Rows)
{
if (dr2[UserName].ToString() == Request.
QueryString[album])
{
arkadasmiyiz = true;
}
}
}

if (!arkadasmiyiz)
dt.Rows.Remove(dt.Rows[i]);

if (dt.Rows.Count == i )
break;
}
92 Proje 1

DataList1.DataSource = dt;
DataList1.DataBind();
}

Liste 1.63: Albumler.aspx Page_Load olay ve AlbumGoruntule metodu.

Uygulama: Seilen albme ait resimleri gsteren albumgoruntule.aspx sayfasn yapn. Gerekli
izinleri kontrol edin.

Kullanclara gsterilen KullaniciSolMenu.ascx User Control an. Kullanc aramak iin btnAra
button kontrolnn Click olayn hazrlayn. Arama kriterini uyeara.aspx sayfasna ynlendirin.

protected void btnAra_Click(object sender, EventArgs e)


{
Response.Redirect(uyeara.aspx?ara= + txtRumuz.Text);
}

ye arama sonularn listeleyecek olan uyeara.aspx sayfasn Kullanici klasrne ekleyin. Kul-
lanc listesini gsterecek olan datalist kontroln ekleyin ve bu kontrol ile kullancya arkadalk
teklif edebilmeyi ve mesaj gndermeyi salayn.

<%@ Page Language=C# MasterPageFile=~/herkesburada.


master AutoEventWireup=true CodeFile=uyeara.aspx.cs
Inherits=Kullanici_uyeara Title=Untitled Page %>
<%@ Register Src=../Controls/KullaniciSolMenu.ascx TagName=Kul
laniciSolMenu TagPrefix=uc1 %>

<asp:Content ID=Content1 ContentPlaceHolderID=AnaIcerik


Runat=Server>
<div class=SolMenu>
<uc1:KullaniciSolMenu ID=KullaniciSolMenu1 runat=server
/>

</div>
<div class=KullaniciIcerik>
&nbsp;<br />
&nbsp;<asp:Label ID=lblSonuc runat=server ForeColor=Red
Text=Aradnz kritere ait kullanc bulunamad
Visible=False></asp:Label><br />
<br />
<asp:DataList ID=dtSonuclar runat=server CellPadding=4
ForeColor=#333333 OnItemCommand=dtSonuclar_ItemCommand
Width=632px>
<FooterStyle BackColor=#5D7B9D Font-Bold=True
ForeColor=White />
<SelectedItemStyle BackColor=#E2DED6 Font-Bold=True
ForeColor=#333333 />
<ItemTemplate>
<table style=width: 100%>
herkesburada.com 93

<tr>
<td rowspan=2 style=width: 100px>
<img alt=<%# Eval(UserName).ToString()
%> resmi src=<%# ResimAdres(DataBinder.Eval(Container.DataItem,
UserName).ToString()) %> />
</td>
<td style=width: 100px>
</td>
<td rowspan=3 style=width: 100px
valign=top>
<asp:LinkButton ID=LinkButton3
runat=server CommandArgument=<%# Eval(UserName) %>
CommandName=MesajGonder
ForeColor=Blue>Mesaj Gnder</asp:LinkButton><br />
<asp:LinkButton ID=LinkButton4
runat=server CommandArgument=<%# Eval(UserName) %>
CommandName=Teklif ForeColor=Blue
>Arkadalk Teklif Et</asp:LinkButton></td>
</tr>
<tr>
<td style=width: 100px>
</td>
</tr>
<tr>
<td style=width: 100px>
&nbsp;<asp:Label ID=UserNameLabel
runat=server Text=<%# Eval(UserName) %>></asp:Label></td>
<td style=width: 100px>
</td>
</tr>
</table>
<br />
<br />
</ItemTemplate>
<AlternatingItemStyle BackColor=White
ForeColor=#284775 />
<ItemStyle BackColor=#F7F6F3 ForeColor=#333333 />
<HeaderStyle BackColor=#5D7B9D Font-Bold=True
ForeColor=White />
</asp:DataList><br />
</div>
</asp:Content>

Liste 1.64: uyeara.aspx sayfas html tasarm.

Uyeara.aspx sayfas tasarm grnm ekil 1.34de gsterilmitir.


94 Proje 1

ekil 1.34: Uyeara.aspx sayfas tasarm grnm.

Kullanclar arama ilemini Membership snf zerinden yapn nk hzl arama ilemi yaplr-
ken ihtiya duyulan sadece kullanc addr. Kullanc listeleyecek olan datalist kontrolnn Item-
Command olaynda ise mesaj gndermeyi ve arkadalk teklif etmeyi salayn.

protected void Page_Load(object sender, EventArgs e)


{
if (Request.QueryString[ara] != null)
{
if (!Page.IsPostBack)
{
VerileriListele(Request.QueryString[ara]);
}
}
}

void VerileriListele(string kriter)


{

MembershipUserCollection kullanicilar = Membership.
GetAllUsers();
ArrayList sonuc = new ArrayList();
foreach (MembershipUser kullanici in kullanicilar)
{
if (kullanici.UserName.StartsWith(kriter) ||
kullanici.UserName.EndsWith(kriter))
{
sonuc.Add(kullanici);
herkesburada.com 95

}
}

dtSonuclar.DataSource = sonuc;
dtSonuclar.DataBind();

if (sonuc.Count == 0)
lblSonuc.Visible = true;
else
lblSonuc.Visible = false;

// Arkada listesinde kullancnn resmini dndrr.


protected string ResimAdres(string username)
{
string resimAdres = Profile.GetProfile(username).
ProfilResmi;
return @../UyeResimleri/ + resimAdres;
}

protected void dtSonuclar_ItemCommand(object source,


DataListCommandEventArgs e)
{
if (e.CommandName == MesajGonder)
{
Session[cevap] = + | + e.CommandArgument.
ToString();
Response.Redirect(~/kullanici/cevapla.aspx);
}
else
{
// Arkadalk teklif et.
SqlConnection con = new SqlConnection(ConfigurationMa
nager.ConnectionStrings[LocalSqlServer].ConnectionString);
SqlCommand cmd = new SqlCommand(insert into Ark
adasListesi(Kim,Kimin,OnaylandiMi,TeklifTarihi) Values(dbo.
KullaniciIdAl(@Kim),@Kimin,@OnaylandiMi,@TeklifTarihi),con);
cmd.Parameters.AddWithValue(@Kim,e.CommandArgument.
ToString());
cmd.Parameters.AddWithValue(@Kimin,Membership.
GetUser(User.Identity.Name).ProviderUserKey);
cmd.Parameters.AddWithValue(@OnaylandiMi,false);
cmd.Parameters.AddWithValue(@TeklifTarihi,DateTime.
Now);
int i = 0;
96 Proje 1

try
{
con.Open();
i = cmd.ExecuteNonQuery();
}
catch (Exception)
{
lblSonuc.Text = Bu kiiye daha nceden teklifte
bulunulmu...;
}
finally
{
con.Close();
}

Liste 1.65: Uyeara.aspx metodlar.

Detayl arama yapabilmek iin Kullanici klasrne detayliarama.aspx isimli bir sayfa ekleyin. Bu
sayfada eitli kriterlere gre arama yaplacak. Detayl arama yapmak iin Liste 1.66 da belirtilen
tasarm yapn.

<%@ Page Language=C# MasterPageFile=~/herkesburada.


master AutoEventWireup=true CodeFile=detayliarama.aspx.cs
Inherits=Kullanici_detayliarama Title=Detayl Arama %>
<%@ Register Src=../Controls/KullaniciSolMenu.ascx TagName=Kul
laniciSolMenu TagPrefix=uc1 %>

<asp:Content ID=Content1 ContentPlaceHolderID=AnaIcerik


Runat=Server>
<div class=SolMenu>
<uc1:KullaniciSolMenu ID=KullaniciSolMenu1 runat=server
/>

</div>
<div class=KullaniciIcerik>

<fieldset style=height: auto; width: auto>


<legend><font style=font-size:smaller>ye Ara</font></legend>
<asp:TextBox ID=txtRumuz runat=server Width=385px Valid
ationGroup=Arama></asp:TextBox>&nbsp;<asp:RequiredFieldValidator
ID=RequiredFieldValidator1 runat=server ControlToVali
date=txtRumuz ErrorMessage=Bo Brakmayn ValidationGroup=Ar
ama></asp:RequiredFieldValidator><br />
herkesburada.com 97

&nbsp;<br />
Fotoraf &nbsp; &nbsp; &nbsp; &nbsp; :
<asp:CheckBox ID=chcSadeceFotografli runat=server
Text=Sadece Fotorafl />&nbsp;<br />
Aranacak Alan:
<asp:CheckBox ID=chcAdSoyad runat=server Text=Ad ve
Soyadn da ara /><br />
Cinsiyet &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;:
<asp:DropDownList ID=drpCinsiyet runat=server>
<asp:ListItem Value=True>Bay</asp:ListItem>
<asp:ListItem Value=False>Bayan</asp:ListItem>
</asp:DropDownList>
<br />
Online &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; :
<asp:DropDownList ID=drpDurum runat=server>
<asp:ListItem Value=false>T&#252;m Kullanclar</asp:
ListItem>
<asp:ListItem Selected=True Value=true>Sadece Online
Olanlar</asp:ListItem>
</asp:DropDownList><br />
<br />
<asp:Button ID=btnAra runat=server Text=Ara
OnClick=btnAra_Click ValidationGroup=Arama /><br /></fieldset>
<asp:DataList ID=DataList1 runat=server CellPadding=4
ForeColor=#333333 OnItemCommand=DataList1_ItemCommand
Width=100%>
<FooterStyle BackColor=#5D7B9D Font-Bold=True
ForeColor=White />
<SelectedItemStyle BackColor=#E2DED6 Font-Bold=True
ForeColor=#333333 />
<ItemTemplate>
<table style=width: 100%>
<tr>
<td rowspan=2 style=width: 100px>
<img alt=<%# Eval(UserName).ToString()
%> resmi src=<%# ResimAdres(DataBinder.Eval(Container.DataItem,
UserName).ToString()) %> />
</td>
<td style=width: 100px>
</td>
<td rowspan=3 style=width: 100px
valign=top>
<asp:LinkButton ID=LinkButton3
runat=server CommandArgument=<%# Eval(UserName) %>
CommandName=MesajGonder
ForeColor=Blue>Mesaj Gnder</asp:LinkButton><br />
98 Proje 1

<asp:LinkButton ID=LinkButton4
runat=server CommandArgument=<%# Eval(UserId) %>
CommandName=Teklif ForeColor=Blue
>Arkadalk Teklif Et</asp:LinkButton></td>
</tr>
<tr>
<td style=width: 100px>
</td>
</tr>
<tr>
<td style=width: 100px>
&nbsp;<asp:Label ID=UserNameLabel
runat=server Text=<%# Eval(UserName) %>></asp:Label></td>
<td style=width: 100px>
</td>
</tr>
</table>
<br />
<br />
</ItemTemplate>
<AlternatingItemStyle BackColor=White
ForeColor=#284775 />
<ItemStyle BackColor=#F7F6F3 ForeColor=#333333 />
<HeaderStyle BackColor=#5D7B9D Font-Bold=True
ForeColor=White />
</asp:DataList></div>
</asp:Content>

Liste 1.66: Detayliarama.aspx html tasarm.

Yaplan html tasarm sonras detayliarama.aspx sayfa tasarm ekil 1.35de verilmitir.

Uygulama: Detayl arama yapmay salayan arama ilemini yapn.

Uygulama ierisinde oluabilecek hatalar, zelletirilen hata sayfalarnda gsterilir. Oluan hatay
sistem yneticisine bildirmek iin uygulamaya Global Application Class dosyas yani, global.asax
dosyas ekleyin. Application_Error olaynda uygulama oluan hatalar mail atar. Oluan hata ise
Server.GetLastError() ile alnr. Application_Error olayn Liste 1.67deki ekilde zelleti-
rin.

try
{
System.Net.Mail.MailMessage mail = new System.Net.Mail.
MailMessage();
mail.From = new System.Net.Mail.MailAddress(hataci@
herkesburada.com);
mail.To.Add(admin@herkesburada.com);
mail.Subject = Site Hatas;
mail.Priority = System.Net.Mail.MailPriority.High;
herkesburada.com 99

mail.Body = Mesaj : + Server.GetLastError().Message


+ Environment.NewLine + Trace : + Server.GetLastError().
StackTrace;
System.Net.Mail.SmtpClient client = new System.Net.
Mail.SmtpClient(localhost);
client.Send(mail);

}
catch (Exception ex)
{
throw ex;
}

ekil 1.35: Detayliarama.aspx sayfa tasarm.

Liste 1.67: Global.asax Application_Error.

Controls klasr ierisine AdminSolMenu.ascx isminde bir User Control ekleyin. Bu menu sadece
admin rolndeki kullanclara gsterilecek. Admin rol grubuna ait kullanclarn dzenleyebilecei
bilgiler iin meny Liste 1.68de gsterildii gibi ekillendirin.

<%@ Control Language=C# AutoEventWireup=true


CodeFile=AdminSolMenu.ascx.cs Inherits=Controls_AdminSolMenu
%>
<fieldset style=width: 129px; height: 69px>
<legend>ye Ara</legend>
<asp:TextBox ID=txtRumuz runat=server Width=125px></
asp:TextBox><br />
&nbsp;<asp:Button ID=btnAra runat=server OnClick=btnAra_
Click Text=Ara /></fieldset>
100 Proje 1

&nbsp;<br />
<br />
<asp:Menu ID=Menu1 runat=server BackColor=#E3EAEB
DynamicHorizontalOffset=2
Font-Names=Verdana Font-Size=0.8em ForeColor=#666666
Height=105px StaticSubMenuIndent=10px
Width=134px>
<StaticMenuItemStyle HorizontalPadding=5px
VerticalPadding=2px />
<DynamicHoverStyle BackColor=#666666 ForeColor=White />
<DynamicMenuStyle BackColor=#E3EAEB />
<StaticSelectedStyle BackColor=#1C5E55 />
<DynamicSelectedStyle BackColor=#1C5E55 />
<DynamicMenuItemStyle HorizontalPadding=5px
VerticalPadding=2px />
<Items>
<asp:MenuItem NavigateUrl=~/Admin/Default.aspx
Text=Admin Ana Sayfa Value=Admin Ana Sayfa>
</asp:MenuItem>
<asp:MenuItem Text=&#220;ye Y&#246;netimi
Value=Mesajlarm>
<asp:MenuItem NavigateUrl=~/Admin/uyeler.aspx
Text=&#220;yeler Value=&#220;yeler>
</asp:MenuItem>
<asp:MenuItem NavigateUrl=~/Admin/albumler.aspx
Text=Alb&#252;mler Value=Alb&#252;mler>
</asp:MenuItem>
</asp:MenuItem>
<asp:MenuItem Text=Tanmlamalar Value=Arkadalarm>
<asp:MenuItem Text=ehirler Value=ehirler
NavigateUrl=~/Admin/sehirler.aspx></asp:MenuItem>
<asp:MenuItem NavigateUrl=~/Admin/takimlar.aspx
Text=Takmlar Value=Takmlar></asp:MenuItem>
<asp:MenuItem Text=Meslekler Value=Meslekler
NavigateUrl=~/Admin/meslekler.aspx></asp:MenuItem>
<asp:MenuItem Text=Eitim Durumlar Value=Eitim
Durumlar NavigateUrl=~/Admin/egitimler.aspx></asp:MenuItem>
</asp:MenuItem>
</Items>
<StaticHoverStyle BackColor=#666666 ForeColor=White />
</asp:Menu>
<br />

Liste 1.68: AdminSolMenu.ascx html tasarm.

Aynen KullaniciSolMenu.ascx User Controlne benzeyen bu menu sayfasnn tasarm grnm


ekil 1.36te gsterilmitir.
herkesburada.com 101

Uygulama ierisine Admin klasr ekleyin. Bu klasr ierisine takimlar.aspx


sayfas ekleyin. Admin klasrne sadece admin rol grubuna ait olan kullan-
clar eriecek ve buradaki sayfalar sayesinde site ynetimi yaplacak. Ekle-
nen takimlar.aspx sayfasnda GridView kontrol sayesinde verileri listeleyin,
DetailsView kontrol sayesinde yeni kayt ekleyin ve gncelleyin.

Takimlar.aspx sayfas html tasarm Liste 1.69da gsterilmitir.

<%@ Page Language=C# MasterPageFile=~/ ekil 1.36: AdminSol-


herkesburada.master AutoEventWireup=true Menu.ascx tasarm g-
CodeFile=takimlar.aspx.cs Inherits=Admin_ rnm.
takimlar Title=Untitled Page %>
<%@ Register Src=../Controls/AdminSolMenu.ascx
TagName=AdminSolMenu TagPrefix=uc1 %>

<asp:Content ID=Content1 ContentPlaceHolderID=AnaIcerik


Runat=Server>
<div class=SolMenu>
<uc1:AdminSolMenu id=AdminSolMenu1 runat=server>
</uc1:AdminSolMenu></div>
<div class=KullaniciIcerik>
<asp:UpdatePanel ID=UpdatePanel1 runat=server>
<ContentTemplate>
<asp:GridView ID=GridView1 runat=server
AllowPaging=True AllowSorting=True
AutoGenerateColumns=False BackColor=White
BorderColor=#DEDFDE BorderStyle=None
BorderWidth=1px CellPadding=4
DataKeyNames=TakimId DataSourceID=SqlDataSource1
ForeColor=Black GridLines=Vertical
Width=512px>
<FooterStyle BackColor=#CCCC99 />
<Columns>
<asp:BoundField DataField=TakimAdi
HeaderText=TakimAdi SortExpression=TakimAdi />
<asp:CommandField CancelText=ptal
DeleteText=Sil EditText=D&#252;zenle InsertText=Ekle
SelectText=Se&#231;
ShowDeleteButton=True ShowEditButton=True UpdateText=G&#252;
ncelle />
</Columns>
<RowStyle BackColor=#F7F7DE />
<SelectedRowStyle BackColor=#CE5D5A Font-
Bold=True ForeColor=White />
<PagerStyle BackColor=#F7F7DE ForeColor=Black
HorizontalAlign=Right />
<HeaderStyle BackColor=#6B696B Font-Bold=True
ForeColor=White />
102 Proje 1

<AlternatingRowStyle BackColor=White />


</asp:GridView>
<asp:LinkButton ID=LinkButton1 runat=server
OnClick=LinkButton1_Click ForeColor=Blue>Yeni</asp:
LinkButton><br />
</ContentTemplate>
</asp:UpdatePanel>
<asp:UpdatePanel ID=UpdatePanel2 runat=server>
<ContentTemplate>
<asp:DetailsView ID=DetailsView1 runat=server
AutoGenerateRows=False CellPadding=4
DataKeyNames=TakimId DataSourceID=SqlDataSourc
e1 ForeColor=#333333 GridLines=None
Height=49px Width=297px OnItemCommand=Detail
sView1_ItemCommand OnItemInserted=DetailsView1_ItemInserted>
<FooterStyle BackColor=#507CD1 Font-Bold=True
ForeColor=White />
<CommandRowStyle BackColor=#D1DDF1 Font-
Bold=True />
<EditRowStyle BackColor=#2461BF />
<RowStyle BackColor=#EFF3FB />
<PagerStyle BackColor=#2461BF ForeColor=White
HorizontalAlign=Center />
<Fields>
<asp:BoundField DataField=TakimAdi
HeaderText=Takm Ad SortExpression=TakimAdi />
<asp:CommandField ShowInsertButton=True
CancelText=ptal InsertText=Ekle />
</Fields>
<FieldHeaderStyle BackColor=#DEE8F5 Font-
Bold=True />
<HeaderStyle BackColor=#507CD1 Font-Bold=True
ForeColor=White />
<AlternatingRowStyle BackColor=White />
</asp:DetailsView>
</ContentTemplate>
</asp:UpdatePanel>
<br />
<asp:SqlDataSource ID=SqlDataSource1 runat=server Conflic
tDetection=CompareAllValues
ConnectionString=<%$ ConnectionStrings:ConStrHerkesBurada
%> DeleteCommand=DELETE FROM [Takimlar] WHERE [TakimId] = @
original_TakimId AND [TakimAdi] = @original_TakimAdi
InsertCommand=INSERT INTO [Takimlar] ([TakimAdi]) VALUES
(@TakimAdi) OldValuesParameterFormatString=original_{0}
SelectCommand=SELECT [TakimId], [TakimAdi] FROM
[Takimlar] UpdateCommand=UPDATE [Takimlar] SET [TakimAdi] = @
herkesburada.com 103

TakimAdi WHERE [TakimId] = @original_TakimId AND [TakimAdi] = @


original_TakimAdi>
<DeleteParameters>
<asp:Parameter Name=original_TakimId Type=Int32
/>
<asp:Parameter Name=original_TakimAdi Type=String
/>
</DeleteParameters>
<UpdateParameters>
<asp:Parameter Name=TakimAdi Type=String />
<asp:Parameter Name=original_TakimId Type=Int32
/>
<asp:Parameter Name=original_TakimAdi Type=String
/>
</UpdateParameters>
<InsertParameters>
<asp:Parameter Name=TakimAdi Type=String />
</InsertParameters>
</asp:SqlDataSource>
</div>
</asp:Content>

Liste 1.69: Admin\Takimlar.aspx sayfas html tasarm.

Html tasarm yaplan takimlar.aspx sayfasnn tasarm grnm ekil 1.37da gsterilmitir.

Uygulama: Takimlar.aspx sayfas haricindeki dier ynetim sayfalarn yapn.

ekil 1.37: Admin\Takimlar.aspx sayfa tasarm grnm.


2 Proje 2: Otobs
Otomasyonu
2 Proje 2: Otobs
Otomasyonu
Genel Bak

Grmeler

Uygulama Tasarm
Proje 2: Otobs Otomasyonu
Genel Bak
Hzl Tur A. Trkiyenin drt bir yanna otobs seferleri dzenleyen bir otobs firmasdr. Yakla-
k olarak bir ay ncesine kadar sadece iki ehre sefer dzenleyen Hzl Tur, artk lkenin drt
bir yanna seferler dzenlemeye balad. imdiye kadar kesilen biletlerin hepsi bilgisayar ortam
olmadan elle kesildii iin takibinde zorluklar yaanyor, mteri kaydnn tutulmamas yzn-
den mteri profili bilinmiyor ve herhangi zel bir promosyon yaplamyor, personel takibinde ve
otobs seferlerinde de karklklar oluuyor. Bu sorunlar zmek iin yeni bir ynetim sistemi
yazlm yaptrlmak isteniyor.

Grmeler
zgr Koluksa (Genel Mdr)
Bugne kadar sadece iki ehre sefer dzenlediimiz iin elle bilet kesmek bize yetiyordu fakat
yaptmz yatrmlar sonucu artk her ehre sefer dzenliyoruz. Mevcut sistem ile bu iin altn-
dan kalkma imkanmz yok ve yeni bir uygulama yazdrmak istiyoruz. Benim zellikle istediim,
herhangi tarih aralnda hangi ehirden hangi ehre ka yolcu gittiini grmektir. Uygulama ie-
risinde iki adet yetki olacak. Bunlardan biri ynetici iin dieri ise bilet kesecek olan banko al-
an iin. Yneticilerin hepsi ayn yetkide olacak, bankoda alacak personelin ise yetkileri ayn
olacak.Bu ayrm sonucu bankoda grevli personel, yani ynetici rolne sahip olmayan personel
bilet ilemleri ve mteri ilemleri yapabilecek, dier ilemleri yapamayacak ve o ilemlere ait
menleri gremeyecek.

Seluk Huysuz (Mteri Hizmetleri Mdr)


Yaplacak temel seferleri, ekstra bir durum ortaya kmad srece 1 aylk olarak planlyoruz.
Mterilerimiz bu 1 aylk sre iinde herhangi bir tarih iin bilet rezervasyonu yaptrabilmeli veya
istedii tarihe bilet al yapabilmeli. Rezervasyon ilemi iin eer rezerve edilmi bilet otobs
kalk zamanndan 10 dakika ncesine kadar alnmamsa rezervasyon otomatik olarak iptal edi-
lecek. Mmkn olan her mterimizin kaydn tutmak istiyoruz. Eer daha nceden bizde kayd
yoksa kayd alnmal fakat bu kural bilet sat veya rezervasyon ilemleri iin zorunlu olmamal.
Telefon ap bilet alacak mteri iin de mteri kart amak zor olduundan direk ad ve soyad ile
ilem yapabilmeliyiz ama eer imkan varsa mteri kart oluturmak istiyoruz. Sistem tarafndan
otomatik olarak verilecek olan kart numaras sayesinde daha sonradan barkod okuyucu kullana-
rak direk o mteriye bilet sat veya rezervasyon yapabilmeliyiz. Kartn asl amac ise belirli bir
sayda bilet alan mterilerimize bilet hediye etmektir. rnein her 10 bilette 1 bilet bedava gibi
ama bu kriter sabit deil ileride belki 7 bilette 1 bilet hediye edebiliriz. Ald her bilet cretinin belli
bir orann mterinin kartna geri ykleyeceiz.Yeterli kredisi olduu zaman bunu kullanabilecek
ama bir artmz var. rnein 40 YTL kredisi var alaca bilet 65 YTL. Eer mevcut kredisi alaca-
biletten az ise kredi kullanm yapamayacak.Mterimizin bu hediye puan kullandktan sonra
bu puan ne zaman kullanm bilgisi iimize yaramyor grmesek de olur sadece bilet satnda
bildirilsin yeter. Detayl yolcu profilimizi grebilmek asndan yolcularmzn ya, cinsiyeti vb. gibi
bilgileri de grmek istiyorum.

Baki okbilmi (Personel Sorumlusu)


Bir bilet sat veya rezervasyonu yaplrken hangi ehirdeki hangi ubeden ilemin gerekletiril-
diini ve hangi personelin bu ilemi gerekletirdiini grebilmeliyim. Her personele bir kullanc
ad ve ifre vermeliyim. Personelin ie balama veya vardiya devralma zamann takip etme zor-
luu yaadmz iin programda kullanc ad ve ifresini girip oturum at saatleri de grmek
istiyorum. Bu sayede hangi personelin hangi ubede hangi saatler arasnda altn bileceim.
Personel takibinin yan sra sefer ilemleri de bana bal.stediim tarihte istediim seferi tanm-
layp, istediim otobs ve ofr grevlendirme imkanm olmal.
108 Proje 2

Vildan Parasever (Muhasebe Sorumlusu)


Mterilerin ald biletlerin gnlk, aylk raporlarn ve otobslerin seferlerde yapt harcama tu-
tarlarn grebilmeliyim. u an iin otoban masraflar, terminal giri k masraflar, yemek cret-
leri ve trafik cezas kalemlerini masraf olarak kabul ediyoruz ama ileride yeni harcama kalemleri
ekleme imkan da olmal.

Uygulama Analizi
Hzl Tur A.nin isteklerine ynelik bir analiz yaplacak olursa;

Farkl ubelerde alan personelin ne zaman hangi ilemi yaptnn kayd tutulacak.
Bilet sat esnasnda eer mteriye bilet sat yaplyorsa mteri kartna kredi yklenecek.
Mterimiz deilse normal sat yaplacak.
Bilet sat esnasnda mterimizin yeterli kredisi varsa krediden dlecek ve bileti cretsiz
alm olacak.
Otobs kaytlar, otobste alan personel kayd ve sefer esnasndaki harcama bilgileri kayt
altna alnacak.
Aylk olarak istenen ehre istenen sefer tanmlamas yaplabilecek.
Uygulama yetki baz alnarak alacak ve yetkilere gre kullanan kiiye baz menler gste-
rilmeyecek.Yetki ise 2 trl olacak.
ube, Sefer, Otobs ve Personel tanmlamalar yaplabilecek.

Uygulama Tasarm
Veritaban Tasarm
Veritaban sunucunuza balanp HizliTur isminde veritaban oluturun.
Veritabannda kullanlacak olan tablolar, veri tipleri ve ek zellikleri ekil 2.1 ile ekil 2.15
arasnda gsterilmekte.

ekil 2.1: OtobusMasraflari tablosu. ekil 2.2: PersonelGirisCikis tablosu.

IslemZamani stunu iin default tanmlayn ve GetDate() olarak verin.

ekil 2.3: Default tanmlamas.


Otobs Otomasyonu 109

ekil 2.4: Seferler tablosu. ekil 2.5: Sehirler tablosu.

ekil 2.6: Subeler tablosu. ekil 2.7: Ayarlar tablosu.

Biletler tablosundaki YolcuId ilemi yaptran kiinin kaytl olup olmadn belirtiyor. Eer YolcuId
mevcut ise o yolcuya belirtilen oranda puan hediye edilecek.

ekil 2.8: Biletler tablosu. ekil 2 9: Calisanlar tablosu.

Biletler tablosundaki SatisTip stunu yaplan satn mterideki kredi kullanlarak m yapldn
belirtiyor. False normal sat, true kredili sat anlamna gelmektedir.

ekil 2.10: CalisanTipleri tablosu. ekil 2.11: Hatalar tablosu.

ekil 2.12: Markalar tablosu. ekil 2.13: MasrafTipleri tablosu.

ekil 2.14: Musteriler tablosu.


110 Proje 2

Tm tablolardaki primary key sutunlarnnn Mteriler tablosundaki KartDurumu stunu mteri-


identity specification Yes yaplmal ve identitty
ye kartn teslim edilip edilmediinin bilgisini tutacak.
increment ve seed 1 olarak belirtilmelidir.
Mteriler tablosundaki MevcutPara stunu mteri-
nin hediye para durumunu tutacak.

Uygulamann baz ayarlar veritaban zerinde tutulmak


zorundadr. Bunun sebebi ise client makine denen u-
belerdeki uygulamalar ilem yaparken sunucu zerinden
bilgileri alp o bilgilere gre ilem yapmaldr. Bu yzden
zm olarak veritaban zerinde ayarlar tablosu tutul-
mu ve bu ayarlar tablosuna sabit deerler girilmitir. Bu
ekil 2.15: Otobusler tablosu.
ekilde farkl ubelerdeki uygulamalarn da belirli ayarla-
ra gre almas salanmtr.

Ayarlar tablonuza mteri satlar iin bir bilete ne kadar puan


aktarm yapacamz belirleyen anahtar tanmlayn. Tanmla-
maktan kast yeni bir kayt girin.
Insert into ayarlar values(BiletGeriOdemeOrani,0,1)
Artk BiletGeriOdemeOrani anahtar veritaban zerinde tanmla-
nan bir ayar olmutur.
Bu anahtar sayesinde program ilk altnda her 10 bilete 1 bilet
hediye edilecek ekilde yaplandrld. Bilet sat esnasnda a-
lacak olan trigger buradaki oran okuyup mterinin hesabna
okunan orana gre puan aktarm yapacak.
14 tablodan oluan veritabann tasarladktan sonra veritaban-
ekil 2.16: Veritaban tablo yaps.
tablo kts ekil 2. 16da gsterilmektedir.

Tablolarn hepsini ayn anda diyagrama ekleyip a- Veritaban tablo tasarm yapldktan sonra HizliTur
lmak kark gelebilir. allacak tablolar tek tek veritabanna yeni bir veritaban diyagram ekleyin.
eklemek diagramda almay kolaylatracaktr.
Tablolarnz diagrama ekleyin.

Oluturulan diagram zerinde Tablo 2.1deki ilikileri yaplandrn.

Tablo 2.1: Veritaban likileri


Kaynak Tablo Kaynak Stun Hedef Tablo Hedef Stun
Markalar MarkaId Otobusler MarkaId
Otobusler OtobusId OtobusMasraflari OtobusId
MasrafTipleri MasrafTipId OtobusMasraflari MasrafTipId
Seferler SeferId OtobusMasraflari SeferId
Sehirler SehirId Seferler KalkisSehirId
Sehirler SehirId Seferler VarisSehirId
Otobusler OtobusId Seferler OtobusId
Calisanlar PersonelId Seferler SoforId
Calisanlar PersonelId Seferler MuavinId
Subeler SubeId Calisanlar SubeId
Sehirler SehirId Subeler SehirId
Sehirler SehirId Musteriler SehirId
Calisanlar PersonelId PersonelGirisCikis PersonelId
Musteriler MusteriId Biletler YolcuId *
Calisanlar PersonelId Biletler IslemiYapanPersonelId
Seferler SeferId Biletler SeferId
CalisanTipleri CalisanTipId Calisanlar CalisanTipId
Otobs Otomasyonu 111

* Bu ilikiyi kurarken Enforce Foreign Key Constraint zel- Veritabannz zerindeki ilikileri gr-
mek iin select * from sys.objects whe-
liini False yapn. Bileti alan kii eer mteri ise MusteriId re type=F sorgusunu yrtebilirsiniz.
kayd girilecek, ama mteriye sat yaplmyorsa bo gei-
lebilecek ve bilgi tutarll zorlanmayacak.

Veritaban diagram ekil 2.17de verilmitir.

ekil 2.17: HizliTur veritaban diagram.

HizliTur veritaban zerinde sa tklayn ve New Query mensne tklayn.


Proje altyapsnda kullanlacak olan standart ilemler iin stored procedure (sakl yordam)
oluturun. Liste 2.1 ile Liste 2.5 arasnda Subeler tablosu rnek alnarak gerekli stored
procedureler oluturulmutur. Dier tablolar iin de ayn yapda ekleme, silme, gncelleme,
tm kaytlar listeleme ve bir kaydn detayn grntleme stored procedureleri oluturun. Bu
ilem sonucu 70 adet stored procedure olacak.

CREATE PROC SubeEkle


(
@SubeAdi nvarchar(50),
@SehirId int
)
AS
INSERT INTO Subeler(SubeAdi,SehirId) VALUES(@SubeAdi,@SehirId)
Liste 2.1: SubeEkle stored procedure.

CREATE PROC SubeGuncelle


(
@SubeId int,
@SubeAdi nvarchar(50),
@SehirId int
)
AS
112 Proje 2

UPDATE Subeler SET SubeAdi = @SubeAdi , SehirId = @SehirId WHERE


SubeId = @SubeId
Liste 2.2: SubeGuncelle stored procedure.

CREATE PROC SubeSil


(
@SubeId int
)
AS
DELETE FROM Subeler Where SubeId = @SubeId
Liste 2.3: SubeSil stored procedure.

CREATE PROC SubeListesi

AS
SELECT SubeId, SubeAdi, SehirId From Subeler
Liste 2.4: SubeListesi stored procedure.

CREATE PROC SubeDetay


(
@SubeId int
)
As
Select SubeId, SubeAdi, SehirId From Subeler Where SubeId = @SubeId

Liste 2.5: SubeDetay stored procedure.

Hazrlanan bu 70 stored procedure yaplacak temel ilemler iin oluturulmutur. Bunlarn ha-
ricinde proje ierisinde farkl ilemleri yapacak stored procedurelere ihtiya duyulacak ,ve bu
stored procedureler yeri geldike oluturulacaktr.

Uygulama Tasarm
Gnmzde uygulama mimarisi, katmanl yap zerine oluturulur. Katmanl yap ayn ilemi ya-
pan kodlar tekrar yazma sorununu ortadan kaldrr. Sonradan yaplan bir deiikliin, uygulama-
nn tamamn direk etkilemesi salanr. Farkl platformlar iin (web, windows) ayn kodlar tekrar
yazmamza gerek kalmaz. Uygulama ynetiminin kolay yaplmasn, oluacak bir sorun esnasn-
da mdahale edilecek yere direk ulam salar. Uygulama testlerinin daha kolay yaplabilmesini
de salar.

Uygulama katman yapsnn belirli bir standard yoktur. eitli katman yaplar kullanlr. Bun-
lardan en yaygn olarak kullanlan Entity Facade yapsdr. Bunun haricinde de eitli yaplar
kullanlr ve bu yaplara Pattern denilir. Bu projede Entity Facade yaps kullanlacaktr. Entity
katmanndan kast veritaban ile uygulama arasnda kullanlacak olan tiplerin (type) tanmland
katmandr. Facade katman ise belirlenen bu tiplerin veritaban ile haberlemesini salayacak
olan katmandr.
Otobs Otomasyonu 113

Visual Studio .Net programn an.


File > New > Project menlerini takip ederek proje oluturma ekrann an.
Project Types blmnden Other Project Types mensn geniletin.
Visual Studio Solutions mensn sein.
Solution ismi olarak HizliTurSln girin. (ekil 2.18 Yeni bo solution oluturma ekran.)

ekil 2.18: Yeni bo solution oluturma ekran.

Oluturulan solutiona yeni bir Class Library


Katmanl bir uygulama tasarlarken namespace isimleri ProjeA-
projesi ekleyip ismini HizliTur.Entity olarak d.Katman (HizliTur.Entity) eklinde tanmlanrsa uygulamann
belirleyin. Bu proje veritaban ilemleri iin yazm ve classlarn anlalrl daha da rahat olacaktr.
kullanlacak olan classlar ve propertyleri
barndracak olan katmandr.

Eklenen projedeki class1 ismindeki class silin. Bir solutiona ilk proje eklendii zaman solution
dosyas (*.sln uzantl dosya) Solution Explorer penceresinde gizlenir. kinci proje eklendii za-
man bu dosya Solution Explorer penceresinde grnr. Bu dosyann srekli grnmesi iin Tools
> Options > Projects and Solutions > Always show solution mens seilmelidir.

Oluturulan solutiona yeni bir Class Library projesi ekleyip ismini HizliTur.Facede oalark belirle-
yin. Bu proje veritaban balantlarnda ekleme, silme vb. ilemleri yapacak olan katmandr.

Eklenen projedeki class1 ismindeki class silin.


Oluturulan solutiona yeni bir windows projesi ekleyip ismini Hiz-
liTur.WinUI olarak belirleyin.
HizliTur.WinUI projeniz zerinde sa tklayn, Set As Startup Pro-
ject mensne tklayn. Bu seenek sayesinde uygulama derlen-
dii zaman (F5 tuuna basld zaman) Startup Project olarak
seilen proje balatlr.
Oluturulan proje kts ekil 2.19da gsterilmitir. ekil 2.19: HizliTurSln proje dos-
ya yaps.
114 Proje 2

Veri Katman Tasarm


HizliTur.Entity Class projesine veritabanndaki her tabloya karlk gelecek bir class, bu class
ierisine her stuna karlk gelecek property oluturun. Class isimlerini tekil olacak ekilde verin.
rnein veritabannda bulunan Subeler tablosu iin olacak class ad Sube olmal. Nesneye daha
sonra deer atamak veya sadece istenen bir property kullanabilmek iin bo bir constructor olu-
turun. Bunun haricinde tek satrda bir nesneye deer atayabilmeyi salamak iin iindeki her pro-
perty iin parametre alan bir constructor oluturun. Bylece tek bir satrda nesneye deer atanm
olacaktr ve daha az yazm olacaktr. rnein Sehir sehir = new Sehir(Ankara);
gibi.

Unutulmamaldr ki isimlendirilen her uzun veritaban stun ad, property, class veya metot daha sonra yine
sizin tarafnzdan yazlacak. Ne kadar uzun isimlendirme veya yanl yap tasarlarsanz o kadar ok kod yazar-
snz fakat ksa isimlendirme olacak diye de ok ksa yazlp anlamsz isimlendirme tekniine gidilmemelidir.

Projede kullanlacak yapya rnek olarak Sube class Liste 2.6da verilmitir.

using System;
using System.Collections.Generic;
using System.Text;

namespace HizliTur.Entity
{
public class Sube
{

private int _SubeId;


private string _SubeAdi;
private int _SehirId;

public int SubeId


{
get { return _SubeId; }
set { _SubeId = value; }
}

public string SubeAdi
{
get { return _SubeAdi; }
set { _SubeAdi = value; }
}

public int SehirId


{
get { return _SehirId; }
set { _SehirId = value; }
Otobs Otomasyonu 115

public Sube()
{

public Sube(int subeId, string subeAdi, int sehirId)


{
this._SubeId = subeId;
this._SubeAdi = subeAdi;
this._SehirId = sehirId;
}

}
}

Liste 2.6: rnek Sube class.

HizliTur.Entity proje kts ekil 2.20de verilmitir.

ekil 2.20: HizliTur.Entity proje kts. ekil 2.21: Referans ekleme.

HizliTur.Facade projesine gein. Bu projenin zerinde sa tklayn .


Add Reference mensne tklayn.
Alan pencereden Projects tabna gein.
HizliTur.Entity proje ktsn sein ve OK butonuna tklayn. (ekil 2. 21)
HizliTur.Facade projenize Util isminde bir class ekleyin. Bu class sklkla yaplan database i-
lemlerinin tek bir noktadan ynetilmesini salayacak. erisindeki Yurut(SqlCommand cmd)
olarak tanmlanan metot SqlCommand tipinden bir parametre alacak ve bu parametrede gelen
komutun(SqlCommand) ExecuteNonQuery() metodunu altracak. Bylece her Exucute-
NonQuery() metodunun kullanlmas gereken metodda, try catch hata yakalama mekanizma-
s kullanlmayacak, tek bir yerde kullanlacak ve ynetim tek bir yerden olacak. Metodun static
yaplmasnn sebebi ise bu metodu kullanabilmek iin bulunduu classn yeni bir instancenn
116 Proje 2

oluturulmasna gerek duyulmamasdr. Bu sayede her Yurut() metodu armnda Util class
tipinden yeni bir instance oluturmaya gerek duyulmaz. Util class ierii Liste 2.7de verilmitir.

using System;
using System.Collections.Generic;
using System.Text;
using System.Data.SqlClient;

namespace HizliTur.Facade
{
public class Util
{

// Projenin genelinde kullanilacak olan balant


tanimlamasi.
public static string ConnectionString = server=.;
database=HizliTur;Integrated Security=SSPI;pooling=true;Min Pool
Size=100;Max Pool Size=200;

public static int Yurut(SqlCommand cmd)


{
int etkilenenSatirSayisi = -1;
try
{
cmd.Connection.Open();
etkilenenSatirSayisi = cmd.ExecuteNonQuery();
}
catch (SqlException)
{
//throw
}
finally
{
cmd.Connection.Close();
}

return etkilenenSatirSayisi;
}
}
}

Liste 2.7: HizliTur.Facade projesi ierisindeki Util class.

etkilenenSatirSayisi isminde bir deiken tanmlanp dndrlmesinin sebebi etkilenen


satr saysn renebilmektir. Eer ilem ekleme, silme ve gncelleme iin baarl olur ise 1
deeri dnecektir. Eer herhangi bir satr etkilenmez ama sorgu baarl bir ekilde yrtlrse 0
deeri dnecektir. Hata olmas durumunda ise -1 deeri dndrlr. Baarl ilem sonucu etkile-
Otobs Otomasyonu 117

necek satr says 0 ve daha fazla olmal bu yzden eer bir hata olursa -1 dndrlr ki arayz
tarafndan bu hatay yakalayp kullancya hata ile ilgili mesaj gsterilebilsin.

Uygulama gelitirme aamasndayken kullanlan catch scopelar ierisinde throw kullanmak,


oluan hatalarn zlmesi iin ok baarl bir yntemdir. Fakat uygulama gelitirme aamas
tamamlanp production denilen srm ortaya ktktan sonra bu throwlarn silinmesi gerekir ki
kullanclara oluan hatalar kt bir biimde aktarlmasn.

Yazlan binlerce kodun arasnda nerede throw kullanldnn tespiti zor olacaktr. Bunu kolay-
latrmak iin her throw bana #warning nilemci direktifi kullanlrsa derledikten sonra Error
List penceresinde bu ksmlar uyar olarak bize gsterilecek ve ok rahat bir ekilde deiiklikler
yaplabilecektir. rnein:

catch (SqlException ex)


{
#warning Buray Silmeyi Unutma!
throw ex;
}

Oluabilecek hata kaytlarn tutmak iin HizliTur.Facade projesine Hataci isminde bir class ekle-
yin. Hata kaytlarn tutmay salayacak olan YeniHataKaydi(SqlException hata) meto-
dunu yazn. (Liste 2.8)

using System;
using System.Collections.Generic;
using System.Text;
using System.Data.SqlClient;

namespace HizliTur.Facade
{
public class Hataci
{
public static void YeniHataKaydi(SqlException hata)
{
SqlConnection con = new SqlConnection(Util.
ConnectionString);
SqlCommand cmd = new SqlCommand(HataKaydiEkle,
con);
cmd.CommandType = System.Data.CommandType.
StoredProcedure;
cmd.Parameters.AddWithValue(@Numara,hata.Number);
cmd.Parameters.AddWithValue(@Mesaj,hata.Message);
cmd.Parameters.AddWithValue(@Procedure, hata.
Procedure);
try
{
con.Open();
cmd.ExecuteNonQuery();
}
118 Proje 2

catch (SqlException ex)


{
#warning Silmeyi unutma !
throw ex;
}
finally
{
con.Close();
}

}
}
}

Liste 2.8: Hata kaytlarn tutmay salayan class ve metod.

HizliTur.Facade projesi ierisindeki Util classndaki Yurut metodu ierisindeki catch scopeunu
Liste 2.9daki ekilde deitirin.

catch (SqlException ex)


{
Hataci.YeniHataKaydi(ex);
#warning Silmeyi unutma !
throw;
}

Liste 2.9: rnek hata yakalama mekanizmas.

Bir proje ierisinde kullanlan her metoda Summary bilgisinin yazlmas hangi metodun hangi
amala kullandnn not edilmesini ve projeye daha sonradan katlan programclarn ok abuk
adapte olmalarn salar. Bunun haricinde zellikle dokmantasyon iin SandCastle, Ndoc tarz
programlar bu summary bilgilerine gre yazlan kodlarn dokmantasyonun ok kolay bir ekilde
otomatik karmaktadr. Summary kullanlmad taktirde uygulama dkmantasyonu tek tek elle
yazlmak zorundadr. Proje dkmantasyonu iin SandCastle uygulamas kullanlabilir. (www.
sandcastleproject.org)

HizliTur.Facade projesine her tabloya karlk bir class ekleyin, classlarn isimlerini tekil veri ve
standart ilemler iin (ekleme-silme-gncelleme-tmn listeleme ve detay grntleme) stored
procedurelerini altrp gerekli sonular dndren metodlar yazn. ube ilemlerini yapacak
olan Sube class Liste 2.10da rnek olarak gsterilmitir.

using System;
using System.Collections.Generic;
using System.Text;
using System.Data.SqlClient;
using System.Collections;

namespace HizliTur.Facade
{
Otobs Otomasyonu 119

public class Sube


{

public static int Ekle(Entity.Sube sube)
{
SqlConnection con = new SqlConnection(Util.
ConnectionString);
SqlCommand cmd = new SqlCommand(SubeEkle, con);
cmd.CommandType = System.Data.CommandType.
StoredProcedure;

cmd.Parameters.AddWithValue(@SubeAdi, sube.SubeAdi);
cmd.Parameters.AddWithValue(@SehirId, sube.SehirId);

return Util.Yurut(cmd);
}

public static int Guncelle(Entity.Sube sube)


{
SqlConnection con = new SqlConnection(Util.
ConnectionString);
SqlCommand cmd = new SqlCommand(SubeGuncelle, con);
cmd.CommandType = System.Data.CommandType.
StoredProcedure;

cmd.Parameters.AddWithValue(@SubeId,sube.SubeId);
cmd.Parameters.AddWithValue(@SubeAdi,sube.SubeAdi);
cmd.Parameters.AddWithValue(@SehirId,sube.SehirId
);

return Util.Yurut(cmd);
}

public static int Sil(Entity.Sube sube)


{
SqlConnection con = new SqlConnection(Util.
ConnectionString);
SqlCommand cmd = new SqlCommand(SubeSil, con);
cmd.CommandType = System.Data.CommandType.
StoredProcedure;

cmd.Parameters.AddWithValue(@SubeId, sube.SubeId);

return Util.Yurut(cmd);
120 Proje 2

}
public static ArrayList SubeListesi()
{
SqlConnection con = new SqlConnection(Util.
ConnectionString);
SqlCommand cmd = new SqlCommand(SubeListesi, con);
cmd.CommandType = System.Data.CommandType.
StoredProcedure;
ArrayList subeListesi = new ArrayList();
try
{
con.Open();
SqlDataReader rdr = cmd.ExecuteReader();
while (rdr.Read())
{
Entity.Sube sube = new Entity.Sube();
sube.SubeId = Convert.ToInt32(rdr[SubeId]);
sube.SubeAdi = rdr[SubeAdi].ToString();
sube.SehirId = Convert.
ToInt32(rdr[SehirId]);

subeListesi.Add(sube);
}
}
catch (SqlException ex)
{

Hataci.YeniHataKaydi(ex);
#warning Silmeyi unutma !
throw;

}

finally
{
con.Close();
}

return subeListesi;
}

public static Entity.Sube DetayGoruntule(int subeId)


{
Otobs Otomasyonu 121

SqlConnection con = new SqlConnection(Util.


ConnectionString);
SqlCommand cmd = new SqlCommand(SubeDetay, con);
cmd.CommandType = System.Data.CommandType.
StoredProcedure;
cmd.Parameters.AddWithValue(@SubeId, subeId);
Entity.Sube sube = null;
try
{
con.Open();
SqlDataReader rdr = cmd.ExecuteReader();
sube = new HizliTur.Entity.Sube();
if (rdr.Read())
{

sube.SehirId = Convert.
ToInt32(rdr[SehirId]);
sube.SubeAdi = rdr[SubeAdi].ToString();
sube.SubeId = Convert.ToInt32(rdr[SubeId]);

}
}
catch (SqlException ex)
{
Hataci.YeniHataKaydi(ex);
#warning Buray Silmeyi Unutma !
throw ex;
}
finally
{
con.Close();
}

return sube;
}
}
}

Liste 2.10: rnek Sube class.

HizliTur.Facade projesi ierisindeki dier classlar da Liste 2.10daki class rnek alarak yaplan-
drn. Veritaban tasarm bal altnda oluturulan standart ilemleri yapan stored procedureleri
altran standart classlar ve metodlar hazrlandktan sonra, daha sonradan kullanlacak metod-
lar yeri geldike classlara eklenecektir.
122 Proje 2

Arayz Tasarm
HizliTur.WinUI projenize gein. References mens zerinde sa tklayn.
Add References mensne tklayn.Projects sekmesinden HizliTur.Entity ve HizliTur.Facade
projelerini sein. OK tuuna basn. Form1 isimli formu FrmMain olarak yeniden adlandrn.
HizliTur.WinUI projesi ierisindeki Form1 ierisine static Entiy.Calisan tipinde global bir dei-
ken oluturun. Bu deiken oturum aan kullancnn bilgisini tutacak.

public static Entity.Calisan calisan = null;

HizliTur.WinUI projenize yeni bir Windows Form ekleyin. smini FrmGiris olarak belirleyin.
Formun Text zelliini Kullanc Girii olarak deitirin ve ekil 2.22deki tasarm yapn.

ekil 2.22: Kullanc giri ekran.

FrmGiris formu zerindeki kontroller ve zellikleri Tablo 2.2de verilmitir.

Tablo 2.2: Kullanc Giri Ekran Kontrolleri


Kontrol zellik zellik Deeri
TextBox Name txtKullaniciAdi
TextBox Name txtSifre
UseSystemPasswordChar True
Label Name lblKullaniciAdi
Text Kullanc Ad:
Label Name lblSifre
Text ifre:
Button Name btnGiris
Text Giri

Kullanclarn giri yapmasn salayan ara yz yaptktan sonra veritaban zerinde kullanc
kontrol yapan CalisanGiris stored proceduren oluturun.

CREATE PROC CalisanGiris


(
@KullaniciAdi nvarchar(15),
@Sifre nvarchar(20)
)
AS
SELECT PersonelId ,YoneticiMi,SubeId,CalisanTipId FROM calisanlar
WHERE KullaniciAdi = @KullaniciAdi And Sifre=@Sifre

Liste 2.11: CalisanGiris stored procedure.


Otobs Otomasyonu 123

Liste 2.11de tanmlanan stored procedure altran Login() metodunu HizliTur.Facade projesi
ierisindeki Calisan classna ekleyin.

public static Entity.Calisan Login(Entity.Calisan calisan)


{

SqlConnection con = new SqlConnection(Util.


ConnectionString);

SqlCommand cmd = new SqlCommand(CalisanGiris, con);


cmd.CommandType = System.Data.CommandType.
StoredProcedure;

cmd.Parameters.AddWithValue(@KullaniciAdi, calisan.
KullaniciAdi);
cmd.Parameters.AddWithValue(@Sifre, calisan.Sifre);
Entity.Calisan donecekCalisan = null;
try
{
con.Open();
SqlDataReader rdr = cmd.ExecuteReader();
if (rdr.Read())
{
donecekCalisan = new HizliTur.Entity.
Calisan();
donecekCalisan.PersonelId = Convert.ToInt32(r
dr[PersonelId]);
donecekCalisan.YoneticiMi = Convert.ToBoolean
(rdr[YoneticiMi]);
donecekCalisan.SubeId = Convert.
ToInt32(rdr[SubeId]);
donecekCalisan.CalisanTipId = Convert.ToInt32
(rdr[CalisanTipId]);
}
}
catch (SqlException ex)
{
Hataci.YeniHataKaydi(ex);
#warning Silmeyi unutma !
throw;
}

finally
{
con.Close();
}
124 Proje 2

return donecekCalisan;
}

Liste 2.12: Calisan class Login metodu.

HizliTur.WinUI projesi ierisindeki FrmGiris formuna geri dnn. btnGiris button kontrolnn
Click olayn hazrlayn HizliTur.Facade.Calisan.Login() metodunu altrn.alan-
larn giri k bilgilerinin de tu-
PersonelGirisCikis tablosunda IslemZamani stununda default deer tanmlan- tulmas istendii iin giri yapan
d iin yazlan stored procedure (PersonelGirisCikisEkle) ve gerekli metod ie-
risinden (Facade.PersonelGirisCikisEkle) IslemZamani parametrelerini kaldrn. kullancnn kaydn gerekli tab-
loya ekleyin.(Liste 2.13)

private void btnGiris_Click(object sender, EventArgs e)


{

Entity.Calisan kullanici = new HizliTur.
Entity.Calisan();
kullanici.KullaniciAdi = txtKullaniciAdi.Text;
kullanici.Sifre = txtSifre.Text;

HizliTur.Entity.Calisan calisanBilgi = HizliTur.


Facade.Calisan.Login(kullanici);

if (calisanBilgi != null)
{
// Personelin oturum acma bilgisini kaydet
Entity.PersonelGirisCikis girisBilgileri = new
HizliTur.Entity.PersonelGirisCikis();
girisBilgileri.PersonelId = calisanBilgi.
PersonelId;
girisBilgileri.IslemTipi = true;
Facade.PersonelGirisCikis.PersonelGirisCikisEkle(
girisBilgileri);

// Oturum acan personeli belirle


FrmMain.calisan = calisanBilgi;
this.DialogResult = DialogResult.OK;
}
else
MessageBox.Show(Kullanc ad veya ifre hatal,
Hata, MessageBoxButtons.OK, MessageBoxIcon.Error);

Liste 2.13: Kullanc giri ilemini yapan btnGiris button kontrol kodu.

FrmMain isimli forma gein. Tablo 2.3de belirtilen zellikleri ayarlayn.


Otobs Otomasyonu 125

Tablo 2.3: FrmMain Formu zellikleri


zellik zellik Deeri
Text Hzl Tur Otobs Otomasyonu
IsMdiContainer True
StartPosition CenterScreen
WindowState Maximized

FrmMain isimli forma gein. FrmMain _Load olaynda FrmGiris formunu ShowDialog() metodu
ile an. Bylece kullanc girii yaplmaz ise uygulama almayacaktr (Liste 2. 14).

private void FrmMain_Load(object sender, EventArgs e)


{
this.Hide();
FrmGiris frm = new FrmGiris();
if (frm.ShowDialog() == DialogResult.OK)
{
this.Show();
}
else
Application.Exit();
}

Liste 2.14: FrmMain Load olay.

Artk uygulamaya giriler sadece kullanc ad ve ifresi belirtilerek yaplabiliyor. Test etmek amal
veritabannda rnek bir kullanc tanmlayn. rnek bir alan tanmlamayabilmek iin nce veri-
taban zerindeki ilikilerden dolay srasyla Sehir, Sube ve CalisanTip tablolarna veri girin daha
sonra alanlar tanmlayn.

FrmMain formuna menu strip ekleyin.Name zelliini anaMenu olarak deitirin.Tablo 2.4de ve-
rildii gibi menleri ekleyin.

Tablo 2.4: FrmMain zerindeki Menler


Menu Eleman Text Name
lemler lemler islemlerMenusu
Bilet Sat biletSatis
Ynetimsel Aralar Ynetimsel Aralar yonetimselAraclar
Sefer lemleri seferIslemleri
ube lemleri subeIslemleri
Personel lemleri personelIslemleri
Otobs lemleri otobusIslemleri
Mteri lemleri musteriIslemleri
Raporlar Raporlar raporIslemleri
Tarih Bazl tarihBazli
Sefer Bazl seferBazli

Program kullanan personelin en fazla yapaca ilem bilet sat olaca iin Bilet Sat men-
sne ksayol tuu olarak F2 tuunu sein. (Bilet Sati mensne sa tklayarak zellikler pence-
resine gein ve ShortCutKeys zelliini F2 olarak deitirin.) Menlerin eklendikten sonraki form
grnts ekil 2.23de grlmektedir.
126 Proje 2

ekil 2.23: FrmMain ekran grnts.

Alan uygulama yetki bazl yaplmakta, yani oturum aan kullancnn yetkisine gre ynetimsel
aralar mens ierisinde baz men elemanlar gsterilmeyecektir. Yetkiye gre men gizlemesi
iin FrmMain ierisine YetkiyeGoreMenuGoster() metodu oluturun ve FrmMain_Load ola-
ynda bu metodu arn. FrmMain son hali Liste 2.15de verilmitir.

public static Entity.Calisan calisan = null;

void YetkiyeGoreMenuGoster()
{
if (!calisan.YoneticiMi)
{
seferIslemleri.Visible = false;
subeIslemleri.Visible = false;
personelIslemleri.Visible = false;
otobusIslemleri.Visible = false;
raporIslemleri.Visible = false;
}
}
private void FrmMain_Load(object sender, EventArgs e)
{
this.Hide();
FrmGiris frm = new FrmGiris();
if (frm.ShowDialog() == DialogResult.OK)
{
this.Show();
YetkiyeGoreMenuGoster();
}
else
Application.Exit();
}

Liste 2.15: FrmMain_Load olay ve YetkiyeGoreMenuGoster metodu.


Otobs Otomasyonu 127

Uygulamada oturum aan ve kapatan kullancnn bilgileri tutulmak istendii iin, uygulamadan
k yaplrken hangi kullancnn k yaptn veritabanna kaydettirin. Bu ilem FrmMain_Clo-
sing olay ierisinde yaplacaktr. Burada calisan deikeninin null olup olmad kontrol edilmitir.
Eer kontrol edilmemi olursa giri ekrannda direk olarak X tuuna baslmas, yani formun ka-
patlmas sonucu yine bu olay alacak ve calisan deikeninin deeri null olduu iin uygulama
hata verecektir. Hata ile karlamamak iin calisan deikeninin deerini kontrol edin.

private void FrmMain_FormClosing(object sender,


FormClosingEventArgs e)
{
if (FrmMain.calisan != null)
{
Entity.PersonelGirisCikis cikisBilgileri = new
HizliTur.Entity.PersonelGirisCikis();
cikisBilgileri.PersonelId = FrmMain.calisan.
PersonelId;
cikisBilgileri.IslemTipi = false;
Facade.PersonelGirisCikis.PersonelGirisCikisEkle(
cikisBilgileri);

}
}

Liste 2.16: FrmMain formu FormClosing olay.

Yaplan proje ierisinde kullanlacak olan form says fazladr. Fazla form barndracak uygulama-
lar ile alrken allacak olan formlar klasrler ierisinde kategoriletirmek uygulama yazmay
kolaylatracaktr. Solution Explorer pencersinde HizliTur.WinUI projesi zerinde sa tklayn Add
> New Folder mensne tklayn. Bu ekilde uygulama ierisine Musteri, Otobus, Personel, Ra-
porlar, Sefer ve Sube klasrleri ekleyin. Uygulamann son hali ekil 2.24de belirtilmitir.

ekil 2.24: HizliTur.WinUI projesi klasr yaps. ekil 2.25: rnek ube ynetim formu.

WinUI projesi ierisinde de artk kullanlacak olan formlar kategorilendirilmitir. Bu kategoriler


altnda gerekli formlar oluturulacak ve klasr isimlerinin getii ekilde yaplandrma ilemleri
yaplacaktr. rnein ube tanmlama ve dzenleme gibi ube ile ilgili tm ilemrleri yapacak
formlar Sube klasrnn ierisine eklenecek.
Uygulama ierisindeki Sube klasrne bir adet Windows Form Bir klasr ierisine eklenen for-
mun namespace bilgisi KlasorAdi.
ekleyin.smini FrmSubeIslemleri verin. ekil 2.25de gsterildii
FormAdi eklinde olacaktr.
tasarm yapn.
128 Proje 2

Form zerindeki kontroller ve zellikleri Tablo 2.5de gsterilmitir.

Tablo 2.5: FrmSubeIslemleri Form Kontrol Listesi


Kontrol zellik Deer
GroupBox Name grpSube
Label Text Mevcut ubeler
Combobox Name cmbSubeListesi
Button Text Yeni
Name btnYeniSube
Label Text ube Ad :
Label Text ehir :
TextBox Name txtSubeAdi
ComboBox Name cmbSehirListesi
Button Text Gncelle
Name btnGuncelle
Button Text ube Sil
Name btnSil

Bir ube tanmlamas yapabilmek iin ehirlere ihtiya duyulur. Veritaban ilikileri yznden form
zerinde mevcut ehirler de listelenmektedir. Form ilk yklendiinde form zerindeki ubeleri ve
ehirleri listeleyecek olan combobox kontrollerini doldurun (Liste 2. 17).

private void FrmSubeIslemleri_Load(object sender, EventArgs e)


{
cmbSehirListesi.DisplayMember = SehirAdi;
cmbSehirListesi.ValueMember = SehirId;
cmbSehirListesi.DataSource = Facade.Sehir.
SehirListesi();

cmbSubeListesi.DisplayMember = SubeAdi;
cmbSubeListesi.ValueMember = SubeId;
cmbSubeListesi.DataSource = Facade.Sube.SubeListesi();

}

Liste 2.17: ube ilemlerini yapmay salayan FrmSubeIslemleri form load.

zerinde ilem yapabilmek iin global Entity.Sube tipinden bir deiken oluturun.

Entity.Sube sube;

Seilen bir ubenin detayn getiren metodu cmbSubeListesi combobox kontrolnn SelectedIn-
dexChanged olaynda arn.

private void cmbSubeListesi_SelectedIndexChanged(object sender,


EventArgs e)
{
Entity.Sube sube = Facade.Sube.DetayGoruntule(Convert.
ToInt32(cmbSubeListesi.SelectedValue));
if (sube != null)
Otobs Otomasyonu 129

{
txtSubeAdi.Text = sube.SubeAdi;
cmbSehirListesi.SelectedValue = sube.SehirId;
}
}

Liste 2.18: ube seme ilemi.

ube bilgisi gncellemeyi salayacak btnGuncelle kontrolnn Click olayn yazn.

private void btnGuncelle_Click(object sender, EventArgs e)


{
sube.SubeAdi = txtSubeAdi.Text;
sube.SehirId = Convert.ToInt32(cmbSehirListesi.
SelectedValue);
sube.SubeId = Convert.ToInt32(cmbSubeListesi.
SelectedValue);
if (Facade.Sube.Guncelle(sube) > 0)
{
FrmSubeIslemleri_Load(null, null);
}
else
{
MessageBox.Show(Hata Olutu);
}
}

Liste 2.19: ube gncelleme ilemi.

ube silmeyi salayan kodu btnSil kontrolnn Click olayna yazn. Eer bu ubeye bal perso-
nel veya baka kaytlar mevcut ise ube silinemeyecektir. Silme esnasnda hata oluursa ekran-
da hata mesaj grnecektir.

private void btnSil_Click(object sender, EventArgs e)


{
if (Facade.Sube.Sil(sube) > 0)
{
MessageBox.Show(ube Silindi);
FrmSubeIslemleri_Load(null, null);
}
else
MessageBox.Show(ube Silinemedi.\rBu ubeye
bal personel olabilir.);

Liste 2.20: ube silme ilemi.


130 Proje 2

Yeni ube ekleyebilmek iin WinUI projesi ierisindeki Sube klasrne FrmYeniSube isminde bir
Windows Form ekleyin.

ekil 2.26: Yeni ube ekleme formu.

ekil 40de belirtilen tasarm iin Tablo 2.6daki kontrolleri ekleyin.

Tablo 2.6: Yeni ube Ekleme Formu zerindeki Kontroller


Kontrol zellik Deer
Label Text ube Ad
Label Text ehir
TextBox Name txtSubeAdi
Combobox Name cmbSehirListesi
Button Name btnEkle
Text Ekle
Button Name btnIptal
Text ptal

Bir ube ekleyebilmek iin ehirlere ihtiya duyulduundan dolay form ilk yklendiinde ehir
listesini combobox kontrolne doldurun.

private void FrmYeniSube_Load(object sender, EventArgs e)


{
cmbSehirListesi.DisplayMember = SehirAdi;
cmbSehirListesi.ValueMember = SehirId;
cmbSehirListesi.DataSource = Facade.Sehir.
SehirListesi();
}

Liste 2.21: FrmYeniSube_Load olay.

btnIptal butonuna tklanld zaman formu kapatacak Close() metodunu arn.

private void btnIptal_Click(object sender, EventArgs e)


{
this.Close();
}

btnEkle butonuna tklanld zaman yeni bir ube ekleme metodunu arn.

private void btnEkle_Click(object sender, EventArgs e)


{
Entity.Sube sube = new HizliTur.Entity.Sube();
Otobs Otomasyonu 131

sube.SubeAdi = txtSubeAdi.Text;
sube.SehirId = Convert.ToInt32(cmbSehirListesi.
SelectedValue);
if ( Facade.Sube.Ekle(sube ) > 0)
{
MessageBox.Show(Yeni ube Eklendi...);
}
else
{
MessageBox.Show(Hata Olutu);
}

txtSubeAdi.Clear();
}

Liste 2.22: Yeni ube kaydetme ilemi.

FrmSubeIslemleri formuna geri dnn. btnYeniSube button kontrolnn Click olayn hazrlayn.

private void btnYeniSube_Click(object sender, EventArgs e)


{
FrmYeniSube frm = new FrmYeniSube();
frm.Show();
}

rnek olarak ube ynetiminin yapld blm yaplmtr. Otobs, Sefer, Personel ve Mteri
ynetiminin yaplabilecei formlar gerekli klasrler ierisinde oluturun ve yaplandrn.Yapaca-
nz bu formlar sayesinde tanmlama, dzeltme veya silme ilemlerini yapn.

FrmMain formundaki SubeIslemleri mensne tklanld zaman FrmSubeIslemleri formunu a-


trn.

private void subeIslemleri_Click(object sender, EventArgs e)


{
Sube.FrmSubeIslemleri frm = new Sube.
FrmSubeIslemleri();
frm.MdiParent = this;
frm.Show();
}

HizliTur.WinUI projesine FrmBiletSatis isminde Windows Form ekleyin. FrmMain zerindeki bilet-
Satis menusunun Click olayna Liste 2.23deki kodu yazn.

private void biletSatis_Click(object sender, EventArgs e)


{
FrmBiletSatis frm = new FrmBiletSatis();
frm.MdiParent = this;
frm.Show();
}

Liste 2.23: Bilet Sat Formu ama ekran.


132 Proje 2

HizliTur.WinUI projesi ierisindeki FrmBiletSatis formu tasarm ekran ekil 2.27de verilmitir.

ekil 2.27: Bilet Sat ekran.

HizliTur.WinUI projesi ierisindeki FrmBiletSatis formuna SplitContainer ekleyin ve ekil 2.27deki


gibi 2ye ayrn. Oluan panel1 paneline Tablo 2.7deki ekilde kontrolleri ekleyin ve yaplandrn.

Tablo 2.7: Panel 1 erisindeki Kontrol Listesi ve zellikleri


Kontrol zellik Deer
GroupBox Name solGrup
Dock Fill
Text Sefer Ara
Label Text Kalk :
Label Text Var :
Label Text Tarih :
Combobox Name cmbKalkis
DropDownStyle DropDownList
Combobox Name cmbVaris
DropDownStyle DropDownList
DateTimePicker Name dtZaman
Button Name btnAra
Text Seferleri Gster
Label Text Mevcut Seferler
DataGridView Name dgSonuc
AllowUserToAddRows False
AllowUsertoDeleteRows False
ReadOnly True

Panel1 ierisindeki dgSonuc gridview kontrolne Tablo 2.8deki stunlar ekleyin.


Otobs Otomasyonu 133

Tablo 2.8: dgSonuc Gridview Kontrol Stun Listesi


Stun zellik Deer
ClSaat DataPropertyName Saat
HeaderText Saat
ClPlaka DataProperyName Plaka
Header Text Otobs Plaka
ClBiletTutari DataPropertyName BiletTutari
HeaderText cret
ClSeferId DataPropertyName SeferId
ClKoltukSayisi DataPropertyName KoltukSayisi

Oluan Panel 2ye Tablo 2.9daki kontrolleri ekleyin ve yaplandrn.

Tablo 2.9: Panel 2 erisindeki Kontroller ve zellikleri


Kontrol zellik Deer
GroupBox Name seferGrup
Dock Top
Text Sefer Bilgileri
Height 90
Label Name lblSeferBilgi
Text
ForeColor Red
Label Name lblPlaka
ForeColor Red
Text
GroupBox Name grpOturmaPlani
Text Oturma Plan
Dock Left
Width 268
Label Text Mteri Bilgi
Fore Color Red
CheckBox Name chcMevcutMusteri
Text Mevcut Mteri
Label Text Kart No
TextBox Name txtKartNo
ReadOnly True
Label Text Ad
CheckBox Name chcAyniBilgileriKullan
Text Ayn Bilgileri Kullan
TextBox Name txtAd
Label Text Soyad
TextBox Name txtSoyad
Label Text Cinsiyet
ComboBox Name cmbCinsiyet
Label Text Kredi
TextBox Name txtMevcutPara
ReadOnly True
Label Text lem Tipi
ComboBox Name cmbIslemTipi
134 Proje 2

Tablo 2.9: Panel 2 erisindeki Kontroller ve zellikleri (devam)


Kontrol zellik Deer
Label Text Sat Tipi
ComboBox Name cmbSatisTipi
Label Text Koltuk
TextBox Name txtKoltukNo
Button Name btnOnayla
Text Onayla
Button Name btnIptal
Text ptal

HizliTur.WinUI projesi ierisindeki FrmBiletSatis formuna Tablo 2.10daki bileenleri ekleyin ve


yaplandrn.

Tablo 2.10: FrmBiletSatis Formu Bileenleri ve zellikleri


Bileen zellik Deer
Timer Name tmrKoltukBilgiGuncelleyici
Interval 1000
Enabled False
BackgroundWorker Name bcKoltukBilgiGuncelle
ContextMenuStrip Name biletSolMenu

biletSolMenu contextmenustrip kontrolne Tablo 2.11deki menu elemanlarn ekleyin.

Tablo 2.11: biletSolMenu ContextMenuStrip Kontrol Men Listesi


Menu Name
Sat ptal satisIptalContext
Sat Yap satisContext
Rezervasyon ptal rezervasyonContext
Seperator (-)
Vazge vazgecContext

FrmBiletSatis formu zerindeki cmbCinsiyet combobox kontrolne Bay, Bayan olmak zere sray-
la iki eleman ekleyin. (Kontrol zerinde sa tklayn ve Edit Items mensne tklayn)

Ksayol tuu ola- cmbIslemTipi combobox kontrolne srayla Sat, Rezervasyon elemanlarn
rak F7 tuunu ekleyin. Formunun kod tarafna gein ve gerekli deikenleri oluturun. Bu
kullanabilirsiniz.
deikenlere her metod ierisinden ulalabilinmesi iin deikenleri global
olarak tanmlayn.

// hangi sefer uzerinde islem yapldnn bilgisini tutar


int seferId = 0;

// seilen seferin bilet cretini tutar


decimal ucret = 0;

// ilem yaplan mteri bilgisini tutar


Entity.Musteri musteri;
Otobs Otomasyonu 135

// hangi koltuk zerinde ilem yapldnn bilgisini tutar.


ContextMenu kullanrken gerekli olacak.
int uzerindeIslemYapilanKoltuk = 0;

HizliTur.WinUI projesi ierisindeki FrmBiletSatis formunun load olayna Liste 2.24deki kodu yazn.
cmbKalkis combobox kontrol hangi ehirden yolcunun bineceini, cmbVaris combobox kontrol
hangi ehre gidileceini semeyi salayacak. Bu yzden her iki kontrole de ehir listesi doldurul-
mutur. Bulunan seferleri gsterecek
Bir datagridview kontrolne balanan kaynaktaki tm stunlar veya
datagridview kontrolnde gsterilmesi propertyleri datagridviewkontrolnde gstermek istemiyorsanz, da-
istenmeyen stunlar gizlenmitir. tagridview kontrolnn AutoGenerateColumns zelliini False yapn.

private void
FrmBiletSatis_Load(object sender, EventArgs e)
{
cmbKalkis.DisplayMember = SehirAdi;
cmbKalkis.ValueMember = SehirId;
cmbKalkis.DataSource = Facade.Sehir.SehirListesi();

cmbVaris.DisplayMember = SehirAdi;
cmbVaris.ValueMember = SehirId;
cmbVaris.DataSource = Facade.Sehir.SehirListesi();

dgSonuc.Columns[ClSeferId].Visible = false;
dgSonuc.Columns[ClKoltukSayisi].Visible = false;

cmbIslemTipi.SelectedIndex = 0;
cmbSatisTipi.SelectedIndex = 0;
}

Liste 2.24 Bilet Sat Formu FormLoad olay.

Veritaban zerinde sefer aramay salayan MevcutSeferler stored proceduren oluturun.

CREATE PROCEDURE MevcutSeferler


(
@KalkisSehirId int,
@VarisSehirId int,
@Tarih datetime
)
AS
SELECT Convert(nvarchar,DatePart(hh,KalkisZamani)) + : + Conve
rt(nvarchar,DatePart(mi,KalkisZamani)) as Saat,Otobusler.Plaka ,
Seferler.BiletTutari, Seferler.SeferId ,KoltukSayisi FROM
Seferler Inner Join Otobusler On Seferler.OtobusId = Otobusler.
OtobusId WHERE Seferler.KalkisSehirId = @KalkisSehirId AND
Seferler.VarisSehirId = @VarisSehirId AND (DatePart(d,KalkisZaman
i)= DatePart(d,@Tarih) AND DatePart(m,KalkisZamani)= DatePart(m,@
Tarih)) Order By KalkisZamani

Liste 2.25: MevcutSeferler stored procedure.


136 Proje 2

Oluturulan MevcutSeferler stored proceduren altran metodu HizliTur.Facade projesi ieri-


sindeki Sefer classna ekleyin (Liste 2. 26).

public static DataTable SeferListesi(int kalkisSehirId, int


varisSehirId,DateTime kalkisZamani)
{
SqlConnection con = new SqlConnection(Util.
ConnectionString);
SqlCommand cmd = new SqlCommand(MevcutSeferler,con)
;
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue(@KalkisSehirId,
kalkisSehirId);
cmd.Parameters.AddWithValue(@VarisSehirId,
varisSehirId);
cmd.Parameters.AddWithValue(@Tarih, kalkisZamani);
SqlDataAdapter da = new SqlDataAdapter(cmd);
DataTable dt = new DataTable();
da.Fill(dt);

return dt;
}

Liste 2.26: DataTable dndren SeferListesi metodu.

HizliTur.WinUI projesi ierisindeki FrmBiletSatis formunun da ierisindeki btnAra butonunun Click


olayna Liste 2.27de belirtilen kodu yazn. Seilen ehirler ve o tarihteki mevcut seferler listelen-
mektedir.

private void bntAra_Click(object sender, EventArgs e)


{
dgSonuc.DataSource = null;

DataTable dt = Facade.Sefer.SeferListesi(Convert.
ToInt32(cmbKalkis.SelectedValue), Convert.ToInt32(cmbVaris.
SelectedValue), dtZaman.Value);
if (dt.Rows.Count == 0)
{
MessageBox.Show(Seilen bilgilere ait sefer
bulunamad);
}
else
{
dgSonuc.DataSource = dt;
}
}
Liste 2.27: Arama button Click olay.
Otobs Otomasyonu 137

Listelenen seferlerden herhangi birine tklanld zaman sefer detayn ve koltuk durumlarn lis-
teleyen SefereGoreKoltukNumaralari stored proceduren veritaban zerinde oluturun.

CREATE PROCEDURE SefereGoreKoltukNumaralari


(
@SeferId int
)
AS
Select SeferId,KoltukNo,YolcuCinsiyet,SatisMiRezervasyonMu From
Biletler Where SeferId = @SeferId

Liste 2.28: SefereGoreKoltukNumaralari stored procedure.

Oluturulan stored procedure altran metodu HizliTur.Facade projesi ierisindeki Sefer


classna ekleyin.

public static DataTable SefereGoreKoltukNumaralari(int seferId)


{
SqlConnection con = new SqlConnection(Util.
ConnectionString);
SqlCommand cmd = new SqlCommand(SefereGoreKoltukNuma
ralari, con);
cmd.CommandType = CommandType.StoredProcedure;

cmd.Parameters.AddWithValue(@SeferId, seferId);

SqlDataAdapter da = new SqlDataAdapter(cmd);

DataTable dt = new DataTable();


da.Fill(dt);

return dt;

Liste 2.29: DataTable dndren SefereGoreKoltukNumaralari metodu.

bcKoltukBilgiGuncelle backdgroundworker bileeninin DoWork olayn Liste 2.30daki gsterildii


gibi hazrlayn. Timer sayesinde altrlan backgroundworker bileeni her saniye seilen sefere
ait gncel koltuk bilgisini ekip rezervasyon ve satlar bay ve bayan durumuna gre renklendir-
mektedir.

private void bcKoltukBilgiGuncelle_DoWork(object sender,


DoWorkEventArgs e)
{

foreach (Control cl in grpOturmaPlani.Controls)
{
if (cl is Button)
138 Proje 2

{

cl.BackColor = Color.Empty;
cl.ForeColor = Color.Black;


foreach (DataRow dr in Facade.Sefer.SefereGor
eKoltukNumaralari(seferId).Rows)
{
if (cl.Text == dr[KoltukNo].ToString())
{

if (Convert.ToBoolean(dr[SatisMiReze
rvasyonMu]))
{
cl.ForeColor = Color.Black;
}
else
{
//Eer false ise sat demektir.
cl.ForeColor = Color.White;
}
// Yolcu cinsiyet False Bay iin
kullanld.
if (Convert.ToBoolean(dr[YolcuCinsiy
et]) == true)
{
cl.BackColor = Color.DarkRed;
}
else
{
cl.BackColor = Color.Blue;
}
}
}
}

}

Liste 2.30: bcKoltukBilgiGuncelle backgroundworker bileenin DoWork olay.

tmrKoltukBilgiGuncelleyici timer kontrolnn Tick olayn Liste 2.31de gsterildii ekilde yazn
ve form zerindeki backgroundworker bileenini asenkron olarak altrn.
Otobs Otomasyonu 139

private void tmrKoltukBilgiGuncelleyici_Tick(object sender,


EventArgs e)
{
bcKoltukBilgiGuncelle.RunWorkerAsync();
}

Liste 2.31: Timer Tick olay.

dgSonuc datagridview kontrolnn CellDoubleClick olayna Liste 2.32deki kodu yazn. Listelenen
seferlerden herhangi birine tklanld zaman o sefere ait bilgiler ve otobs plan ekrana izilecek.
Burada izdirilmekten kast grpOturmaPlani groupbox kontrolne runtime (alma zaman) esna-
snda button kontrolleri eklemektir.

private void dgSonuc_CellDoubleClick(object sender,


DataGridViewCellEventArgs e)
{
grpOturmaPlani.Controls.Clear();

lblPlaka.Text = dgSonuc.Rows[e.RowIndex].
Cells[ClPlaka].Value.ToString();
lblSeferBilgi.Text = cmbKalkis.Text + - +
cmbVaris.Text;

int koltukSayisi = Convert.ToInt32(dgSonuc.Rows[e.
RowIndex].Cells[ClKoltukSayisi].Value.ToString());
ucret = Convert.ToDecimal(dgSonuc.Rows[e.RowIndex].
Cells[ClBiletTutari].Value.ToString());
seferId = Convert.ToInt32(dgSonuc.Rows[e.RowIndex].
Cells[ClSeferId].Value.ToString());

int soldan = 15, yukaridan = 15;


for (int i = 0; i < koltukSayisi; i++)
{
Button koltuk = new Button();
koltuk.Text = (i + 1).ToString();
koltuk.Height = 30;
koltuk.Width = 30;
koltuk.FlatStyle = FlatStyle.Flat;
koltuk.Cursor = Cursors.Hand;
koltuk.Click += new EventHandler(koltuk_Click);

if (i % 4 == 0)
{
soldan = 25;
yukaridan += 30;
}
else if (i % 2 == 0)
140 Proje 2

{
soldan += 25;
}
koltuk.Top = yukaridan;

koltuk.Left = soldan;
koltuk.ContextMenuStrip = this.biletSolMenu;
grpOturmaPlani.Controls.Add(koltuk);
soldan += 35;
}

tmrKoltukBilgiGuncelleyici.Start();
}

Liste 2.32: dgSonuc datagridview kontrol CellDoubleClick olay.

Liste 2.33deki Koltuk_Click handlerini ekleyin. Runtime esnasnda eklenen koltuklara tklanld
zaman ne ilem yaplacan belirleyin. Eer daha nceden rezerve edilmi bir koltuk ise veya
satlm bir koltuk ise duruma gre ContextMenuStrip menulerini gizleyin veya an.

void koltuk_Click(object sender, EventArgs e)


{

// tklanan butonu yakala


Button tiklananKoltuk = (Button)sender;
// hangi koltuk uzerinde islem yapldgnn bilgisini
yaz.
int.TryParse(tiklananKoltuk.Text, out
uzerindeIslemYapilanKoltuk);


if (tiklananKoltuk.ForeColor == Color.White)
{
// daha nceden satlm bir koltuk
rezervasyonContext.Visible = false;
satisContext.Visible = false;
satisIptalContext.Visible = true;
tiklananKoltuk.ContextMenuStrip.
Show(tiklananKoltuk, 10, 10);

}
else if ((tiklananKoltuk.BackColor == Color.Blue ||
tiklananKoltuk.BackColor == Color.DarkRed) && tiklananKoltuk.
ForeColor == Color.Black)
{
// daha nceden rezerve edilmi bir koltuk
rezervasyonContext.Visible = true;
Otobs Otomasyonu 141

satisContext.Visible = true;
satisIptalContext.Visible = false;
tiklananKoltuk.ContextMenuStrip.
Show(tiklananKoltuk, 10, 10);
}
else
{
txtKoltukNo.Text = tiklananKoltuk.Text;
}

Liste 2.33: Koltuk_Click olay.

imdiye kadar mevcut bir seferin koltuklar ekrana getirildi ve bilgileri program kullanan kullan-
cya gsterildi. Bu aamadan sonra sat ilemi yaplacak. Mevcut bir mteriye sat yaplyorsa
gerekli kontroller aktif hale gelecek. chcMevcutMusteri checkbox kontrolnn CheckedChanged
olayn Liste 2.34deki gibi hazrlayn. Bu checkbox seildiinde mteriye sat ilemi balar.
Eer seilmezse sat mteriye yaplmaz, yaplan sattan hediye puan aktarm yaplmaz.

private void chcMevcutMusteri_CheckedChanged(object sender,


EventArgs e)
{
txtKartNo.ReadOnly = !chcMevcutMusteri.Checked;
txtKartNo.Focus();

}

Liste 2.34: chcMevcutMusteri CheckedChanged olay.

Bir mteriye sat yaplrken kart numarasna gre sat yaplacak. Kart numarasna gre m-
teri bilgileri dndren stored procedure veritaban zerinde oluturun.

CREATE PROCEDURE KartNoyaGoreMusteriBilgi


(
@KartNumarasi nvarchar(16)
)
AS
Select MusteriId,Ad,Soyad,Cinsiyet From Musteriler Where
KartNumarasi = @KartNumarasi

Liste 2.35: KartNoyaGoreMusteriBilgi stored procedure.

KartNoyaGoreMusteriBilgi stored proceduren altran metodu HizliTur.Facade projesi ieri-


sindeki Musteri classna ekleyin (Liste 2.36).

public static Entity.Musteri KartNumarasinaGoreMusteriBilgi(strin


g kartNo)
{

142 Proje 2

SqlConnection con = new SqlConnection(Util.


ConnectionString);
SqlCommand cmd = new SqlCommand(KartNoyaGoreMusteriB
ilgi, con);
cmd.CommandType = System.Data.CommandType.
StoredProcedure;
cmd.Parameters.AddWithValue(@KartNumarasi, kartNo);

Entity.Musteri donecek = null;


try
{
con.Open();
SqlDataReader rdr = cmd.ExecuteReader();
if (rdr.Read())
{
donecek = new HizliTur.Entity.Musteri();
donecek.Ad = rdr[Ad].ToString();
donecek.Soyad = rdr[Soyad].ToString();
donecek.MusteriId = Convert.ToInt32(rdr[Must
eriId]);
donecek.Cinsiyet = Convert.ToBoolean(rdr[Cin
siyet]);
donecek.MevcutPara = Convert.ToDecimal(rdr[M
evcutPara]);
}
}
catch (SqlException ex)
{

Hataci.YeniHataKaydi(ex);
#warning Silmeyi unutma !
throw;

}
finally
{
con.Close();
}

return donecek;
}

Liste 2.36: KartNumarasinaGoreMusteriBilgi metodu.

txtKartNo textbox kontrolnn TextChanged olayn Liste 2.37deki gibi hazrlayn. Barkod oku-
yucudan kart numaras okutulduu an kart numarasna ait mteri bilgileri anlr ve kime sat
yaplaca bilgisi sorgulanr.
Otobs Otomasyonu 143

private void txtKartNo_TextChanged(object sender, EventArgs e)


{
musteri = Facade.Musteri.KartNumarasinaGoreMusteriBilgi(txtKartNo
.Text);
if (musteri != null)
{
if (chcAyniBilgileriKullan.Checked)
{
txtAd.Text = musteri.Ad;
txtSoyad.Text = musteri.Soyad;
cmbCinsiyet.SelectedIndex = Convert.
ToInt32(musteri.Cinsiyet);
txtMevcutPara.Text = musteri.MevcutPara.
ToString();
}
}
}

Liste 2.37: txtKartNo textbox kontrolnn TextChanged olay.

chcAyniBilgileriKullan checkboxnn CheckedChanged olayn Liste 2.38deki gibi hazrlayn. Bu


checkbox seilmesi sonucu kart numaras girilen mterinin ad ve soyad otomatik olarak kesi-
lecek bilete yazdrlr.

private void chcAyniBilgileriKullan_CheckedChanged(object sender,


EventArgs e)
{
if (chcAyniBilgileriKullan.Checked)
{
if (musteri != null)
{
txtAd.Text = musteri.Ad;
txtSoyad.Text = musteri.Soyad;
cmbCinsiyet.SelectedIndex = Convert.
ToInt32(musteri.Cinsiyet);
txtMevcutPara.Text = musteri.MevcutPara.
ToString();
}
}
else
{
txtAd.Clear();
txtSoyad.Clear();
txtMevcutPara.Clear();
}
}

Liste 2.38: chcAyniBilgileriKullan checkbox kontorln checkedChanged olay.


144 Proje 2

GirdiKontrol() isminde metod oluturun. Bu metod bilet sat esnasnda gerekli alanlarn
bo geilememesini salar.

bool GirdiKontrol()
{
if (string.IsNullOrEmpty(txtAd.Text) || string.
IsNullOrEmpty(txtSoyad.Text) || string.IsNullOrEmpty(txtKoltukNo.
Text) || cmbCinsiyet.SelectedIndex < 0)
return false;
else
return true;
}

Liste 2.39: GirdiKontrol metodu.

Bilet sat esnasnda satlan biletin mteriye satlmas sonucu mterinin hesabna para aktar-
may salayan trigger veritaban zerinde oluturun.

Create trigger MusteriKrediIslem On [Biletler]


For Insert
as
Declare @MusteriId int
Declare @SatisMiRezervasyonMu bit

Select @MusteriId = YolcuId , @SatisMiRezervasyonMu =


SatisMiRezervasyonMu From Inserted

-- yaplan ilem sats ise ve mteriye satlyorsa


if (@SatisMiRezervasyonMu = False and @MusteriId > 0)
begin

-- Guncel geri odeme oranini al


Declare @BiletGeriOdemeOrani float
Select @BiletGeriOdemeOrani = Convert(float,Deger) From Ayarlar
Where Anahtar = BiletGeriOdemeOrani

-- musteriye aktarilacak miktari hesapla


Declare @GeriyeAktarilacakTutar float
Select @GeriyeAktarilacakTutar = Ucret * @BiletGeriOdemeOrani
From Biletler Where SeferId = 2 and KoltukNo=2

-- musteriye aktarimi yap


Update Musteriler Set MevcutPara = MevcutPara + @
GeriyeAktarilacakTutar Where MusteriId = @MusteriId

End

Liste 2.40: MusteriKrediIslem trigger.


Otobs Otomasyonu 145

btnOnayla button kontrolnn Click olayn Liste 2.41deki gibi hazrlayn ve bilet satn tamam-
layn.

private void btnOnayla_Click(object sender, EventArgs e)


{
if (GirdiKontrol())
{
Entity.Bilet bilet = new HizliTur.Entity.Bilet();
bilet.KoltukNo = Convert.ToInt32(txtKoltukNo.
Text);
bilet.IslemZamani = DateTime.Now;
bilet.SeferId = seferId;
bilet.IslemiYapanPersonelId = FrmMain.calisan.
PersonelId;
bilet.SatisMiRezervasyonMu = Convert.
ToBoolean(cmbIslemTipi.SelectedIndex);
bilet.SatisTip = Convert.ToBoolean(cmbSatisTipi.
SelectedIndex);
bilet.YolcuCinsiyet = Convert.
ToBoolean(cmbCinsiyet.SelectedIndex);

bilet.YolcuAd = txtAd.Text;
bilet.YolcuSoyad = txtSoyad.Text;
if (musteri != null)
{
bilet.YolcuId = musteri.MusteriId;
}
if (cmbSatisTipi.SelectedIndex == 1)
{
if (musteri != null)
{
if (musteri.MevcutPara >= ucret)
{

bilet.Ucret = 0;
musteri.MevcutPara = musteri.
MevcutPara - ucret;

}
else
{
MessageBox.Show(Mterinin yeterli
kredisi yok);
return;
}
}
146 Proje 2

else
{
MessageBox.Show(Mteri bilgisi yok.
Kredili sat yapamazsnz);
return;
}
}
else
{
bilet.Ucret = ucret;
}

if (Facade.Bilet.BiletEkle(bilet) > 0)
{
MessageBox.Show(leminiz tamamland);
tmrKoltukBilgiGuncelleyici.Start();
}
}
else
{
MessageBox.Show(Eksik Bilgi);
}
}

Liste 2.41: btnOnayla button kontrolnn Click olay.

Bilet iptali olduu zaman kredili satta mterinin hesabna yatrlan hediye parann geri iade
edilmesini salayan triggeri veritaban zerinde oluturun.

Create Trigger BiletIptal On Biletler


For Delete
As
Declare @SatisTip bit
Declare @SatisMiRezervasyonMu bit
Select @SatisTip = SatisTip , @SatisMiRezervasyonMu =
SatisMiRezervasyonMu From Deleted
-- Sat tipi kredili ise
if (@SatisTip = True and @SatisMiRezervasyonMu = False)
begin
-- Mteri ve sefer bilgisi al
Declare @MusteriId int
Declare @SeferId int
Select @MusteriId = YolcuId, @SeferId = SeferId From Deleted

-- Seferin fiyat bilgisini al


Otobs Otomasyonu 147

Declare @BiletFiyat money


Select @BiletFiyat = BiletTutari From Seferler Where SeferId = @
SeferId

-- Mteriden paray geri ykle


Update Musteriler Set MevcutPara = MevcutPara + @BiletFiyat Where
MusteriId = @MusteriId

End

Liste 2.42: BiletIptal trigger.

Mevcut bir rezervasyonu sata evirmek iin veritaban zerinde Liste 2.43deki stored
procedureleri oluturun. Bu stored procedure sayesinde daha nceden rezerve edilmi bir bilet
sata evrilebilecek. Daha nceden satlan bir biletin iptalini yapan stored procedure de olu-
turun.

CREATE PROCEDURE RezervasyonuSatisaCevir


(
@SeferId int ,
@KoltukNo int
)
AS
Update Biletler Set SatisMiRezervasyonMu = 0 Where SeferId=@
SeferId And KoltukNo=@KoltukNo
Go
CREATE PROCEDURE SatisIptal
(
@SeferId int ,
@KoltukNo int
)
AS
Delete From Biletler Where SeferId= @SeferId And KoltukNo=@
KoltukNo

Liste 2.43: RezervasyonuSatisaCevir ve SatisIptal stored procedure.

Oluturulan stored procedure altran metodu ve sat iptalini yapan metodu HizliTur.Facade
projesi ierisindeki Bilet class ierisinde oluturun (Liste 2. 44).

public static int RezervasyonuSatisaCevir(Entity.Bilet bilet)


{

SqlConnection con = new SqlConnection(Util.


ConnectionString);
SqlCommand cmd = new SqlCommand(RezervasyonuSatisaCe
vir, con);
cmd.CommandType = System.Data.CommandType.
StoredProcedure;
148 Proje 2

cmd.Parameters.AddWithValue(@SeferId, bilet.
SeferId);
cmd.Parameters.AddWithValue(@KoltukNo, bilet.
KoltukNo);

return Util.Yurut(cmd);
}
public static int SatisIptal(Entity.Bilet bilet)
{
SqlConnection con = new SqlConnection(Util.
ConnectionString);
SqlCommand cmd = new SqlCommand(SatisIptal, con);
cmd.CommandType = System.Data.CommandType.
StoredProcedure;
cmd.Parameters.AddWithValue(@SeferId, bilet.
SeferId);
cmd.Parameters.AddWithValue(@KoltukNo, bilet.
KoltukNo);

return Util.Yurut(cmd);

}

Liste 2.44: RezervasyonuSatisaCevir metodu.

Satlm veya rezervasyon yaplm biletler zerinde ilem yapmak iin context menu kullanld.
Bu menlere tklanld zaman yaplacak ilemleri hazrlayn (Liste 2.45).

private void vazgecContext_Click(object sender, EventArgs e)


{
biletSolMenu.Hide();
}

private void satisIptalContext_Click(object sender,


EventArgs e)
{
DialogResult sonuc = MessageBox.Show(Bu sat iptal
etmekten emin misiniz ?, Sat ptal, MessageBoxButtons.YesNo,
MessageBoxIcon.Question);

if (sonuc == DialogResult.Yes)
{
// Sat iptali yap
Entity.Bilet bilet = new HizliTur.Entity.Bilet();
bilet.KoltukNo = uzerindeIslemYapilanKoltuk;
bilet.SeferId = seferId;
if (Facade.Bilet.SatisIptal(bilet) > 0)
Otobs Otomasyonu 149

MessageBox.Show(Bilet iptali yapld, Sat ptal,


MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}

private void rezervasyonContext_Click(object sender,


EventArgs e)
{
DialogResult sonuc = MessageBox.Show(Bu rezervasyonu
iptal etmekten emin misiniz ?, Rezervasyon ptal,
MessageBoxButtons.YesNo, MessageBoxIcon.Question);

if (sonuc == DialogResult.Yes)
{
// Sat iptali yap
Entity.Bilet bilet = new HizliTur.Entity.Bilet();
bilet.KoltukNo = uzerindeIslemYapilanKoltuk;
bilet.SeferId = seferId;
if (Facade.Bilet.SatisIptal(bilet) > 0)
MessageBox.Show(Bilet iptali yapld,
Rezervasyon ptal, MessageBoxButtons.OK, MessageBoxIcon.
Information);
}

}

private void satisContext_Click(object sender, EventArgs


e)
{
DialogResult sonuc = MessageBox.Show(Bu rezervasyonu
sata evirmek istediinizden emin misiniz ?, Bilet Sat,
MessageBoxButtons.YesNo, MessageBoxIcon.Question);

if (sonuc == DialogResult.Yes)
{
Entity.Bilet bilet = new HizliTur.Entity.Bilet();
bilet.KoltukNo = uzerindeIslemYapilanKoltuk;
bilet.SeferId = seferId;
if (Facade.Bilet.RezervasyonuSatisaCevir(bilet) >
0)
MessageBox.Show(Bilet sat yapld,
Bilet Sat, MessageBoxButtons.OK, MessageBoxIcon.Information);
}

}

Liste 2.45: Sat ve Rezervasyon ile ilgili ilemler.


150 Proje 2

imdiye kadar bilet sat, rezervasyon ve dier tanmlama ilemleri yapld. Bu aamaya kadar
uygulamada eksik kalan yer raporlar blmdr. Uygulamada 2 eit rapor isteniyor. Bunlardan
ilki belirlenen 2 tarih arasndaki seferleri, yolcu saylarn, kalk ve var saatlerini listeleyen ra-
por, dieri ise seilen iki ehir arasnda yaplan sefer bilgileridir. Raporlar klasr ierisine Frm-
TarihBazliRapor isminde bir Windows Form ekleyin. Eklenen bu formun ekil 2.28deki tasarmn
yapn.

ekil 2.28: Tarih Bazl raporlama ekran.

FrmTarihBazlRapor formuna eklenen kontroller ve zellikleri Tablo 2.12de belirtilmitir.

Tablo 2.12: FrmTarihBazliRapor Formu zerindeki Kontroller ve zellikleri


Kontrol zellik Deer
GroupBox Text Tarih Aral Belirleyin
Name grpKriter
Dock Top
Label Text Balang Tarihi
Label Text Biti Tarihi
DateTimePicker Name dtBaslangicZamani
DateTimePicker Name dtBitisZamani
Button Name btnRaporla
Text Raporla
DataGridView Name dgRaporSonuc
AllowUserToAddRows False
AllowUserToDeleteRows False
ReadOnly True
Button Text Rapor nizle
Name btnOnizle
Button Text Yazdr
Name btnYazdir
Button Text Excele Aktar
Name btnExcel
PrintPreviewDialog Name PrintPreviewDialog1
Otobs Otomasyonu 151

Tablo 2.12: FrmTarihBazliRapor Formu zerindeki Kontroller ve zellikleri (devam)


Kontrol zellik Deer
Document PrintDocument1
PrintDocument Name PrintDocument1
FolderBrowserDialog Name FolderBrowserDialog1

Form zerindeki drRaporSonuc ismini tayan datagridview kontrolne 6 adet stun ekleyin. S-
tun isimleri Tablo 2.13de verilmitir.

Tablo 2.13: drRaporSonuc Kontrol zerindeki Stunlar


Header Text DataPropertyName
Kalk ehri KalkisSehri
Var ehri VarisSehri
Kalk Zaman KalkisZamani
Var Zaman VarisZamani
Bilet Tutar BiletTutari
Yolcu Says SatisiYapilanBiletSayisi

FrmMain formu ierisindeki Tarih Bazl Rapor mensnn Click olayna formu atrmay sala-
yan kodu yazn.

private void tarihBazliRaporToolStripMenuItem_Click(object


sender, EventArgs e)
{
Raporlar.FrmTarihBazliRapor frm = new HizliTur.WinUI.
Raporlar.FrmTarihBazliRapor();
frm.MdiParent = this;
frm.Show();
}

DataGridView kontrolnde stunlar sonradan eklendii iin veri kaynandan gelen her stunun
veya propertynin grntlenmemesi iin formun Load olaynda stunlarn otomatik grntlen-
mesini kapatn.

private void FrmTarihBazliRapor_Load(object sender, EventArgs e)


{
dgRaporSonuc.AutoGenerateColumns = false;
}

Raporlama ilemi iin gerekli olan TarihBazliRapor stored proceduren veritaban zerinde
oluturun.

Create proc TarihBazliSeferRapor


(
@BaslangicTarihi datetime,
@BitisTarihi datetime
)
As
152 Proje 2

Select e.SehirAdi As KalkisSehri,


h.SehirAdi as VarisSehri ,
Case
when s.VarisZamani is NULL
Then Belirtilmedi
else
Convert(nvarchar,s.VarisZamani, 104)
end As VarisZamani,s.KalkisZamani,s.BiletTutari,
Count(b.SeferId) As SatisiYapilanBiletSayisi From Seferler s
Inner Join Calisanlar c on c.PersonelId = s.SoforId
Inner Join Calisanlar a on a.PersonelId = s.MuavinId
Inner Join Sehirler e on s.KalkisSehirId = e.SehirId
Inner Join Sehirler h on s.VarisSehirId = h.SehirId
Inner Join Biletler b on b.SeferId = s.SeferId
Where s.KalkisZamani Between @BaslangicTarihi And
@BitisTarihi Group By s.SeferId ,c.Ad, c.Soyad , h.SehirAdi ,
e.SehirAdi , s.VarisZamani, s.BiletTutari, s.KalkisZamani

Liste 2. 46: TarihBazliSeferRapor stored procedure.

Oluturulan stored procedure altracak TarihBazliSeferRapor metodunu HizliTur.Facade


projesi ierisindeki Sefer classnn ierisine ekleyin.

public static DataTable TarihBazliSeferRapor(DateTime


baslangicTarihi, DateTime bitisTarihi)
{
SqlConnection con = new SqlConnection(Util.
ConnectionString);
SqlCommand cmd = new SqlCommand(TarihBazliSeferRapor
, con);
cmd.CommandType = CommandType.StoredProcedure;

cmd.Parameters.AddWithValue(@BaslangicTarihi,baslan
gicTarihi);
cmd.Parameters.AddWithValue(@BitisTarihi,bitisTarih
i);

SqlDataAdapter da = new SqlDataAdapter(cmd);


DataTable dt = new DataTable();
da.Fill(dt);

return dt;

}

Liste 2.47: TarihBazliSeferRapor metodu.


Otobs Otomasyonu 153

Raporla button kontrolnn Click olaynda seilen tarih aralndaki bilgileri listeleyen metodu
arn.

private void btnRaporla_Click(object sender, EventArgs e)


{
dgRaporSonuc.DataSource = Facade.Sefer.TarihBazliSefe
rRapor(dtBaslangicZamani.Value, dtBitisZamani.Value);
}

btnOnIzle butonuna tklanld zaman nizleme yaplmasn salamak iin Print Preview Dialog
kontrolnn ShowDialog() metodunu arn.Yalnz bu arma ilemi esnasnda eer mevcut
datagridview kontrolnn herhangi bir data kayna yoksa uygulama hata verecektir. Bu hatay
engellemek iin ilk nce datagridview kontrolnn herhangi bir veri kayna olup olmadn kon-
trol edin.

private void btnOnizle_Click(object sender, EventArgs e)


{
if (dgRaporSonuc.DataSource != null)
printPreviewDialog1.ShowDialog();
}
btnYazdir button kontrolnn Click olaynda gerekli belgeyi yazcya gndermeyi salayan Print()
metodunu arn.

private void btnYazdir_Click(object sender, EventArgs e)


{
if (dgRaporSonuc.DataSource != null)
printDocument1.Print();
}

Uygulamadaki bir veri kaynan Microsoft Excel uygulamasna aktarmak iin farkl yollar mevcut-
tur. Bu yollardan biri Office Interop ismi verilen referans uygulamaya eklemektir fakat bu referans
Microsoft Office srmlerine gre farkllk gsterir. Dolaysyla uygulama eklenen referans ver-
siyonu ile uygulamann alt makinedeki Microsoft Office srm farkl ise hatalar oluabilir.
Microsoft Excel uygulamas OleDbProvider ile sorunsuz altndan dolay verileri sorgularken
veya aktarrken direk olarak OleDbProvider zerinden almak hatasz almay salayacaktr
fakat Office Interop referans sayesinde aktarlacak belgenin formatn yaplandrmak mmkn
olacaktr. Excele aktarmay salayacak olan button kontrolnn Click olayna OleDbProvider sa-
yesinde bir tablo oluturmay salayan ve bu tabloya kayt girmeyi salayan kodu yazn. Standart
Ado.Net sorgularndan farkl olmayan bu sorgularda tek farkl nokta Microsoft Exceldeki alma
sayfasnn tablo gibi grlmesi ve $ iareti ile birlikte sorgulama yaplmasdr.

private void btnExcel_Click(object sender, EventArgs e)


{
if (dgRaporSonuc.DataSource != null)
{
if (folderBrowserDialog1.ShowDialog() ==
DialogResult.OK)
{
OleDbConnection excelConnection = new
OleDbConnection(Data Source=+ folderBrowserDialog1.SelectedPath
154 Proje 2

+\\TarihBazlRapor.xls;Provider=Microsoft.Jet.OLEDB.4.0;Extended
Properties=Excel 8.0;);
OleDbCommand excelCommand = new
OleDbCommand(CREATE TABLE [Rapor] ([Kalk] string, [Var]
string, [Var Zaman] string, [Kalk Zaman] string,[Bilet
Tutar] double, [Toplam Bilet] int);, excelConnection);
excelConnection.Open();
try
{
excelCommand.ExecuteNonQuery();
}
catch (Exception ex)
{
MessageBox.Show(Bu belge zaten mevcut.);
return;
}

excelConnection.Close();

excelConnection.Open();
DataTable dt = (DataTable)dgRaporSonuc.
DataSource;
foreach (DataRow dr in dt.Rows)
{
excelCommand = new OleDbCommand(Insert
Into [Rapor$] ([Kalk],[Var],[Var Zaman],[Kalk
Zaman],[Bilet Tutar], [Toplam Bilet]) Values(@KalkisSehri,@
VarisSehri,@VarisZamani,@KalkisZamani,@BiletTutari,@
SatisiYapilanBiletSayisi), excelConnection);

excelCommand.Parameters.AddWithValue(@
KalkisSehri,dr[KalkisSehri].ToString());
excelCommand.Parameters.AddWithValue(@
VarisSehri,dr[VarisSehri].ToString());
excelCommand.Parameters.AddWithValue(@
VarisZamani,dr[VarisZamani].ToString());
excelCommand.Parameters.AddWithValue(@
KalkisZamani,dr[KalkisZamani].ToString());
excelCommand.Parameters.AddWithValue(@
BiletTutari, Convert.ToDecimal(dr[BiletTutari]));
excelCommand.Parameters.AddWithValue(@
SatisiYapilanBiletSayisi, Convert.ToInt32(dr[SatisiYapilanBilet
Sayisi]));
excelCommand.ExecuteNonQuery();
}

excelConnection.Close();
Otobs Otomasyonu 155

}
}
}

Liste 2.48: Raporu Excele aktarma ilemi.

Rapor ktsnda ise herhangi ek bir bileen kullanlmayacandan dolay kt ilemi print do-
cument sayesinde yaplmaktadr. Bir sayfada 35 kayt listelenecek ekilde printDocument1_Be-
ginPrint ve printDocument1_PrintPage olaylarn Liste 2.49da belirtii gibi hazrlayn ve belirtilen
global deikenleri oluturun.

private void printDocument1_BeginPrint(object sender, System.


Drawing.Printing.PrintEventArgs e)
{
// toplam ka kayt olacak
int toplamKayit = ((DataTable)dgRaporSonuc.
DataSource).Rows.Count;
// hangi sayfa biti sayfamz olacak. Bir sayfada 35
kayt bulunacak.
bitis = (toplamKayit - (toplamKayit % 35)) / 35;

int mevcutSayfa , bitis;



private void printDocument1_PrintPage(object sender,
System.Drawing.Printing.PrintPageEventArgs e)
{

// Rapor Baln yaz
e.Graphics.DrawString(Tarih Bazl Rapor [
+ dtBaslangicZamani.Value.ToShortDateString() + - +
dtBitisZamani.Value.ToShortDateString() + ], new Font(Verdana,
10), Brushes.Red, 80, 10);

// Balklar yaz

e.Graphics.DrawString(Kalk ehri, new


Font(Verdana, 8), Brushes.Red, 110, 80);
e.Graphics.DrawString(Var ehri, new
Font(Verdana, 8), Brushes.Red, 200, 80);
e.Graphics.DrawString(Kalk Zaman, new
Font(Verdana, 8), Brushes.Red, 280, 80);
e.Graphics.DrawString(Var Zaman, new
Font(Verdana, 8), Brushes.Red, 400, 80);
e.Graphics.DrawString(Bilet Tutar, new
Font(Verdana, 8), Brushes.Red, 510, 80);
156 Proje 2

e.Graphics.DrawString(Yolcu Adedi, new


Font(Verdana, 8), Brushes.Red, 605, 80);

// Balklar altna gerekli izgileri iz

e.Graphics.DrawLine(new Pen(Brushes.Red),
80,95,700,95);

// Gerekli kaytlar bas. Her sayfada 30 sefer


listelenecek.
DataTable dt = (DataTable)dgRaporSonuc.DataSource;
int y = 130;
// e.HasMorePages=True olduunda hangi kayttan
itibaren yazdrmaya balanacak
int baslangicKayit = mevcutSayfa * 35;

// mevcut sayfaya ka adet kayt yazdrlacak.


int bitisKayit = (baslangicKayit + 35 > dt.Rows.
Count) ? dt.Rows.Count : baslangicKayit + 35;

for (int i = baslangicKayit; i < bitisKayit; i++)


{
e.Graphics.DrawString(dt.
Rows[i][KalkisSehri].ToString(), new Font(Verdana, 8),
Brushes.Black, 110, y);
e.Graphics.DrawString(dt.
Rows[i][VarisSehri].ToString(), new Font(Verdana, 8), Brushes.
Black, 200, y);
e.Graphics.DrawString(Convert.ToDateTime(dt.
Rows[i][KalkisZamani]).ToShortTimeString(), new Font(Verdana,
8), Brushes.Black, 280, y);

DateTime varisZaman = DateTime.Now;
bool sonuc = DateTime.TryParse(dt.
Rows[i][VarisZamani].ToString(), out varisZaman);
if (sonuc)
e.Graphics.DrawString(Convert.
ToDateTime(dt.Rows[i][VarisZamani]).ToShortTimeString(), new
Font(Verdana, 8), Brushes.Black, 400, y);
else
e.Graphics.DrawString(dt.
Rows[i][VarisZamani].ToString(), new Font(Verdana, 8),
Brushes.Black, 400, y);

Otobs Otomasyonu 157

e.Graphics.DrawString(Convert.ToDecimal(dt.
Rows[i][BiletTutari]) + YTL, new Font(Verdana, 8), Brushes.
Black, 510, y);
e.Graphics.DrawString(dt.Rows[i][SatisiYap
ilanBiletSayisi].ToString(), new Font(Verdana, 8), Brushes.
Black, 620, y);

y+=30;
}

mevcutSayfa++;

// e.HasMorePages= true olduunda bu metod bir daha


alacak.
e.HasMorePages = mevcutSayfa <= bitis;

}

Liste 2.49: Raporu yazdrma ilemi.

Bu rapor formu hazrlandktan sonra HizliTur.WinUI projesi ierisindeki Raporlar klasrne Frm-
SeferBazliRapor isminde bir Windows Form ekleyin.ekil 2.29daki gibi tasarmn yapn.

ekil 2.29: Sefer Bazl Raporlama formu.

Kontrolleri Tablo 2.14de belirtildii gibi dzenleyin.


158 Proje 2

Tablo 2.14: Sefer Bazl Rapor Formu zerindeki Kontroller


Kontrol zellik Deer
GroupBox Text Sefer Sein
Name grpKriter
Dock Top
Label Text Kalk:
Label Text Var
ComboBox Name cmbKalkis
ComboBox Name cmbVaris
Button Name btnRaporla
Text Raporla
DataGridView Name dgRaporSonuc
AllowUserToAddRows False
AllowUserToDeleteRows False
ReadOnly True
Button Text Rapor nizle
Name btnOnizle
Button Text Yazdr
Name btnYazdir
Button Text Excele Aktar
Name btnExcel
PrintPreviewDialog Name PrintPreviewDialog1
Document PrintDocument1
PrintDocument Name PrintDocument1
FolderBrowserDialog Name FolderBrowserDialog1

Form zerindeki drRaporSonuc ismini tayan datagridview kontrolne 4 adet stun ekleyin. S-
tun isimleri Tablo 2.15de verilmitir.

Tablo 2.15: drRaporSonuc Kontrol zerindeki Stunlar


Header Text DataPropertyName
Kalk Zaman KalkisZamani
Var Zaman VarisZamani
Bilet Fiyat BiletTutari
Yolcu Says ToplamYolcu

Form ilk yklendiinde mevcut combobox kontrollerinin verileri listelemesini ve datagridview kon-
trolnn stunlar otomatik gstermesini kapatn.

private void FrmSeferBazliRapor_Load(object sender, EventArgs


e)
{
cmbKalkis.DisplayMember = SehirAdi;
cmbKalkis.ValueMember = SehirId;
cmbKalkis.DataSource = Facade.Sehir.SehirListesi();

cmbVaris.DisplayMember = SehirAdi;
cmbVaris.ValueMember = SehirId;
cmbVaris.DataSource = Facade.Sehir.SehirListesi();
Otobs Otomasyonu 159

dgRaporSonuc.AutoGenerateColumns = false;
}

Liste 2.50: FrmSeferBazliRapor_Load olay.

Sefer bazl rapor alabilmek iin veritaban zerinde sefer bana toplam yolcuyu dndren fonk-
siyonu oluturun.

Create Function SeferBasinaToplamYolcu


(
@SeferId int
)
returns int
begin
Declare @Sonuc int
Select @Sonuc = Count(SeferId) From Biletler Where SeferId = @
SeferId

return @Sonuc
end

Liste 2.51: SeferBasinaToplamYolcu stored procedure.

Fonksiyon oluturulduktan sonra raporlamay yapacak olan SehirBazliSeferRapor stored


proceduren oluturun.

Create Proc SehirBazliSeferRapor


(
@KalkisSehri int ,
@VarisSehri int
)
As

Select KalkisZamani,
case
when VarisZamani is NULL
Then Belirtilmedi
else
Convert(nvarchar,VarisZamani, 104)
end As VarisZamani,BiletTutari, dbo.SeferBasinaToplamYolcu(SeferI
d) As ToplamYolcu
From Seferler Where KalkisSehirId = @KalkisSehri And VarisSehirId
= @VarisSehri

Liste 2.52: SehirBazliSeferRapor stored procedure.

Oluturulan stored procedure altrp rapor sonucunu dndrecek olan SehirBazliSeferRapor


metodunu HizliTur.Facade projesi ierisindeki Sefer classna ekleyin.
160 Proje 2

public static DataTable SehirBazliSeferRapor(int kalkisSehirId,


int variSehirId)
{
SqlConnection con = new SqlConnection(Util.
ConnectionString);
SqlCommand cmd = new SqlCommand(SehirBazliSeferRapor
, con);
cmd.CommandType = CommandType.StoredProcedure;

cmd.Parameters.AddWithValue(@KalkisSehri,
kalkisSehirId);
cmd.Parameters.AddWithValue(@VarisSehri,
variSehirId);

SqlDataAdapter da = new SqlDataAdapter(cmd);


DataTable dt = new DataTable();
da.Fill(dt);

return dt;

Liste 2.53: SehirBazliSeferRapor metodu.

btnRaporla butonuna tklanld zaman raporlama ilemini yapacak olan metodu arn.

private void btnRaporla_Click(object sender, EventArgs e)


{

dgRaporSonuc.DataSource = Facade.Sefer.SehirBazliSeferRapor(Con
vert.ToInt32(cmbKalkis.SelectedValue), Convert.ToInt32(cmbVaris.
SelectedValue));
}

btnYazdir ve btnOnizle button kontrollerinin Click olaylarn hazrlayn.

private void btnYazdir_Click(object sender, EventArgs e)


{
if (dgRaporSonuc.DataSource != null)
printDocument1.Print();
}

private void btmOnizle_Click(object sender, EventArgs e)


{
if (dgRaporSonuc.DataSource != null)
printPreviewDialog1.ShowDialog();
}
Otobs Otomasyonu 161

btnExcel butonuna tklanld zaman rapor ktsn verecek metodu yazn.

private void btnExcel_Click(object sender, EventArgs e)


{
if (dgRaporSonuc.DataSource != null)
{
if (folderBrowserDialog1.ShowDialog() ==
DialogResult.OK)
{
OleDbConnection excelConnection = new
OleDbConnection(Data Source= + folderBrowserDialog1.
SelectedPath + \\SehirBazlRapor.xlsx;Provider=Microsoft.Jet.
OLEDB.4.0;Extended Properties=Excel 9.0;);

OleDbCommand excelCommand = new
OleDbCommand(CREATE TABLE [Rapor] ([Kalk Zaman] string,
[Var Zaman] string, [Bilet Tutar] double, [Yolcu Says]
int);, excelConnection);
excelConnection.Open();
try
{
excelCommand.ExecuteNonQuery();
}
catch (Exception ex)
{
MessageBox.Show(Bu belge zaten mevcut.);
return;
}

excelConnection.Close();

excelConnection.Open();
DataTable dt = (DataTable)dgRaporSonuc.
DataSource;
foreach (DataRow dr in dt.Rows)
{
excelCommand = new OleDbCommand(Insert
Into [Rapor$] ([Kalk Zaman],[Var Zaman],[Bilet Tutar],
[Yolcu Says]) Values(@KalkisZamani,@VarisZamani,@BiletTutari,@
YolcuSayisi), excelConnection);

excelCommand.Parameters.AddWithValue(@
KalkisZamani, dr[KalkisZamani].ToString());
excelCommand.Parameters.AddWithValue(@
VarisZamani, dr[VarisZamani].ToString());
excelCommand.Parameters.AddWithValue(@
BiletTutari, Convert.ToDecimal(dr[BiletTutari]));
162 Proje 2

excelCommand.Parameters.AddWithValue(@
YolcuSayisi, Convert.ToInt32(dr[ToplamYolcu]));
excelCommand.ExecuteNonQuery();
}

excelConnection.Close();
}
}
}

Liste 2.54: Gerekli Raporu Excele aktarma ilemi.

Datagridview kontrolnn veri kaynan yazdrmay salayan Liste 2.55deki olaylar hazrlayn.

private void printDocument1_BeginPrint(object sender, System.


Drawing.Printing.PrintEventArgs e)
{
int toplamKayit = ((DataTable)dgRaporSonuc.
DataSource).Rows.Count;
bitis = (toplamKayit - (toplamKayit % 35)) / 35;
}

int mevcutSayfa, bitis;

private void printDocument1_PrintPage(object sender,


System.Drawing.Printing.PrintPageEventArgs e)
{
// Rapor Baln yaz
e.Graphics.DrawString(Sefer Bazl Rapor [ +
cmbKalkis.Text + - + cmbVaris.Text + ], new Font(Verdana,
10), Brushes.Red, 80, 10);

// Balklar yaz

e.Graphics.DrawString(Kalk Zaman, new


Font(Verdana, 8), Brushes.Red, 80, 80);
e.Graphics.DrawString(Var Zaman, new
Font(Verdana, 8), Brushes.Red, 230, 80);
e.Graphics.DrawString(Bilet Tutar, new
Font(Verdana, 8), Brushes.Red, 370, 80);
e.Graphics.DrawString(Yolcu Adedi, new
Font(Verdana, 8), Brushes.Red, 470, 80);

// Balklar altna gerekli izgileri iz

e.Graphics.DrawLine(new Pen(Brushes.Red), 80, 95,


700, 95);
Otobs Otomasyonu 163

// Gerekli kaytlar bas. Her sayfada 35 sefer


listelenecek.

DataTable dt = (DataTable)dgRaporSonuc.DataSource;
int y = 130;
int baslangicKayit = mevcutSayfa * 35;

int bitisKayit = (baslangicKayit + 35 > dt.Rows.


Count) ? dt.Rows.Count : baslangicKayit + 35;

for (int i = baslangicKayit; i < bitisKayit; i++)


{

e.Graphics.DrawString(Convert.ToDateTime(dt.
Rows[i][KalkisZamani]).ToShortTimeString(), new Font(Verdana,
8), Brushes.Black, 80, y);

DateTime varisZaman = DateTime.Now;


bool sonuc = DateTime.TryParse(dt.
Rows[i][VarisZamani].ToString(), out varisZaman);
if (sonuc)
e.Graphics.DrawString(Convert.ToDateTime(dt.
Rows[i][VarisZamani]).ToShortTimeString(), new Font(Verdana,
8), Brushes.Black, 230, y);
else
e.Graphics.DrawString(dt.
Rows[i][VarisZamani].ToString(), new Font(Verdana, 8),
Brushes.Black, 230, y);

e.Graphics.DrawString(Convert.ToDecimal(dt.
Rows[i][BiletTutari]) + YTL, new Font(Verdana, 8), Brushes.
Black, 370, y);
e.Graphics.DrawString(dt.Rows[i][ToplamYolcu].
ToString(), new Font(Verdana, 8), Brushes.Black, 470, y);

y += 30;
}

mevcutSayfa++;

e.HasMorePages = mevcutSayfa <= bitis;

Liste 2.55: Gerekli raporu yazdrma ilemi.

Rezervasyon yaplp alnmayan biletler 10 dakika ncesinde iptal edilmesi iin database zerin-
de bir job hazrlayn. Rezerve edilen biletler biletler tablosunda SatisMiRezervasyonMu stunu
164 Proje 2

ierisinde tutuluyor. Hangi sefere ait rezervasyon olduunu bulabilmek iin Seferler tablosundaki
KalkisZamani bilgisine ihtiya var. lk nce SeferIdyi parametre alan ve bu seferin kalk zaman-
n dndren fonksiyonu veritaban sunucusu zerinde oluturun.

Create Function KalkisZamaniDondur


(
@SeferId int
)
returns datetime
as
begin

Declare @KalkisZamani datetime

Select @KalkisZamani = KalkisZamani From Seferler Where SeferId


= @SeferId

return @KalkisZamani

end

Liste 2.56: KalkisZamaniDondur fonksiyonu.

Bu fonksiyon sayesinde hangi seferin ne zaman kalkaca bilgisine ulap silinmesi gereken re-
zervasyonlara ulalacak. Silme ilemini yapacak olan sorgu ise Liste 2.57de verilmitir.

Delete From Biletler Where SatisMiRezervasyonMu = True And


Datediff(mi, dbo.KalkisZamaniDondur(SeferId), GetDate()) >= -10

Liste 2.57: Rezervasyonlar otomatik iptal edecek sorgu.

Bu sorguyu dakikada bir alacak bir job haline getirin. Unu-


Sql Server Configuration Manager
aracndan servislerin Start Mode tulmamaldr ki Sql Server zerindeki joblarn alabilmesi iin
zelliklerini ayarlayabilirsiniz. Sql Server Agent servisinin alyor olmas gerekir. Sql Server
Agent servisinin Start Mode zelliini Automatic yapn.

Sql Server Management Studio ierisinden object browser penceresi ierisinde Sql Server Agent
geniletin. Job sekmesi zerinde sa tklayn New Job mensn sein.

ekil 2.30: Yeni Job oluturma ekran.

Oluturulacak olan joba General sekmesinden RezervasyonIptal ismi verin. Daha sonra Steps
sekmesine geip New butonuna tklayp yeni bir step oluturun. Oluturulacak adma isim olarak
RezervasyonSilme ismi verin. Database olarak HizliTur veritabann sein. Sorgu olarak ise Liste
2.57de verilen sorguyu girin.
Otobs Otomasyonu 165

ekil 2.31: Job isimlendirme.

ekil 2.32: Job adm oluturma.

Job adm oluturulduktan sonra Schedules sekmesine tklayp New butonuna tklayn. Her 1
dakikada alacak ekilde zamanlama oluturun.
166 Proje 2

ekil 2.33: Jobn alaca zamanlarn belirlenmesi.

Job oluturma ilemini tamamlamak iin OK butonuna tklayp ak ilemi onaylayn. Bu aama-
dan sonra her 1 dakikada bir zamanlanm i alacak ve iptal edilmesi gereken rezervasyonlar
silecek.

Buraya kadar anlatlanlar size uygulama ierisindeki kilit noktalarda yol gster amal yaplm-
tr.

Uygulama
1. Mterilerin ald biletlerin gnlk, aylk raporlarn ve otobslerin seferlerde harcad tutar-
larn raporlarn hazrlayn.
2. Personel yetkilendirme formu yapn.
3. Veritabannn her Pazar full yedeini, her gn sadece farklarn yedeini alan bir job olutu-
run.
4. Mterinin ald bilet iin bir tasarm yapn ve ktsn yazcdan kartn.
3 Proje 3:
DVDDukkani.com
3 Proje 3 : DVDDukkani.com
Grmeler

Uygulama Tasarm
Proje 3: DVDDukkani.com
Grmeler
Hsamettin Beceriksiz (Proje Sahibi)
Yapmak istediimiz web uygulamas sayesinde piyasadaki dvdleri kullanclarmza ulatrmak
istiyoruz. Filmleri tahsis eden firmalar bir Windows ekranndan kendi filmlerini tanmlasn, kate-
gorilerini, oyuncularn, altyaz bilgilerini, dilleri, filmin afiini, sresini, yapmcsn girsin, bana
ne kadara satacan girsin ve kendi girdii filmleri gncelleyebilsin. Daha sonra bu film bilgileri
zerinden de deiiklik yapabilsin ama o filmi ekledikten sonra film direk sata girmesin. Ben
girdii bilgileri greyim, eer dzgn ise sata alaym filmi ve internette grnsn. Yine ayn
uygulamadan gelen bir siparii o filmi tedarik eden firma grsn ve bana gndersin. Bir filmde oy-
nayan oyuncularn, ynetmenlerin ve mevcut altyaz saysnn birden fazla olduunu unutmayn.
Benim onayladm ve sata kardm filmleri kullanclar grebilsin, kategorilere gre filmleri
listeyelebilsin, detayn grntledii bir filmi sepetine ekleyebilsin. Sepetteki rnleri ise en so-
nunda onaylayp alveri yapabilsin. Sipari geldii zaman otomatik olarak kullancnn siparii
tedarikiye iletilsin. Benim depom yok tedarike gelen siparilere bakp bana gndersin yoksa
olmadna dair aklama yazsn. Bu ilemi de kendi kullanaca windows arayznden yapsn
bende internet sitesi zerinden grebileyim. yelerimiz birden fazla adres tanmlamas yapabil-
sin. rnein; ev, i gibi adres tanmlasn ki daha sonradan sipari verirken istedii adrese siparii
gnderebileyim.

Uygulama Tasarm
Veritaban Tasarm
1. Veritaban sunucunuzu an DvdDukkani isminde veritaban oluturun.
2. ekil 3.1 ile ekil 3.20 arasndaki tablolar veritaban zerinde oluturun.

ekil 3.1: Tedarikciler tablosu. ekil 3.2: UyeAdresler tablosu.

ekil 3.3: Uyeler tablosu. ekil 3.4: YapimciFirmalar tablosu.

ekil 3.5: Yonetmenler tablosu. ekil 3.6: Altyazilar tablosu.


170 Proje 3

ekil 3.7: Diller tablosu. ekil 3.8: FilmKategorileri tablosu.

ekil 3.9: Filmler tablosu. ekil 3.10: FilmOyuncular tablosu.

ekil 3.11: FilmTipUcret tablosu.

FilmTipUcret tablosundaki Tur ismindeki sutun DVD, CD gibi turleri tutacak. Program tarafndan
bir enum arac olacak.

ekil 3.12: FilmYonetmenleri tablosu. ekil 3.13: Ilceler tablosu.

ekil 3.14: Islemler tablosu. ekil 3.15: Kategoriler tablosu.

ekil 3.16: Oyuncular tablosu. ekil 3.17: Sehirler tablosu.

ekil 3.18: SepetDetaylari tablosu. ekil 3.19: Sepetler tablosu.


DVDDukkani.com 171

ekil 3.20: TedarikciIstek tablosu.


Eklenen 20 tablo sonucu veritabanndaki tablo listesi ekil 3.21deki gibi olmaktadr.

ekil 3.21: Veritaban tablo yaps.

Eklenen tablolar iin gerekli ilikileri verin.

Kaynak Tablo Kaynak Stun Hedef Tablo Hedef Stun


Ilceler SehirId Sehirler SehirId
UyeAdresler IlceId Ilceler IlceId
Tedarikciler IlceId Ilceler IlceId
Islemler FilmId Filmler FilmId
SepetDetaylari FilmId Filmler FilmId
FilmYonetmenleri FilmId Filmler FilmId
FilmOyuncular FilmId Filmler FilmId
FilmKategorileri FilmId Filmler FilmId
FilmTipUcret FilmId Filmler FilmId
Altyazilar FilmId Filmler FilmId
Filmler DilId Diller DilId
Altyazilar DilId Diller DilId
FilmYonetmenleri YonetmenId Yonetmenler YonetmenId
FilmOyuncular OyuncuId Oyuncular OyuncuId
Filmler YapimciFirmaId YapimciFirmalar FirmaId
SepetDetaylari SepetId Sepetler SepetId
FilmKategorileri KategoriId Kategoriler KategoriId
UyeAdresler UyeId Uyeler UyeId
Sepetler UyeId Uyeler UyeId
172 Proje 3

Arayz Tasarm
Farkl platformlardaki uygulamalar haberleecei iin uygulama bnyesinde web servisi, windows
uygulamas ve web uygulamas bulunacak. Visual Studio ap bo bir solution oluturun ve ismini
DvdDukkaniSln verin. Veri ile arayzn haberlemesini salamak iin Entity ve Facade katman
yapsn kullann. Oluturulan solutiona DvdDukkani. Entity isminde Class Library projesi ekle-
yin. Standart olarak gelen Class1.cs dosyasn silin. Veritabanndaki her tabloya karlk gelecek
ekilde birer class, her stuna karlk gelecek ekilde birer property ekleyin. Liste 3.1de rnek
olarak Film class verilmitir.

using System;
using System.Collections.Generic;
using System.Text;

namespace DvdDukkani.Entity
{
public class Film
{

#region Property

private int _FilmId;

private string _Adi;

private int _DilId;

private string _Ozet;

private int _YapimciFirmaId;

private int _Sure;

private int _Yil;

private string _Afis;

private bool _SatistaMi;

private bool _OnaylandiMi;

private int _TedarikEdilenFirmaId;

public int TedarikEdilenFirmaId


{
DVDDukkani.com 173

get { return _TedarikEdilenFirmaId; }


set { _TedarikEdilenFirmaId = value; }
}

public int FilmId


{
get { return _FilmId; }
set { _FilmId = value; }
}

public string Adi


{
get { return _Adi; }
set { _Adi = value; }
}

public int DilId


{
get { return _DilId; }
set { _DilId = value; }
}

public string Ozet


{
get { return _Ozet; }
set { _Ozet = value; }
}

public int YapimciFirmaId


{
get { return _YapimciFirmaId; }
set { _YapimciFirmaId = value; }
}

public int Sure


{
get { return _Sure; }
set { _Sure = value; }
}

public int Yil


{
get { return _Yil; }
174 Proje 3

set { _Yil = value; }


}

public string Afis


{
get { return _Afis; }
set { _Afis = value; }
}

public bool SatistaMi


{
get { return _SatistaMi; }
set { _SatistaMi = value; }
}

public bool OnaylandiMi


{
get { return _OnaylandiMi; }
set { _OnaylandiMi = value; }
}

#endregion

}
}

Liste 3.1: Film.cs class yaps.

Veritaban sunucuna balann. Veritabannz zerinde her tablo iin ekleme, silme, gncelleme,
tmn listeleme ve ID bilgisine gre tmn listeme yapacak Stored Procedure oluturun. r-
nek olarak Liste 3.2 ile Liste 3.6 arasnda Stored Procedureleri kullann.

Create Proc FilmEkle


(
@Adi nvarchar(50),
@DilId int,
@Ozet nvarchar(max),
@YapimciFirmaId int,
@Sure int,
@Yil int,
@Afis nvarchar(50),
@TeminEdilenTedarikciId int
)
As
Insert Into Filmler
(
DVDDukkani.com 175

Adi ,
DilId ,
Ozet ,
YapimciFirmaId ,
Sure ,
Yil ,
Afis ,
SatistaMi,
OnaylandiMi,
TeminEdilenTedarikciId
)
values
(
@Adi ,
@DilId ,
@Ozet ,
@YapimciFirmaId ,
@Sure ,
@Yil ,
@Afis ,
False,
False,
@TeminEdilenTedarikciId
)
Select @@Identity

Liste 3.2: FilmEkle stored procedure.

CREATE Proc FilmGuncelle


(
@Adi nvarchar(50),
@DilId int,
@Ozet nvarchar(max),
@YapimciFirmaId int,
@Sure int,
@Yil int,
@Afis nvarchar(50),
@SatistaMi bit,
@OnaylandiMi bit,
@TeminEdilenTedarikciId int,
@FilmId int
)
As
UPDATE Filmler SET Adi = @Adi
,DilId = @DilId
176 Proje 3

,Ozet= @Ozet
,YapimciFirmaId = @YapimciFirmaId
,Sure = @Sure
,Yil = @Yil
,Afis = @Afis
,SatistaMi = @SatistaMi
,OnaylandiMi = @OnaylandiMi
,TeminEdilenTedarikciId = @TeminEdilenTedarikciId
WHERE FilmId = @FilmId

Liste 3.3: FilmGuncelle stored procedure.

CREATE PROC FilmDetay


(
@FilmId int
)
As

Select FilmId
,Adi
,DilId
,Ozet
,YapimciFirmaId
,Sure
,Yil
,Afis
,SatistaMi
,OnaylandiMi
,TeminEdilenTedarikciId
From Filmler Where FilmId = @FilmId And OnaylandiMi=True

Liste 3.4: FilmDetay stored procedure.

CREATE Proc FilmListesi


As
SELECT FilmId
,Adi
,DilId
,Ozet
,YapimciFirmaId
,Sure
,Yil
,Afis
,SatistaMi
,OnaylandiMi
DVDDukkani.com 177

,TeminEdilenTedarikciId
FROM Filmler

Liste 3.5: FilmListesi stored procedure.

CREATE Proc FilmSil


(
@FilmId int
)
As

Delete From Filmler Where FilmId = @FilmId

Liste 3.6: FilmSil stored procedure.

Tm tablolar iin Stored Procedure oluturduktan sonra ve entity katmann tamamladktan sonra
DvdDukkaniSln isimli solutiona DvdDukkani.Facade isminde yeni bir Class Library projesi ekle-
yin. Eklenen proje ierisindeki Class1 ismindeki dosyay silin. Veritabanndaki her tabloya kar-
lk gelecek birer class ekleyin.Eklenen classlar ierisine ekleme, silme, gncelleme, tmn
listeleme ve ID bilgisine gre tmn listeme yapacak static metotlar ekleyin. rnek olarak Liste
3.7deki Film.cs classn kullann.

using System;
using System.Collections.Generic;
using System.Text;
using System.Data.SqlClient;
using System.Configuration;
using System.Data;

namespace DvdDukkani.DataLayer
{
public class Film
{
public static int FilmEkle(Entity.Film film)
{
SqlConnection con = new SqlConnection(ConfigurationMa
nager.ConnectionStrings[DvdDukkaniConStr].ConnectionString);
SqlCommand cmd = new SqlCommand(FilmEkle, con);
cmd.CommandType = CommandType.StoredProcedure;

cmd.Parameters.AddWithValue(@Adi, film.Adi);
cmd.Parameters.AddWithValue(@DilId, film.DilId);
cmd.Parameters.AddWithValue(@Ozet, film.Ozet);
cmd.Parameters.AddWithValue(@YapimciFirmaId, film.
YapimciFirmaId);
cmd.Parameters.AddWithValue(@Sure, film.Sure);
cmd.Parameters.AddWithValue(@Yil, film.Yil);
178 Proje 3

cmd.Parameters.AddWithValue(@Afis, film.Afis);
cmd.Parameters.AddWithValue(@TeminEdilenTedarikciId,
film.TedarikEdilenFirmaId);
int i = 0;
try
{
con.Open();
i = Convert.ToInt32(cmd.ExecuteScalar());
}
catch { }
finally { con.Close(); }

return i;

public static Entity.Film FilmDetay(int filmId)


{
SqlConnection con = new SqlConnection(ConfigurationMa
nager.ConnectionStrings[DvdDukkaniConStr].ConnectionString);
SqlCommand cmd = new SqlCommand(FilmDetay, con);
cmd.Parameters.AddWithValue(@FilmId, filmId);
cmd.CommandType = CommandType.StoredProcedure;
Entity.Film film = null;
try
{
con.Open();
SqlDataReader dr = cmd.ExecuteReader();
if (dr.Read())
{
film = new Entity.Film();
film.FilmId = (int)dr[FilmId];
film.Adi = (string)dr[Adi];
film.DilId = (int)dr[DilId];
film.Ozet = (string)dr[Ozet];
film.YapimciFirmaId = (int)dr[YapimciFirmaId
];
film.Sure = (int)dr[Sure];
film.Yil = (int)dr[Yil];
film.Afis = (string)dr[Afis];
film.SatistaMi = (bool)dr[SatistaMi];
film.OnaylandiMi = (bool)dr[OnaylandiMi];
film.TedarikEdilenFirmaId = (int)dr[TeminEdi
lenTedarikciId];
}
DVDDukkani.com 179

}
catch (Exception ex)
{
throw ex;
}
finally
{
con.Close();
}

return film;
}

public static int FilmGuncelle(Entity.Film film)


{
SqlConnection con = new SqlConnection(ConfigurationMa
nager.ConnectionStrings[DvdDukkaniConStr].ConnectionString);
SqlCommand cmd = new SqlCommand(FilmGuncelle, con);
cmd.CommandType = CommandType.StoredProcedure;

cmd.Parameters.AddWithValue(@Adi, film.Adi);
cmd.Parameters.AddWithValue(@DilId, film.DilId);
cmd.Parameters.AddWithValue(@Ozet, film.Ozet);
cmd.Parameters.AddWithValue(@YapimciFirmaId, film.
YapimciFirmaId);
cmd.Parameters.AddWithValue(@Sure, film.Sure);
cmd.Parameters.AddWithValue(@Yil, film.Yil);
cmd.Parameters.AddWithValue(@Afis, film.Afis);
cmd.Parameters.AddWithValue(@SatistaMi,film.
SatistaMi);
cmd.Parameters.AddWithValue(@OnaylandiMi,film.
OnaylandiMi);
cmd.Parameters.AddWithValue(@TeminEdilenTedarikciId,
film.TedarikEdilenFirmaId);
cmd.Parameters.AddWithValue(@FilmId, film.FilmId);
int i = 0;
try
{
con.Open();
i = Convert.ToInt32(cmd.ExecuteScalar());
}
catch { }
finally { con.Close(); }
180 Proje 3

return i;
}

public static int FilmSil(int filmId)


{
SqlConnection con = new SqlConnection(ConfigurationMa
nager.ConnectionStrings[DvdDukkaniConStr].ConnectionString);
SqlCommand cmd = new SqlCommand(FilmSil, con);
cmd.CommandType = CommandType.StoredProcedure;

cmd.Parameters.AddWithValue(@FilmId, filmId);
int i = 0;

try
{
con.Open();
i = cmd.ExecuteNonQuery();
}
catch (Exception ex)
{
throw ex;
}
finally
{
con.Close();
}

return i;
}

public static List<Entity.Film> FilmListesi()


{
SqlConnection con = new SqlConnection(ConfigurationMa
nager.ConnectionStrings[DvdDukkaniConStr].ConnectionString);
SqlCommand cmd = new SqlCommand(FilmListesi, con);

cmd.CommandType = CommandType.StoredProcedure;
List<Entity.Film> filmListesi = new List<DvdDukkani.
Entity.Film>();
try
{

con.Open();
SqlDataReader dr = cmd.ExecuteReader();
if (dr.Read())
DVDDukkani.com 181

{
Entity.Film film = new Entity.Film();
film.FilmId = (int)dr[FilmId];
film.Adi = (string)dr[Adi];
film.DilId = (int)dr[DilId];
film.Ozet = (string)dr[Ozet];
film.YapimciFirmaId = (int)dr[YapimciFirmaId
];
film.Sure = (int)dr[Sure];
film.Yil = (int)dr[Yil];
film.Afis = (string)dr[Afis];
film.SatistaMi = (bool)dr[SatistaMi];
film.OnaylandiMi = (bool)dr[OnaylandiMi];
film.TedarikEdilenFirmaId = (int)dr[TeminEdi
lenTedarikciId];

filmListesi.Add(film);
}

}
catch (Exception ex)
{
throw ex;
}
finally
{
con.Close();
}

return filmListesi;
}
}
}

Liste 3.7: Facade.Film.cs class yaps.

Solutiona windows uygulamas ile web uygulamasnn haberlemesini salayacak olan web ser-
vis projesini oluturun. DvdDukkani.WebServices isminde bir Web Service projesi ekleyin. Ek-
lenen web servis projesi ierisinde kullanlaca iin DvdDukkani.Entity ve DvdDukkani.Facade
projelerini referans olarak ekleyin. Proje ierisindeki Service.asmx.cs kod dosyasna Liste 3. 8 ile
. arasndaki metotlar yazn. Clientlarn gvenli bir ekilde uygulama giri yapmalarn ve oturum
amalarn salamak iin Soap Header ekleyin.

public class Security : SoapHeader


{
private string _KullaniciKodu;
182 Proje 3

public string KullaniciKodu


{
get { return _KullaniciKodu; }
set { _KullaniciKodu = value; }
}
private string _Sifre;

public string Sifre


{
get { return _Sifre; }
set { _Sifre = value; }
}
}

Liste 3.8: SoapHeader snfndan tretilmi gvenlik snf.

Tanmlanan soap header bilgisine gre web servisi zerinde kullanclarn giri yapmalarn sa-
layn.lk nce DvdServisi.Facade projesi ierisindeki Tedarikci snfna Login isminde bir metod
ekleyin.

public int Login(string kullaniciKodu, string sifre)


{
SqlConnection con = new SqlConnection(ConfigurationMa
nager.ConnectionStrings[DvdDukkaniConStr].ConnectionString);

SqlCommand cmd = new SqlCommand(TedarikciLogin,con)


;
cmd.CommandType = System.Data.CommandType.
StoredProcedure;
cmd.Parameters.AddWithValue(@KullaniciKodu,
kullaniciKodu);
cmd.Parameters.AddWithValue(@Sifre, sifre);

int i = 0;
try
{
con.Open();
i = Convert.ToInt32(cmd.ExecuteScalar());
}
catch (Exception)
{

i = -1;
}
finally
{
DVDDukkani.com 183

con.Close();
}

return i;
}

Daha sonra web servisi ierisinde giri ilemini yapacak metodu oluturun.

public Security baslik;

[WebMethod(true)]
[SoapHeader(baslik)]
public int Login()
{
Tedarikci tedarikci = new Tedarikci();
int i = 0;
i = tedarikci.Login(baslik.KullaniciKodu, baslik.Sifre);

if (i > 0)
Session[Anahtar] = Guid.NewGuid();

return i;
}

Liste 3.9: Kullanclarn giri yapmasn salayan Login metodu.

Eer balk bilgisi doru ise ve kullanc baarl bir ekilde bilgileri girmi ise Anahtar isminde bir
Session oluturuluyor. Eer bu session bilgisi bo deil ise dier metotlar alacak, bosa yani
null deer dndrrse ilem yaplmayacak. Film eklemek iin veya dier bilgileri salamak iin
Liste 3.10 ile Liste 3.24 arasndaki metotlar servis zerine yazn.

[WebMethod(true, CacheDuration = 360)]


public DvdDukkani.Entity.FilmOyuncu[] FilmOyuncuListesi()
{
if (Session[Anahtar] != null)
{
return DvdDukkani.Facade.FilmOyuncu.
FilmOyuncuListesi().ToArray();
}
else
return null;

Liste 3.10: Hangi filmde hangi oyuncu oynuyor bilgisini veren metod.
184 Proje 3

[WebMethod(true,CacheDuration=360)]
public DvdDukkani.Entity.Kategori[] FilmKategoriListesi()
{
if (Session[Anahtar] != null)
{
return Kategori.KategoriListesi().ToArray();
}
else
return null;

Liste 3.11: Filmin hangi kategorilerde olduunun bilgisini veren metod.

[WebMethod(true, CacheDuration = 360)]


public DataSet YapimciFirmaListesi()
{
if (Session[Anahtar] != null)
{
YapimciFirma yapimciFirma = new YapimciFirma();
return yapimciFirma.YapimciFirmaListesi();
}
else
return null;
}

Liste 3.12: Yapmc Firma listesini dndren metod.

[WebMethod(true, CacheDuration = 360)]


public DvdDukkani.Entity.Dil[] DilListesi()
{
if (Session[Anahtar] != null)
{
return Dil.DilListesi().ToArray();
}
else
return null;

Liste 3.13: Mevcut dilleri dndren metod.

[WebMethod(true, CacheDuration = 360)]


public DvdDukkani.Entity.Yonetmen[] YonetmenListesi()
{
if (Session[Anahtar] != null)
DVDDukkani.com 185

{
return DvdDukkani.DataLayer.Yonetmen.
YonetmenListesi().ToArray();
}
else
return null;

Liste 3.14: Ynetmenlerin listesini dndren metod.

[WebMethod(true, CacheDuration = 360)]


public DvdDukkani.Entity.Oyuncu[] OyuncuListesi()
{
if (Session[Anahtar] != null)
{
return DvdDukkani.DataLayer.Oyuncu.OyuncuListesi().
ToArray();
}
else
return null;

Liste 3.15: Oyuncu listesini dndren metod.

[WebMethod(true,MessageName=TumSiparisler)]
public DvdDukkani.Entity.Sepet[] SepetListesi()
{
if (Session[Anahtar] != null)
{
return DvdDukkani.DataLayer.Sepet.SepetListesi().
ToArray();
}
else
return null;
}

Liste 3.16: Sepet listesini dndren metod.

[WebMethod(true,MessageName=SiparislerDurumaGore)]
public DvdDukkani.Entity.Sepet[] SepetListesi(byte durum)
{
if (Session[Anahtar] != null)
{
return DvdDukkani.DataLayer.Sepet.SepetListesi(durum).
ToArray();
186 Proje 3

}
else
return null;
}
Liste 3.17: Siparilerin durumuna gre Sepet dizisi dndren metod.

[WebMethod(true, MessageName = TumTalepler)]


public DvdDukkani.Entity.TedarikciIstek[] TalepListesi(int
tedarikciId)
{
if (Session[Anahtar] != null)
{
return DvdDukkani.DataLayer.TedarikciIstek.
TalepGetir(tedarikciId).ToArray();
}
else
return null;
}

Liste 3.18: Tm talepleri dndren metod.

[WebMethod(true, MessageName = TaleplerDurumaGore)]


public DvdDukkani.Entity.TedarikciIstek[] TalepListesi(int
durum, int tedarikciId)
{
if (Session[Anahtar] != null)
{
return DvdDukkani.DataLayer.TedarikciIstek.
TalepGetir(tedarikciId, durum).ToArray();
}
else
return null;
}

Liste 3.19: Talep durumuna gre istek listesini dndren metod

[WebMethod(true)]
public bool TalepGuncelle(DvdDukkani.Entity.TedarikciIstek
talep)
{
if (Session[Anahtar] != null)
{
return DvdDukkani.DataLayer.TedarikciIstek.
TalepGuncelle(talep);
}
else
DVDDukkani.com 187

return false;
}

Liste 3.20: Talep gncelleyen metod.

[WebMethod(true)]
public void TedarikciGuncelle(DvdDukkani.Entity.Tedarikci t)
{
if (Session[Anahtar] != null)
{
DvdDukkani.DataLayer.Tedarikci.Guncelle(t);
}

}

Liste 3.21: Tedariki bilgilerini gncelleyen metod.

[WebMethod(true)]
public DvdDukkani.Entity.Tedarikci TedarikciBul(int
tedarikciId)
{
if (Session[Anahtar] != null)
{
return DvdDukkani.DataLayer.Tedarikci.TedarikciBul(te
darikciId);
}
else
return null;
}

Liste 3.22: Tedariki bilgilerini dndren metod.

[WebMethod(true, CacheDuration = 360)]


public DvdDukkani.Entity.Ilce[] IlceListesi()
{
if (Session[Anahtar] != null)
{
return DvdDukkani.DataLayer.Ilce.IlceGetir().
ToArray();
}
else
return null;
}

Liste 3.23: le listesini dndren metod.

Film eklemek iin gereken metod biraz karktr. Bir film birden fazla kategoride bulunabilir, bir-
den fazla oyuncu, ynetmen ve altyaz seenei olabilir. Yaplacak ilem ilk nce film eklemek
188 Proje 3

daha sonra o filmin identity bilgisini alp ona gre kategori, ynetmen, oyuncu vs. gerekli bilgileri
eklemek. Bunun yan sra eklenecek afilerin isimlerini deitirip sabit bir uzant vermek afi gs-
terirken ve yklerken oluabilecek hatalar nleyecek. Liste 3.24de belirtildii gibi FilmEkleme
metodunu oluturun.

[WebMethod(true, CacheDuration = 360)]


public void FilmEkle(DvdDukkani.Entity.Film film, byte[]
afis,List<DvdDukkani.Entity.Dil> altyazilar, List<DvdDukkani.
Entity.FilmOyuncu> oyuncuListesi, List<DvdDukkani.Entity.Yonetmen>
yonetmenListesi,List<DvdDukkani.Entity.Kategori> kategoriListesi,
List<DvdDukkani.Entity.FilmTipUcret> filmTipUcretleri)
{
if (Session[Anahtar] != null)
{
bool uploadDurumu = false;
Guid afisAdi = Guid.NewGuid();
// Afisi gonder.
if (afis.Length == 0)
{
// eer afis dizisi bo ise
film.Afis = AfisYok.afis;
uploadDurumu = true;
}
else
{
// gelen afisi filestream ile yaz
try
{
film.Afis = afisAdi.ToString()+ .afis;
FileStream fs = new FileStream(Configurati
onManager.AppSettings[AfisUploadKlasor] + film.Afis, FileMode.
Create);
fs.Write(afis, 0, afis.Length);
fs.Flush();
fs.Close();
uploadDurumu = true;
}
catch (Exception ex)
{
//throw ex;
uploadDurumu = false;
}
}
int filmEklemeSonuc = 0;
if (uploadDurumu)
DVDDukkani.com 189

filmEklemeSonuc = DvdDukkani.DataLayer.Film.
FilmEkle(film);

if (filmEklemeSonuc > 0)
{
// altyazilari ekle
foreach (DvdDukkani.Entity.Dil dil in altyazilar)
{
DvdDukkani.Entity.Altyazi altyazi = new
DvdDukkani.Entity.Altyazi();
altyazi.FilmId = filmEklemeSonuc;
altyazi.DilId = dil.DilId;

DvdDukkani.DataLayer.Altyazi.
AltyaziEkle(altyazi);
}

// Oyuncular Ekle

foreach (DvdDukkani.Entity.FilmOyuncu oyuncu in


oyuncuListesi)
{
oyuncu.FilmId = filmEklemeSonuc;
DvdDukkani.DataLayer.FilmOyuncu.FilmOyuncula
rEkle(oyuncu);
}

foreach (DvdDukkani.Entity.Yonetmen yonetmen in


yonetmenListesi)
{
DvdDukkani.Entity.FilmYonetmeni filmYonetmeni
= new DvdDukkani.Entity.FilmYonetmeni();
filmYonetmeni.FilmId = filmEklemeSonuc;
filmYonetmeni.YonetmenId = yonetmen.
YonetmenId;

DvdDukkani.DataLayer.FilmYonetmen.FilmYonetm
enEkle(filmYonetmeni);
}

foreach (DvdDukkani.Entity.Kategori kategori in


kategoriListesi)
{
DvdDukkani.Entity.FilmKategori filmKategori
= new DvdDukkani.Entity.FilmKategori();
190 Proje 3

filmKategori.KategoriId = kategori.
KategoriId;
filmKategori.FilmId = filmEklemeSonuc;

DvdDukkani.DataLayer.FilmKategori.FilmKatego
riEkle(filmKategori);
}

foreach (DvdDukkani.Entity.FilmTipUcret ucret in


filmTipUcretleri)
{
ucret.FilmId = filmEklemeSonuc;
DvdDukkani.DataLayer.FilmTipUcret.
FilmTipUcretEkle(ucret);
}


}

}

Liste 3.24: FilmEkleme metodu.

ekil 3.22: Web referans eklemek.


DVDDukkani.com 191

Web servis zerinde kullanlacak metotlar tamamladktan sonra film tedarikinin kullanaca
Windows uygulamasn oluturun. Solutiona DvdDukkani.TedarikciWinUI isminde bir Windows
uygulamas ekleyin. Standart olarak eklenen Form1.cs Windows Formunu silin. FrmMain ismin-
de bir Windows Form ekleyin. Bu form uygulamann balang formu olacak. Uygulama zerinde
sa tklayn Add Web Reference mensne tklayarak web servisi iin referans ekleyin ve olu-
turduunuz Web Servisini sein. Servis ismi olarak DvdServis girin.

DvdDukkani.TedarikciWinUI projesine FrmLogin isminde Windows Form ekleyin. Bu form sa-


yesinde tedarikiler uygulamada oturum ap ilem yapabilecek. FrmLogin formu zerine Tablo
3.1de verilen kontrolleri ekleyin ve zellikleri yaplandrn.

Tablo 3.1: FrmLogin Formu Kontrol ve zellikleri


Kontrol zellik Deer
Label Text Kullanc Kodu :
Label Text ifre :
TextBox Name txtKullaniciKodu
TextBox Name txtSifre
Button Text Giri
Name btnGiris

Tablo Tablo 3.1de verilen kontroller eklendikten sonra tasarm grnm ekil 3.23deki gr-
nmde olacak.

ekil 3.23: FrmLogin tasarm grnm.

Uygulamann balang formu yani ana formu FrmMain formu olaca iin web servisi kullanmak
iin oluturulmas gereken nesne FrmMain zerinde olmal. Session kullanld iin tek bir nesne
retilmeli ve o nesne zerinden ilem yaplmal. Eer her kullanlmak istendiinde farkl bir nesne
oluturursanz veya nesnenin yeni bir rneini oluturursanz servis zerindeki session bilgisi
deiecek ve kullanc oturum amam gibi ilem yapacak.FrmMain formunda static bir deiken
oluturun.

public static DvdServis.Service servis = new DvdDukkani.


TedarikciWinUI.DvdServis.Service();

Liste 3.25: FrmMain formundaki static servis nesnesi.

Bir servis zerinde session kullanabilmek iin o servisi kullanacak olan Windows uygulamas
CookieContainer nesnesine ihtiya duyar. Gerekli CookieContainer oluturun ve FrmLogin for-
munu atrn.

private void FrmMain_Load(object sender, EventArgs e)


{
servis.CookieContainer = new System.Net.
CookieContainer();
192 Proje 3

FrmLogin login = new FrmLogin();


this.Hide();
if (login.ShowDialog() == DialogResult.OK)
{
this.Show();
}
else
Application.Exit();
}

Liste 3.26: FrmMain Form_Load olay.

FrmLogin formunu an. Bu form zerinde giri isteinde bulunulduu zaman gerekli soap header
bilgileri ile birlikte servisin Login() metodunu asenkron olarak arn ve sonucu yakalayn. Frm-
Main formu ierisine TedarikciId isminde static bir deiken tanmlayn. Bu deiken giri yapan
tedarikinin ID bilgisini tutacak.

internal static int TedarikciId=0;

Daha sonra giri ilemini yaptrn.

private void btnGiris_Click(object sender, EventArgs e)


{
this.Cursor = Cursors.WaitCursor;

DvdServis.Security guvenlik = new DvdDukkani.


TedarikciWinUI.DvdServis.Security();
guvenlik.KullaniciKodu = txtKullaniciKodu.Text;
guvenlik.Sifre = txtSifre.Text;

FrmMain.servis.SecurityValue = guvenlik;
FrmMain.servis.LoginCompleted += new DvdDukkani.
TedarikciWinUI.DvdServis.LoginCompletedEventHandler(servis_
LoginCompleted);
FrmMain.servis.LoginAsync();
}

void servis_LoginCompleted(object sender, DvdDukkani.


TedarikciWinUI.DvdServis.LoginCompletedEventArgs e)
{

this.Cursor = Cursors.Default;
if (e.Result > 0)
{
FrmMain.TedarikciId = e.Result;
this.DialogResult = DialogResult.OK;
DVDDukkani.com 193

}
else
{
MessageBox.Show(Yanl Giri);
}
}

Liste 3.27: FrmLogin btnGiris button kontrol Click olay ve Login metodu.

FrmMain formuna geip formu Tablo 3. 2deki ekilde yaplandrn.

Tablo 3.2: FrmMain Formu zellikleri ve Deerleri


zellik Deer
IsMdiContainer True
Text Tedariki lem
StartPosition CenterScreen
WindowState Maximized

FrmMain zerine MenuStrip kontrol ekleyin. Eklenen menye Tablo 3.3deki men elemanlarn
ekleyin.

Tablo 3.3: FrmMain Formu zerindeki Men Elemanlar


zellik Deer
Text Sipariler
Text Yeni Film Tanmla
Text Film Gncele
Text Bilgilerim

Gerekli zellikleri ayarladktan sonra FrmMain formu grnts deki ekilde olmaktadr.

ekil 3.24: FrmMain formu tasarm grnm.

Uygulama ierisinden yeni film ekleyebilmek iin FrmYeniFilm isminde form ekleyin. Bu form
tedarikinin yeni bir film eklemesini salayacak. Yalnz unutmamak gerekir ki bir film birden fazla
kategoride bulunabilir, birden fazla oyuncusu, ynetmen ve, altyaz seenei olabilir. FrmYeni-
Film formu zerine Tablo 3.4deki belirtilen kontrolleri ekleyin ve zellikleri yaplandrn.
194 Proje 3

Tablo 3.4: FrmYeniFilm Formu zerindeki Kontroller ve zellikleri


Kontrol zellik Deer
Label Text Ad :
Label Text Dili :
Label Text Yapmc Firma :
Label Text Sre :
Label Text Yl :
Label Text Afi
TextBox Name txtAdi
TextBox Name txtSure
TextBox Name txtYil
Combobox Name cmbDili
Combobox Name cmbYapimciFirma
TextBox Name txtAciklama
Multiline True
TextBox Name txtAfis
Button Name btnGzat
Text Gzat
Button Name btnOyuncuEkle
Text Oyuncu Ekle
Button Name btnYonetmenEkle
Text Ynetmen Ekle
Button Name btnKategori
Text Kategori Ekle
Button Name btnAltYaziEkle
Text Altyaz Ekle
Button Name btnTurler
Text Trler ve cretler
Button Name btnFilmEkle
Text Film Ekle
OpenFileDialog

Gerekli kontroller eklendikten sonra FrmYeniFilm formu ekil 3.25deki gibi olacak.

ekil 3.25: FrmYeniFilm Windows Formu tasarm grnm.


DVDDukkani.com 195

Bir film eklerken, oyuncular, ynetmenleri, kategorileri seilecei iin eitli button kontolleri ek-
leyerek arayz tasarmn yaptnz. Seilen filme gerekli bilgileri eklemek iin ilgili formlar yapn.
Yalnz bu form kapatlmadan ilem yaplaca iin FrmYeniFilm formuna static deikenleri olu-
turun (Liste 3.28). Eklenecek olan bu listeler filme eklenecek ek bilgileri tutacak.

public static List<DvdServis.Yonetmen> YonetmenListesi = new


List<DvdServis.Yonetmen>();
public static List<DvdServis.FilmOyuncu> OyuncuListesi =
new List<DvdServis.FilmOyuncu>();
public static List<DvdServis.Kategori> KategoriListesi =
new List<DvdServis.Kategori>();
public static List<DvdServis.Dil> AltYaziListesi = new
List<DvdServis.Dil>();
public static List<DvdServis.FilmTipUcret>
filmTipUcretListesi = new List<DvdDukkani.TedarikciWinUI.
DvdServis.FilmTipUcret>();

Liste 3.28: FrmYeniFilm static deikenleri.

Gerekli listeler hazrlandktan sonra form zerinde veritabanndan gelecek olan verileri listeleyin.
Bu verilerden kast dil bilgileri ve yapmc firma bilgileri. Bu verileri ekmeden nce oluturulan
listeleri temizleyin. Bunun sebebi ise static deikenler ile almaktr.

private void FrmYeniFilm_Load(object sender, EventArgs e)


{
YonetmenListesi.Clear();
OyuncuListesi.Clear();
KategoriListesi.Clear();
AltYaziListesi.Clear();
FilmTipUcretListesi.Clear();

CheckForIllegalCrossThreadCalls = false;
Thread thread = new Thread(new ThreadStart(Calistir));
thread.Start();

}
void Calistir()
{
cmbYapimciFirma.DisplayMember = Adi;
cmbYapimciFirma.ValueMember = FirmaId;
cmbYapimciFirma.DataSource = FrmMain.servis.
YapimciFirmaListesi().Tables[0];

cmbDili.DisplayMember = Adi;
cmbDili.ValueMember = DilId;
cmbDili.DataSource = FrmMain.servis.DilListesi();
}

Liste 3.29: FrmYeniFilm_Load olay ve verileri balama.


196 Proje 3

Burada verileri thread ile armann amac , web servisinden asenkron olarak ayn anda birden
fazla metod aramamaktr. Eklenen button kontrollerinin bazlarnn Click olaylarn hazrlayn.

private void btnYonetmenEkle_Click(object sender, EventArgs e)


{
FrmYonetmenEkle frm = new FrmYonetmenEkle();
frm.ShowDialog();
}

private void btnKategori_Click(object sender, EventArgs e)


{
FrmKategoriEkle frm = new FrmKategoriEkle();
frm.ShowDialog();
}

private void btnAltyaziEkle_Click(object sender, EventArgs e)


{
FrmAltYaziEkle frm = new FrmAltYaziEkle();
frm.ShowDialog();
}

private void btnGozat_Click(object sender, EventArgs e)


{
if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
txtAfis.Text = openFileDialog1.FileName;
}
}

private void btnTurler_Click(object sender, EventArgs e)


{
FrmCdTurUcret frm = new FrmCdTurUcret();
frm.ShowDialog();
}

private void btnOyuncuEkle_Click(object sender, EventArgs e)


{
FrmOyuncuEkle frm = new FrmOyuncuEkle();
frm.ShowDialog();
}

Liste 3.30: FrmYeniFilm formu zerindeki button kontrolleri Click olaylar.

Liste 3.30da belirtilen olaylarda farkl formlar almak istendi. Bu formlar DvdDukkani.Tedarik-
ciWinUI proje ierisine oluturun. Eklenecek formlar FrmOyuncuEkle, FrmCdTurUcret, FrmAlt-
DVDDukkani.com 197

yaziEkle, FrmYonetmenEkle ve FrmKategoriEkle formlar.Eklenen FrmKategori formunu an.


Tablo 3.5de belirtilen kontolleri forma ekleyin.

Tablo 3.5: FrmKategori Formu Kontrol Listesi ve zellikleri


Kontrol zellik Deer
Label Text Kategori
Button Text Ekle
Name btnEkle
Button Text Kaldr
Name btnKaldir
Combobox Name cmbKategori
ListBox Name lstKategoriler
Button Name btnKapat
Text Kapat

Eklenen kontrolleri ekil 3.26daki gibi form zerine yerletirin. Bu form sayesinde filmin hangi
kategoriler altnda duraca belirtilecek. Dikkat edilmesi gereken nokta eklenmi bir kategoriyi bir
daha ekleyememektir.

ekil 3.26: FrmKategori formu tasarm grnm.

Kateogori listesini doldurun. Gerekli kontrolleri yaparak ilemi tamamlayn. Gerekli kodlar Liste
3.31de verilmitir.

private void FrmKategoriEkle_Load(object sender, EventArgs e)


{
ListeGuncelle();

FrmMain.servis.FilmKategoriListesiCompleted
+= new FilmKategoriListesiCompletedEventHandler(servis_
FilmKategoriListesiCompleted);

FrmMain.servis.FilmKategoriListesiAsync();

}

void servis_FilmKategoriListesiCompleted(object sender,


FilmKategoriListesiCompletedEventArgs e)
{
198 Proje 3

cmbKategori.DisplayMember = Adi;
cmbKategori.ValueMember = KategoriId;
cmbKategori.DataSource = e.Result;
}

private void btnEkle_Click(object sender, EventArgs e)


{
bool varmi = false;
foreach (DvdServis.Kategori k in FrmYeniFilm.
KategoriListesi)
{
if (k.Adi == (cmbKategori.SelectedItem as
DvdServis.Kategori).Adi)
{
varmi = true;
break;
}
}
if (!varmi)
{

FrmYeniFilm.KategoriListesi.Add((DvdServis.
Kategori)cmbKategori.SelectedItem);
ListeGuncelle();

}

}

void ListeGuncelle()
{
lstKategoriler.Items.Clear();
foreach (DvdServis.Kategori k in FrmYeniFilm.
KategoriListesi)
{
lstKategoriler.Items.Add(k);
}
}

private void btnKaldir_Click(object sender, EventArgs e)


{
if (lstKategoriler.SelectedItems.Count == 0)
{
MessageBox.Show(Kalrlacak kategoriyi listeden
sein);
DVDDukkani.com 199

return;
}

FrmYeniFilm.KategoriListesi.Remove((DvdServis.
Kategori)lstKategoriler.SelectedItem);
ListeGuncelle();
}

Liste 3.31: FrmKategori formu gerekli metodlar.

FrmOyuncuEkle, FrmCdTurUcret, FrmAltYaziEkle ve FrmYonetmenEkle formlarn ayn ekilde


yaplandrn. FrmCdTurUcret formunda dikkat edilmesi gereken cd trlerinin veritabanndan gel-
meyecei, elle ekleneceidir. rnein CD, DVD ve HD. Formlar yaptktan sonra FrmFilmEkle
formunu an. Yaplacak en son ilem filmi eklemek. Filmi eklemeden nce gerekli alanlarn bo
olup olmadn kontrol edin.

private bool Kontrol()


{
bool varmi = false;
if (FilmTipUcretListesi.Count < 0)
{
MessageBox.Show(Sata kacak Cd Tip ve
cretleri Belirtin);
}

foreach (Control cl in this.Controls)
{
if (cl is TextBox)
{
if (string.IsNullOrEmpty(cl.Text))
{
cl.BackColor = Color.Red;
varmi = true;
}
}
}

return !varmi;
}

private void btnFilmEkle_Click(object sender, EventArgs e)


{

if (Kontrol())
{
// afisi byte[] evir.
FileInfo afis = new FileInfo(txtAfis.Text);
200 Proje 3

byte[] dosya = new byte[Convert.ToInt32(afis.


Length)];
FileStream akis = File.OpenRead(txtAfis.Text);
akis.Read(dosya, 0, dosya.Length);
akis.Close();

DvdServis.Film film = new DvdDukkani.


TedarikciWinUI.DvdServis.Film();
film.Adi = txtAdi.Text;
film.DilId = Convert.ToInt32(cmbDili.
SelectedValue);
film.Ozet = txtAciklama.Text;
film.Sure = Convert.ToInt32(txtSure.Text);
film.YapimciFirmaId = Convert.
ToInt32(cmbYapimciFirma.SelectedValue);
film.Yil = Convert.ToInt32(txtYil.Text);
//film.TedarikEdilenFirmaId = FrmMain.

FrmMain.servis.FilmEkleCompleted += new
DvdDukkani.TedarikciWinUI.DvdServis.FilmEkleCompletedEventHandler
(servis_FilmEkleCompleted);
FrmMain.servis.FilmEkleAsync(film, dosya,
AltYaziListesi.ToArray(), OyuncuListesi.ToArray(),
YonetmenListesi.ToArray(), KategoriListesi.ToArray(),
FilmTipUcretListesi.ToArray());

}
}

void servis_FilmEkleCompleted(object sender,


AsyncCompletedEventArgs e)
{
MessageBox.Show(Film Eklendi);
}

Liste 3.32: Film ekleme ilemi.

Tedariki firmann kendi bilgilerini gncellemesini salamak iin FrmBilgilerim isminde bir Win-
dows Form ekleyin.

Uygulama: ekil 3.27de ekran kts verilen bilgilerim formunu yaplandrn ve tedarikinin bilgi-
lerini gncellemesini salayn.
DVDDukkani.com 201

ekil 3.27: FrmBilgilerim formu tasarm grnm.

Site sahibinin tedarikiden isteyecei siparileri, tedarikinin ynetebilmesini salamak iin uygu-
lamaya FrmGelenSiparisler formu ekleyin. Bu form sayesinde tedariki, gelen ve giden siparileri-
ni grebilecek, ek aklama ekleyebilecek. Eklenen form zerine Tablo 3.6da belirtilen kontrolleri
ekleyin ve yaplandrn.

Tablo 3.6: FrmGelenSiparisler Formu Kontrol Listesi


Kontrol zellik Deer
GroupBox Text Sipari Durumu
RadioButton Text Cevaplananlar
Name rCevaplananlar
RadioButton Text Cevapszlar
Name rCevapsizlar
RadioButton Text Tm
Name cTumu
DataGridView Name dgSonuc
GroupBox Text Gncellemeler
Label Text Durum
Label Text Aklama
RadioButton Text Teslim Edildi
Name rbAktif
RadioButton Text Teslim Edilmedi
Name rbPasif
TextBox Name txtAciklama
Button Name

Gerekli kontrolleri ekledikten sonra tasarm ekil 3.28deki gibi yapn.


202 Proje 3

ekil 3.28: FrmGelenSiparisler tasarm grnm.

Web servisi zerinde gerekli ilemleri yapan metodlar arn. Gelen siparilerin ynetimini varsa
ek not dlmesini salayn. Gereken kodlar Liste 3.33deki gibi yazn.

private void FrmGelenSiparisler_Load(object sender, EventArgs e)


{
this.TalepDoldur();
}

DvdServis.TedarikciIstek[] talepler = null;

void TalepDoldur()
{
talepler = null;
if (rCevaplananlar.Checked)
talepler = FrmMain.servis.TalepListesi(1, FrmMain.
TedarikciId);
else if (rCevapsizlar.Checked)
talepler = FrmMain.servis.TalepListesi(2, FrmMain.
TedarikciId);
else
talepler = FrmMain.servis.TalepListesi(FrmMain.
TedarikciId);

dgSonuc.DataSource = talepler;
this.Listele();
}

private void rCevapsizlar_CheckedChanged(object sender,


EventArgs e)
{
this.TalepDoldur();
DVDDukkani.com 203

private void rCevaplananlar_CheckedChanged(object sender,


EventArgs e)
{
this.TalepDoldur();
}

private void rTumu_CheckedChanged(object sender, EventArgs


e)
{
this.TalepDoldur();
}

private void btnGuncelle_Click(object sender, EventArgs


e)
{
if (dgSonuc.SelectedRows.Count > 0)
{
DvdServis.TedarikciIstek talep = talepler[dgSonuc.
SelectedRows[0].Index];
talep.EkNot = txtAciklama.Text;
talep.GerceklestiMi = rbAktif.Checked;

bool sonuc = FrmMain.servis.TalepGuncelle(talep);

if (!sonuc)
{
MessageBox.Show(Kayt tamamlanamad);
}
else
{
this.TalepDoldur();
MessageBox.Show(Kayt baar ile
tamamland);
}
}
else
{
MessageBox.Show(Gncelleme yapabilmek iin bir
talep semelisiniz);
}
}
204 Proje 3

private void dgSonuc_SelectionChanged(object sender,


EventArgs e)
{
Listele();
}

private void Listele()


{
if (dgSonuc.SelectedRows.Count > 0)
{
DvdServis.TedarikciIstek talep = talepler[dgSonuc.
SelectedRows[0].Index];
txtAciklama.Text = talep.EkNot;
if (talep.GerceklestiMi)
rbAktif.Checked = true;
else
rbPasif.Checked = true;
}
}

Liste 3.33: FrmGelenSiparisler formu metodlar.

Tedariki firmann kullanaca arayz tamamlandktan sonra Solutiona DvdDukkani.WebUI is-


minde web uygulamas ekleyin. Uygulama ierisinde kullanlacak olan flash animasyonlar iin
http://www.flash-control.net/ adresinden FlashControl bileenini indirip toolboxa ekleyin.

Web uygulamasnda stil kullanmak iin Style is-


Bu uygulamada kullanlacak olan tasarm Microsofttun
cretsiz datt taslaklardan alnmtr (http://msdn2.
minde bir klasr oluturun. ine size kitap ile
microsoft.com/en-us/asp.net/aa336613.aspx).
birlikte verilen uygulamadan stil.css dosyasn
ekleyin. Web uygulamasnn tasarmnn temelini
atmak iin uygulamaya master page ekleyin ve ismini ana.master verin. Eklenen ana.master say-
fasnn tasarmn Liste 3.34deki ekilde yapn.

<%@ Master Language=C# AutoEventWireup=true CodeFile=ana.


master.cs Inherits=ana %>
<%@ Register Assembly=FlashControl Namespace=Bewise.Web.
UI.WebControls TagPrefix=Bewise %>
<!DOCTYPE html PUBLIC -//W3C//DTD XHTML 1.0 Transitional//EN
http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd>
<html xmlns=http://www.w3.org/1999/xhtml xml:lang=en
lang=en>
<head>
<meta http-equiv=Content-Type content=text/html;
charset=iso-8859-1 />
<title>Dvd Dkkan - [ Bizde yoksa daha o film ekilmemitir
]</title>
<link href=style/stil.css rel=stylesheet type=text/css
/>
</head>
DVDDukkani.com 205

<body>
<form id=masterForm runat=server>
<asp:ScriptManager ID=ScriptManager1 runat=server>
</asp:ScriptManager>

<div id=mainnav-container>
<div id=mainnav>
<ul>
<li><a href=default.aspx>Ana Sayfa</a></li>
</ul>
</div>
<div id=mainnav-side>
<ul>
<li>
<asp:HyperLink ID=hlYeniUye
runat=server NavigateUrl=~/YeniUye.aspx>ye Olun</asp:
HyperLink>
</li>
<li>
<asp:LinkButton ID=lnkCikis
runat=server OnClick=lnkCikis_Click>k</asp:LinkButton>
</li>
<li>
<asp:LinkButton ID=lnkDurum
runat=server OnClick=lnkDurum_Click>LinkButton</asp:
LinkButton></li>
</ul>
</div>
<div class=clear>
</div>
</div>
<div id=header>
<a href=# title=Site name home page>Dvd</a>
Dkkan&#305;<div id=slogan>
E&#287;er bizde bir film yok ise daha o film
ekilmemi&#351;tir</div>
</div>
<div id=breadcrumb-container>
<div id=breadcrumb>
<asp:SiteMapPath ID=SiteMapPath1 runat=server
Font-Names=Verdana Font-Size=0.8em
PathSeparator= : >
<PathSeparatorStyle Font-Bold=True
ForeColor=#990000 />
<CurrentNodeStyle ForeColor=#333333 />
206 Proje 3

<NodeStyle Font-Bold=True
ForeColor=#990000 />
<RootNodeStyle Font-Bold=True
ForeColor=#FF8000 />
</asp:SiteMapPath>
</div>
<div id=breadcrumb-side style=width: 219px>
<fieldset>
<legend>Ara</legend>
<input onfocus=this.select() onblur=if
(this.value==){this.value=enter search phrase}
id=search name=search type=text
class=searchbox accesskey=4 size=20 />&nbsp;
<input class=button-search name=Search
type=button value=Ara />
</fieldset>
</div>
<div class=clear>
</div>
</div>

<div id=content-container>


<div id=content-side style=left: 0px; top: 0px;>
<ul class=link-list-vertical>
<asp:Repeater ID=Repeater1 runat=server
DataSourceID=SqlDataSource1>
<ItemTemplate>
<li><a href=kategoridetay.
aspx?Kategori=<%# DataBinder.Eval(Container.DataItem,
KategoriId) %>>
<%# DataBinder.Eval(Container.
DataItem, Adi) %>
</a></li>
</ItemTemplate>
</asp:Repeater>
<asp:SqlDataSource ID=SqlDataSource1
runat=server ConnectionString=<%$ ConnectionStrings:
DvdDukkaniConnectionString %>
SelectCommand=SELECT [KategoriId], [Adi]
FROM [Kategoriler] ORDER BY [KategoriId]>
</asp:SqlDataSource>
<asp:Panel ID=pnlSepet runat=server>
<br />
<br />
DVDDukkani.com 207

<asp:DataList ID=dlSepet runat=server


Font-Bold=True Font-Size=X-Small OnItemDataBound=dlSepet_
ItemDataBound Width=150px BorderColor=#E0E0E0
BorderStyle=Solid BorderWidth=1px>
<ItemTemplate>
<table style=width: 100%>
<tr>
<td align=left
width=200>
<asp:Label
ID=lblFilm runat=server Text=<%# Eval(FilmAdi) %>></asp:
Label></td>
<td align=right
width=35>
<asp:Label
ID=lblAdet runat=server Text=<%# Eval(Adet) %>></asp:
Label></td>
<td align=right
width=50>
<asp:Label
ID=lblToplam runat=server Text=<%# Eval(SatirToplam,{0:
N}) %>></asp:Label></td>
</tr>
</table>
</ItemTemplate>
<HeaderTemplate>
<table style=width: 100%>
<tr>
<td align=center
width=200>
Film</td>
<td align=center
width=35>
Adet</td>
<td align=center
width=50>
Fiyat</td>
</tr>
</table>
</HeaderTemplate>
<FooterTemplate>
<div style=text-align: right>
<table style=width: 100%>
<tr>
<td style=width:
100%>
208 Proje 3

<asp:Label
ID=Label1 runat=server Text=Toplam : ></asp:Label>
<asp:Label
ID=lblToplam runat=server Text=<%# genelToplam %>></asp:
Label></td>
</tr>
</table>
</div>
<asp:LinkButton ID=LinkButton1
runat=server OnClick=LinkButton1_Click>Sepeti Gster</asp:
LinkButton>
<br />
<asp:LinkButton ID=LinkButton2
runat=server OnClick=LinkButton2_Click>Sepeti Onayla</asp:
LinkButton>
</FooterTemplate>
</asp:DataList>
<asp:Label ID=lblBosBilgi runat=server
Visible=False></asp:Label></asp:Panel>
</ul>
</div>

<div id=content>
<asp:ContentPlaceHolder ID=ContentPlaceHolder1
runat=server>
</asp:ContentPlaceHolder>
<div id=footer>
<p>
Copyright &copy; 2007 Dvd Dukkan&#305;</
p>
</div>
</div>


<div id=content-side-2>
<p>

</p>
<p>
</p>
<p>
<bewise:flashcontrol id=FlashControl1
runat=server height=100px
movieurl=~/Resimler/Untitled-7.swf
width=100px></bewise:flashcontrol></p>
</div>
DVDDukkani.com 209

</div>
</form>
</body>
</html>

Liste 3.34: ana.master dosyas html tasarm.

Web uygulamalarnza Entity ve Facade projelerini referans olarak ekleyin.Uygulama ierisindeki


web.config dosyasna kullanlmas gereken connection string iin gerekli eklemeyi yapn.

<add name=DvdDukkaniConStr connectionString=server=.;database=


DvdDukkani;Integrated_Security=SSPI/>

Yaplan tasarmn grsel kts ekil 3.29da gsterilmektedir.

ekil 3.29: ana.master dosyas tasarm grnm.

Sepete atlacak rn bilgilerini tutabilmek iin uygulamaya Urun isminde Class ekleyin. Eklenen
Classn App_Code dosyasna eklenmesi hakknda bir uyar alacaksnz. Uyary onaylayp de-
vam edin.

using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

public class Urun


{
public Urun()
210 Proje 3

{
}

private int _FilmId;


public int FilmId
{
get { return _FilmId; }
set { _FilmId = value; }
}
private string _FilmAdi;

public string FilmAdi


{
get { return _FilmAdi; }
set { _FilmAdi = value; }
}
private int _Adet;

public int Adet


{
get { return _Adet; }
set { _Adet = value; }
}
private decimal _Birimfiyat;

public decimal Birimfiyat


{
get { return _Birimfiyat; }
set { _Birimfiyat = value; }
}
private decimal _SatirToplam;

public decimal SatirToplam


{
get { return _SatirToplam; }
set { _SatirToplam = value; }
}
}

Liste 3.35: Urun.cs.

Eklenen master dosyasndaki yaplacak ilemleri Liste 3.36daki ekilde yazn.

protected void Page_Load(object sender, EventArgs e)


{
this.PreRender += new EventHandler(ana_PreRender);
DVDDukkani.com 211

void ana_PreRender(object sender, EventArgs e)


{
if (HttpContext.Current.User.Identity.IsAuthenticated)
{
lnkDurum.Text = HttpContext.Current.User.Identity.
Name;

if (Session[sepet] != null)
{
List<Urun> sepet = Session[sepet] as List<Urun>;

lblBosBilgi.Visible = false;
dlSepet.DataSource = sepet;
dlSepet.DataBind();
}
else
{
lblBosBilgi.Visible = true;
lblBosBilgi.Text = Sepetiniz Henz Bo;
}
lnkCikis.Visible = true;
}
else
{
lnkDurum.Text = Giri Yapn;
pnlSepet.Visible = false;
lnkCikis.Visible = false;
}
}
protected void lnkDurum_Click(object sender, EventArgs e)
{
if (!HttpContext.Current.User.Identity.IsAuthenticated)
FormsAuthentication.RedirectToLoginPage();
else
{
Response.Redirect(Bilgilerim.aspx?Email= + lnkDurum.
Text);
}
}
decimal toplamFiyat = 0;
protected string genelToplam = ;
protected void dlSepet_ItemDataBound(object sender,
DataListItemEventArgs e)
212 Proje 3

{
if (e.Item.DataItem != null)
{
Urun u = e.Item.DataItem as Urun;
toplamFiyat += u.SatirToplam;

genelToplam = toplamFiyat.ToString(N);
}
}
protected void lnkSepetGoster_Click(object sender, EventArgs
e)
{
Response.Redirect(Sepet.aspx);
}
protected void lnkSepetOnayla_Click(object sender, EventArgs
e)
{
Response.Redirect(SepetOnay.aspx);
}
protected void lnkCikis_Click(object sender, EventArgs e)
{
FormsAuthentication.SignOut();
Response.Redirect(Default.aspx);
}

Liste 3.36: Ana.master dosyas metodlar.

Kullanclarn giri yapmalarn salayacak olan Login.aspx sayfasn uygulamaya ekleyin. Uygu-
lamaya yeni bir sayfa eklerken master page setirmeyi unutmayn. Kullanclarn kayt olmalarn
salayacak olan bu sayfa iin Liste 3.37deki html tasarmn yapn.

<%@ Page Language=C# MasterPageFile=~/ana.master


AutoEventWireup=true CodeFile=Login.aspx.cs Inherits=Login
Title=Untitled Page %>
<asp:Content ID=Content1 ContentPlaceHolderID=ContentPlaceHold
er1 Runat=Server>
<table>
<tr>
<td style=width: 100px>
E-Mail</td>
<td style=width: 100px>
<asp:TextBox ID=txtEmail runat=server></asp:
TextBox></td>
<td style=width: 100px>
<asp:RequiredFieldValidator ID=rfvKullaniciAdi
runat=server ControlToValidate=txtEmail
DVDDukkani.com 213

ErrorMessage=E-Mail Bo Geilemez SetFocusOn


Error=True>*</asp:RequiredFieldValidator></td>
</tr>
<tr>
<td style=width: 100px>
ifresi</td>
<td style=width: 100px>
<asp:TextBox ID=txtSifre runat=server
TextMode=Password></asp:TextBox></td>
<td style=width: 100px>
<asp:RequiredFieldValidator ID=RequiredFieldVali
dator2 runat=server ControlToValidate=txtSifre
ErrorMessage=rfvSifre SetFocusOnError=True
>*</asp:RequiredFieldValidator></td>
</tr>
<tr>
<td style=width: 100px>
</td>
<td style=width: 100px>
<asp:LinkButton ID=lbGiris runat=server
OnClick=lbGiris_Click>Giri</asp:LinkButton></td>
<td style=width: 100px>
</td>
</tr>
<tr>
<td style=width: 100px>
</td>
<td style=width: 100px>
<asp:Label ID=lblHata runat=server
ForeColor=Red Text=Label Visible=False></asp:Label></td>
<td style=width: 100px>
</td>
</tr>
</table>
</asp:Content>

Liste 3.37: Login.aspx sayfas html tasarm.

Yaplan tasarm sonucunda ortaya kan ekran grnts ekil 3.30da verilmitir.
214 Proje 3

ekil 3.30: Login.aspx sayfa tasarm grnm.

Giri yapmay salamak iin Login.aspx sayfasnn gerekli metodlarn yazn.

SqlConnection cn = new SqlConnection(WebConfigurationManager.


ConnectionStrings[DvdDukkaniConStr].ConnectionString);
protected void lbGiris_Click(object sender, EventArgs e)
{
SqlCommand cmd = new SqlCommand(Select UyeId from Uyeler
where Email=@Email and Sifre=@Sifre and Aktivasyon=1, cn);
cmd.Parameters.AddWithValue(@Email, txtEmail.Text);
cmd.Parameters.AddWithValue(@Sifre, txtSifre.Text);

int? giris = 0;
try
{
cn.Open();
string s = cmd.ExecuteScalar().ToString();
if (!string.IsNullOrEmpty(s))
{
giris = Convert.ToInt32(s);
Session[UyeId] = giris;
}
else
{
giris = 0;
}

if (giris == 0)
{
lblHata.Visible = true;
lblHata.Text = Yanl Kullanc Ad veya ifre;
}
else
DVDDukkani.com 215

{
FormsAuthentication.RedirectFromLoginPage(txtEmai
l.Text, false);
}
}
catch (SqlException ex)
{
throw ex;
}
finally
{
cn.Close();
}

Liste 3.38: Login.aspx sayfas lbGiris_Click olay.

dev: Kullanclarn kayt olabilmelerini salamak iin YeniUye.aspx sayfasn uygulama ekleyin
ve kullanclarn kayt olmalarn salayn.

Kullanclar karlacayak olan default.aspx sayfasn uygulamaya ekleyin. Bu formun ierisinde


rastgele dvd gsterin. Dvd gsterirken dikkat edilmesi gereken nokta sata kacak rnlerin
onayl olmas ve satta olmasdr.

<%@ Page Language=C# MasterPageFile=~/ana.master


AutoEventWireup=true CodeFile=Default.aspx.cs Inherits=_
Default Title=Untitled Page %>
<asp:Content ID=Content1 ContentPlaceHolderID=ContentPlaceHold
er1 Runat=Server>
<asp:DataList ID=DataList1 runat=server CellPadding=4
DataKeyField=FilmId ItemStyle-Wrap=true
DataSourceID=SqlDataSource2 ForeColor=#333333
RepeatColumns=3 AlternatingItemStyle-Wrap=true >
<FooterStyle BackColor=#990000 Font-Bold=True
ForeColor=White />
<AlternatingItemStyle BackColor=White />
<ItemStyle BackColor=#FFFBD6 ForeColor=#333333 />
<SelectedItemStyle BackColor=#FFCC66 Font-Bold=True
ForeColor=Navy />
<HeaderStyle BackColor=#990000 Font-Bold=True
ForeColor=White />
<ItemTemplate>
<table style=width: 100%>
<tr>
<td align=center colspan=2>
<img height=150 src=Resimler/
Afisler/<%# Eval(Afis) %> />
<br />
<a href=filmdetay.aspx?film=<%#
Eval(FilmId) %>>
216 Proje 3

<asp:Label ID=AdiLabel
runat=server Text=<%# Eval(Adi) %>></asp:Label></a></td>
</tr>
<tr>
<td colspan=2 rowspan=2>
</td>
</tr>
<tr>
</tr>
</table>
</ItemTemplate>
</asp:DataList><asp:SqlDataSource ID=SqlDataSource2
runat=server ConnectionString=<%$ ConnectionStrings:
DvdDukkaniConnectionString %>
SelectCommand=select Top 5 * from filmler order by
filmId desc ></asp:SqlDataSource>
<h1>Sizin iin setiklerimiz</h1>
<asp:DataList ID=DataList2 runat=server
DataKeyField=FilmId DataSourceID=SqlDataSource1 Width=100%>
<ItemTemplate>
<table style=width: 100%>
<tr>
<td rowspan=3 style=width: 48px>
<img height=150 src=Resimler/
Afisler/<%# Eval(Afis) %> width=110 /></td>
<td valign=top align=left >
<a href=filmdetay.aspx?film=<%#
Eval(FilmId) %>>
<asp:Label ID=AdiLabel1
runat=server Text=<%# Eval(Adi) %>></asp:Label></td>
</tr>
<tr>
<td valign=top>
<asp:Label ID=Label1 runat=server
Text=<%# Eval(Ozet) %>></asp:Label></td>
</tr>
<tr>
</tr>
</table>
</ItemTemplate>
</asp:DataList><asp:SqlDataSource ID=SqlDataSource1
runat=server ConnectionString=<%$ ConnectionStrings:
DvdDukkaniConnectionString %>
SelectCommand=SELECT top 10 [Afis], [Adi], [FilmId],
Ozet FROM [Filmler] WHERE (([SatistaMi] = @SatistaMi) AND
([OnaylandiMi] = @OnaylandiMi)) order by filmId desc>
<SelectParameters>
DVDDukkani.com 217

<asp:Parameter DefaultValue=false Name=SatistaMi


Type=Boolean />
<asp:Parameter DefaultValue=false Name=OnaylandiMi
Type=Boolean />
</SelectParameters>
</asp:SqlDataSource>
<br />
<br />
</asp:Content>

Liste 3.39: Default.aspx sayfasnn html tasarm.

ekil 3.31: Default.aspx tasarm grnm.

Kategorilere tkland zaman kategorilere gre filmleri listeleyecek olan kategoridetay.aspx say-
fasn ekleyin. QueryString ile gelen kategoriId bilgisine gre filmleri listeleyin. Liste 3.40da belir-
tildii gibi tasarm yapn.

<%@ Page Language=C# MasterPageFile=~/ana.master


AutoEventWireup=true CodeFile=KategoriDetay.aspx.cs
Inherits=KategoriDetay Title=Untitled Page %>

<asp:Content ID=Content1 ContentPlaceHolderID=ContentPlaceHold


er1 runat=Server>
<asp:DataList ID=DataList1 runat=server CellPadding=4
DataKeyField=FilmId
DataSourceID=SqlDataSource2 ForeColor=#333333
RepeatColumns=5 Width=100%>
<FooterStyle BackColor=#990000 Font-Bold=True
ForeColor=White />
<AlternatingItemStyle BackColor=White />
<ItemStyle BackColor=#FFFBD6 ForeColor=#333333 />
<SelectedItemStyle BackColor=#FFCC66 Font-Bold=True
ForeColor=Navy />
218 Proje 3

<HeaderStyle BackColor=#990000 Font-Bold=True


ForeColor=White />
<ItemTemplate>
<table style=width: 100%>
<tr>
<td align=center colspan=2>
<img height=150 src=Resimler/
Afisler/<%# Eval(Afis) %> width=110 />
<br />
<a href=filmdetay.aspx?film=<%#
Eval(FilmId) %>>
<asp:Label ID=AdiLabel
runat=server Text=<%# Eval(Adi) %>></asp:Label></a></td>
</tr>
<tr>
<td colspan=2 rowspan=2>
</td>
</tr>
<tr>
</tr>
</table>
</ItemTemplate>
</asp:DataList>
<asp:SqlDataSource ID=SqlDataSource2 runat=server
ConnectionString=<%$ ConnectionStrings:DvdDukkaniConnectionString
%>
SelectCommand=SELECT [Adi], [FilmId], [KategoriId],
[Ozet], [Sure], [DilId], [YapimciFirmaId], [Yil], [Afis],
[SatistaMi], [OnaylandiMi], [TeminEdilenTedarikciId] FROM [vw_
FilmDetay] WHERE ([KategoriId] = @KategoriId)>
<SelectParameters>
<asp:QueryStringParameter Name=KategoriId QueryStri
ngField=Kategori Type=Int32
DefaultValue=1 />
</SelectParameters>
</asp:SqlDataSource>
</asp:Content>

Liste 3.40: KategoriDetay.aspx sayfas html tasarm.

Html tasarm yaplan sayfann grsel kts ekil 3.32de gsterilmitir.


DVDDukkani.com 219

ekil 3.32: KategoriDetay.aspx sayfas tasarm grnm.

Listelenen filmlerin detaylarn gsterecek olan filmdetay.aspx syafasn ekleyin. Bu sayfa filmin
afiini, bulunduu kategorileri, oyuncularn ve ynetmenlerin listesini gsterecek.

<%@ Page Language=C# MasterPageFile=~/ana.master


AutoEventWireup=true CodeFile=filmdetay.aspx.cs
Inherits=filmdetay Title=Untitled Page %>
<asp:Content ID=Content1 ContentPlaceHolderID=ContentPlaceHold
er1 Runat=Server>
<table style=width: 100%>
<tr>
<td rowspan=6 style=width: 104px align=left>
<asp:Image ID=imgAfis runat=server /></td>
<td style=width: 115px>
</td>
<td style=width: 100px>
</td>
</tr>
<tr>
<td style=width: 115px; height: 18px>
<h1><asp:Label ID=lblAd runat=server
Width=250px></asp:Label></h1></td>
<td style=width: 100px; height: 18px>
</td>
</tr>
<tr>
<td style=width: 115px>
</td>
<td style=width: 100px>
</td>
</tr>
<tr>
220 Proje 3

<td colspan=2 rowspan=2>


<asp:Label ID=lblAciklama runat=server
Text=Label></asp:Label></td>
</tr>
<tr>
</tr>
<tr>
<td style=width: 115px>
</td>
<td style=width: 100px>
</td>
</tr>
<tr>
<td >
</td>
<td style=width: 115px>
<asp:Label ID=lblYil runat=server
Text=Label></asp:Label></td>
<td style=width: 100px>
</td>
</tr>
<tr>
<td align=right >
<strong>Oyuncular</strong></td>
<td style=width: 115px>
<asp:Label ID=lblOyuncular runat=server></
asp:Label></td>
<td style=width: 100px>
</td>
</tr>
<tr>
<td align=right >
<strong>Kategoriler</strong></td>
<td style=width: 115px>
<asp:PlaceHolder ID=plKategoriler
runat=server></asp:PlaceHolder>
</td>
<td style=width: 100px>
</td>
</tr>
<tr>
<td align=right >
<strong>Ynetmen</strong></td>
<td style=width: 115px>
DVDDukkani.com 221

<asp:Label ID=lblYonetmen runat=server


Text=Label></asp:Label>&nbsp;
</td>
<td style=width: 100px>
</td>
</tr>
<tr>
<td >
</td>
<td style=width: 115px>
<asp:Label ID=Label7 runat=server></asp:
Label>
<asp:PlaceHolder ID=PlaceHolder3
runat=server></asp:PlaceHolder>
</td>
<td style=width: 100px>
</td>
</tr>
<tr>
<td >
</td>
<td style=width: 115px>
<asp:Label ID=Label8 runat=server></asp:
Label>
<asp:PlaceHolder ID=PlaceHolder4
runat=server></asp:PlaceHolder>
</td>
<td style=width: 100px>
</td>
</tr>
<tr>
<td >
</td>
<td style=width: 115px>
<asp:Label ID=Label9 runat=server></asp:
Label>
<asp:PlaceHolder ID=PlaceHolder5
runat=server></asp:PlaceHolder>
</td>
<td style=width: 100px>
</td>
</tr>
<tr>
<td >
</td>
222 Proje 3

<td style=width: 115px>


</td>
<td style=width: 100px>
</td>
</tr>
<tr>
<td align=right>
<strong>
Adet</strong></td>
<td style=width: 115px>
<asp:TextBox ID=txtAdet runat=server
Width=40px></asp:TextBox></td>
<td style=width: 100px>
<asp:RequiredFieldValidator ID=RequiredFieldVali
dator1 runat=server ControlToValidate=txtAdet
Display=Dynamic ErrorMessage=Adet
Girmelisiniz InitialValue=0 SetFocusOnError=True>*</asp:
RequiredFieldValidator>
<asp:CompareValidator ID=CompareValidator1
runat=server ControlToValidate=txtAdet
Display=Dynamic ErrorMessage=Adet tamsay
olmaldr Operator=DataTypeCheck
SetFocusOnError=True Type=Integer>*</asp:
CompareValidator></td>
</tr>
<tr>
<td >
</td>
<td style=width: 115px>
<asp:ImageButton ID=ImageButton1 runat=server
ImageUrl=~/Resimler/SepeteEkle.gif
OnClick=ImageButton1_Click /></td>
<td style=width: 100px>
</td>
</tr>
</table>
</asp:Content>

Liste 3.41: FilmDetay.aspx html tasarm.

Html tasarm yaplan sayfann grsel kts ekil 3.33de gsterilmitir.


DVDDukkani.com 223

ekil 3.33: FilmDetay.aspx sayfas tasarm.

Gelen filmin detayn grntlemek iin Page_Load olayn ve sepete ekleme metodunu ekil
3.33deki ekilde yazn.

protected void Page_Load(object sender, EventArgs e)


{
if (Request.QueryString[film] == null)
{
Response.Redirect(default.aspx);
}
int filmId = 0;
int.TryParse(Request.QueryString[film], out filmId);
if (filmId > 0)
{
DvdDukkani.Entity.Film filmDetay = DvdDukkani.
DataLayer.Film.FilmDetay(filmId);
lblAd.Text = filmDetay.Adi;
lblAciklama.Text = filmDetay.Ozet;
imgAfis.ImageUrl = Resimler/Afisler/ + filmDetay.
Afis;
lblYil.Text = filmDetay.Yil.ToString();

string oyuncular = DvdDukkani.DataLayer.FilmOyuncu.


FilmOyuncuGetir(filmId);
lblOyuncular.Text = oyuncular;

List<DvdDukkani.Entity.Kategori> kategoriler =
DvdDukkani.DataLayer.FilmKategori.FilmKategoriGetir(filmId);

foreach (DvdDukkani.Entity.Kategori k in kategoriler)


224 Proje 3

{
HyperLink hl = new HyperLink();
hl.ID = hlKategori + k.KategoriId;
hl.NavigateUrl = ~/Kategoridetay.aspx?Kategori=
+ k.KategoriId;
hl.Text = k.Adi+<br/>;
plKategoriler.Controls.Add(hl);
}

string yonetmenler =DvdDukkani.DataLayer.FilmYonetmen.


FilmYonetmenGetir(filmId);
lblYonetmen.Text = yonetmenler;
}
}

SqlConnection cn = new SqlConnection(System.Web.Configuration.


WebConfigurationManager.ConnectionStrings[DvdDukkaniConStr].
ConnectionString);
protected void ImageButton1_Click(object sender,
ImageClickEventArgs e)
{
int filmId = 0;
int.TryParse(Request.QueryString[film], out filmId);
if (filmId > 0)
{
List<Urun> sepet = null;
if (Session[sepet] != null)
{
sepet = Session[sepet] as List<Urun>;
}
else
{
sepet = new List<Urun>();
}

SqlCommand cmd = new SqlCommand(Select Top 1 ucret


from filmtipucret where filmId=@FilmId,cn);
cmd.Parameters.AddWithValue(@FilmId, filmId);

cn.Open();
decimal birimFiyat = Convert.ToDecimal(cmd.
ExecuteScalar());

Urun u = new Urun();


u.FilmId = filmId;
DVDDukkani.com 225

u.FilmAdi = lblAd.Text;
u.Birimfiyat = birimFiyat;

bool varMi=false;

foreach(Urun urun in sepet)


{
if (urun.FilmId == filmId)
{
u = urun;
varMi=true;
break;
}
}

if (varMi)
{
u.Adet += Convert.ToInt32(txtAdet.Text);
}
else
{
u.Adet = Convert.ToInt32(txtAdet.Text);
sepet.Add(u);
}
u.SatirToplam = u.Adet * u.Birimfiyat;

Session[sepet] = sepet;

if (!HttpContext.Current.User.Identity.
IsAuthenticated)
{
Session[tmpUrun] = u;
FormsAuthentication.RedirectToLoginPage();
return;
}

Response.Redirect(Default.aspx);
}
}

Liste 3.42: FilmDetay.aspx.cs metodlar.

Kullanclarn kendi kiisel bilgilerini gncelleyebilmelerini salamak iin bilgilerim.aspx sayfas


ekleyin. Bu sayfa yenin temel bilgilerini gncellemesini salayacak. Liste 3.43deki tasarm ya-
pn.
226 Proje 3

<%@ Page Language=C# MasterPageFile=~/ana.master


AutoEventWireup=true CodeFile=Bilgilerim.aspx.cs
Inherits=Bilgilerim Title=Untitled Page %>
<asp:Content ID=Content1 ContentPlaceHolderID=ContentPlaceHold
er1 Runat=Server>
<table style=width: 359px>
<tr>
<td style=width: 100px>
sim</td>
<td style=width: 100px>
<asp:TextBox ID=txtIsim runat=server Validati
onGroup=Sayfa1></asp:TextBox>
</td>
<td style=width: 100px>
<asp:RequiredFieldValidator ID=rfvIsim
runat=server ControlToValidate=txtIsim
ErrorMessage=sim Bo Geilemez
SetFocusOnError=True ValidationGroup=Sayfa1>*</asp:
RequiredFieldValidator>
</td>
</tr>
<tr style=color: #666666>
<td style=width: 100px>
Soyisim</td>
<td style=width: 100px>
<asp:TextBox ID=txtSoyIsim runat=server Valid
ationGroup=Sayfa1></asp:TextBox>
</td>
<td style=width: 100px>
<asp:RequiredFieldValidator ID=rfvSoyisim
runat=server ControlToValidate=txtSoyIsim
ErrorMessage=Soyisim Bo Geilemez
SetFocusOnError=True ValidationGroup=Sayfa1>*</asp:
RequiredFieldValidator>
</td>
</tr>
<tr style=color: #666666>
<td style=width: 100px>
E-Mail</td>
<td style=width: 100px>
<asp:TextBox ID=txtEMail runat=server Validat
ionGroup=Sayfa1></asp:TextBox>
</td>
<td style=width: 100px>
<asp:RequiredFieldValidator ID=rfvEMail
runat=server ControlToValidate=txtEMail
DVDDukkani.com 227

Display=Dynamic ErrorMessage=E-Mail Bo
Geilemez SetFocusOnError=True
ValidationGroup=Sayfa1>*</asp:
RequiredFieldValidator>
<asp:RegularExpressionValidator ID=revEMail
runat=server ControlToValidate=txtEMail
Display=Dynamic ErrorMessage=Geersiz bir
E-Mail girildi SetFocusOnError=True
ValidationExpression=\w+([-+.]\w+)*@\
w+([-.]\w+)*\.\w+([-.]\w+)* ValidationGroup=Sayfa1>*</asp:
RegularExpressionValidator>
</td>
</tr>
<tr style=color: #666666>
<td style=width: 100px>
ifre</td>
<td style=width: 100px>
<asp:TextBox ID=txtSifre runat=server
TextMode=Password ValidationGroup=Sayfa1></asp:TextBox>
</td>
<td style=width: 100px>
<asp:RequiredFieldValidator ID=rfvSifre
runat=server ControlToValidate=txtSifre
ErrorMessage=ifre Bo Geilemez
SetFocusOnError=True ValidationGroup=Sayfa1>*</asp:
RequiredFieldValidator>
</td>
</tr>
<tr>
<td style=width: 100px>
ifre (Tekrar)</td>
<td style=width: 100px>
<asp:TextBox ID=txtSifreTekrar runat=server
TextMode=Password ValidationGroup=Sayfa1></asp:TextBox>
</td>
<td style=width: 100px>
<asp:RequiredFieldValidator ID=rfvSifreTekrar
runat=server ControlToValidate=txtSifreTekrar
Display=Dynamic ErrorMessage=ifre (Tekrar)
Bo Geilemez SetFocusOnError=True
ValidationGroup=Sayfa1>*</asp:
RequiredFieldValidator>
<asp:CompareValidator ID=cvSifre runat=server
ControlToCompare=txtSifre ControlToValidate=txtSifreTekrar
Display=Dynamic ErrorMessage=ifre ile
ifre (Tekrar) ayn olmaldr SetFocusOnError=True
228 Proje 3

ValidationGroup=Sayfa1>*</asp:
CompareValidator>
</td>
</tr>
<tr>
<td style=width: 100px>
Gizli Soru</td>
<td style=width: 100px>
<asp:TextBox ID=txtGizliSoru runat=server></
asp:TextBox>
</td>
<td style=width: 100px>
</td>
</tr>
<tr>
<td style=width: 100px>
Gizli Cevap</td>
<td style=width: 100px>
<asp:TextBox ID=txtGizliCevap runat=server></
asp:TextBox>
</td>
<td style=width: 100px>
</td>
</tr>
<tr>
<td style=width: 100px>
</td>
<td style=width: 100px>
&nbsp;</td>
<td style=width: 100px>
</td>
</tr>
</table>
<br />
<table>
<tr>
<td style=width: 100px>
Aklama</td>
<td style=width: 100px>
<asp:TextBox ID=txtAciklama runat=server></
asp:TextBox>
</td>
<td style=width: 100px>
</td>
</tr>
DVDDukkani.com 229

<tr>
<td style=width: 100px>
Adres</td>
<td style=width: 100px>
<asp:TextBox ID=txtAdres runat=server
Height=100px TextMode=MultiLine></asp:TextBox>
</td>
<td style=width: 100px>
</td>
</tr>
<tr>
<td style=width: 100px>
Telefon</td>
<td style=width: 100px>
<asp:TextBox ID=txtTelefon runat=server></
asp:TextBox>
</td>
<td style=width: 100px>
</td>
</tr>
<tr>
<td style=width: 100px>
Yedek Kii</td>
<td style=width: 100px>
<asp:TextBox ID=txtYedek runat=server></asp:
TextBox>
</td>
<td style=width: 100px>
</td>
</tr>
<tr>
<td style=width: 100px>
Ilce</td>
<td style=width: 100px>
<asp:DropDownList ID=ddlIlce runat=server>
</asp:DropDownList>
</td>
<td style=width: 100px>
</td>
</tr>
<tr>
<td style=width: 100px>
</td>
<td style=width: 100px>
230 Proje 3

&nbsp;<asp:LinkButton ID=LinkButton1
runat=server OnClick=LinkButton1_Click1>Gncelle</asp:
LinkButton></td>
<td style=width: 100px>
</td>
</tr>
</table>

<asp:UpdatePanel ID=UpdatePanel1 runat=server>
<ContentTemplate>
<asp:Panel ID=pnlIslem runat=server
Visible=false>
&nbsp;&nbsp;<br />
<br />
<asp:Timer ID=Timer1 runat=server Enabled=False
Interval=1000 OnTick=Timer1_Tick>
</asp:Timer>
<asp:Label ID=lblBilgi runat=server
Text=Label></asp:Label><br />
<asp:Label ID=lblSayac runat=server Font-
Bold=True Font-Size=XX-Large ForeColor=Red
Text=5></asp:Label></asp:Panel>
&nbsp;
</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTrigger ControlID=LinkButton1
EventName=Click />
</Triggers>
</asp:UpdatePanel>

</asp:Content>

Liste 3.43: Bilgilerim.aspx sayfas html tasarm.

Tasarm yaplan bilgilerim.aspx sayfas dizayn grnm ekil 3.34de verilmitir.

Bilgilerim.aspx sayfasnda gerekli ilemleri yapan metodlar yazn. (Liste 3.44)

protected void Page_Load(object sender, EventArgs e)


{
if (!this.IsPostBack)
{
if (Request.QueryString[EMail] == null)
Response.Redirect(Default.aspx);
else
{
string email = Request.QueryString[EMail];
DVDDukkani.com 231

ekil 3.34: Bilgilerim.aspx tasarm grnm.

DvdDukkani.Entity.UyeAdres uyeadres = null;


DvdDukkani.Entity.Uye uye = DvdDukkani.DataLayer.
Uye.UyeBul(email, out uyeadres);

if (uye != null && uyeadres != null)


{
txtIsim.Text = uye.Ad;
txtSoyIsim.Text = uye.Soyad;
txtEMail.Text = uye.Email;
txtGizliCevap.Text = uye.GuvenlikCevabi;
txtGizliSoru.Text = uye.GuvenlikSorusu;
txtSifre.Text = uye.Sifre;
txtSifreTekrar.Text = uye.Sifre;

txtTelefon.Text = uyeadres.Telefon;
txtYedek.Text = uyeadres.
TeslimatiAlacakYedekKisi;
txtAdres.Text = uyeadres.Adres;
txtAciklama.Text = uyeadres.TanimlamaAdi;
}
}
this.IlceGetir();
}
}

void IlceGetir()
{
SqlCommand cmd = new SqlCommand(Select * from Ilceler,
cn);
DataTable dtIlce = new DataTable();
232 Proje 3

SqlDataAdapter da = new SqlDataAdapter(cmd);


da.Fill(dtIlce);
ddlIlce.DataSource = dtIlce;
ddlIlce.DataTextField = Adi;
ddlIlce.DataValueField = IlceId;
ddlIlce.DataBind();
}

protected void LinkButton1_Click(object sender, EventArgs e)


{
Response.Redirect(Default.aspx);
}
SqlConnection cn = new SqlConnection(WebConfigurationManager.
ConnectionStrings[DvdDukkaniConStr].ConnectionString);

protected void Timer1_Tick(object sender, EventArgs e)


{
lblSayac.Text = (Convert.ToInt32(lblSayac.Text) -
1).ToString();

if (Convert.ToInt32(lblSayac.Text) <= 0)
Response.Redirect(Default.aspx);
}
protected void LinkButton1_Click1(object sender, EventArgs e)
{
DvdDukkani.Entity.Uye u = new DvdDukkani.Entity.Uye();
u.Ad = txtIsim.Text;
u.Email = txtEMail.Text;
u.GuvenlikCevabi = txtGizliCevap.Text;
u.GuvenlikSorusu = txtGizliSoru.Text;
u.Sifre = txtSifre.Text;
u.Soyad = txtSoyIsim.Text;

DvdDukkani.Entity.UyeAdres ua = new DvdDukkani.Entity.


UyeAdres();
ua.Adres = txtAdres.Text;
ua.IlceId = Convert.ToInt32(ddlIlce.SelectedValue);
ua.TanimlamaAdi = txtAciklama.Text;
ua.Telefon = txtTelefon.Text;
ua.TeslimatiAlacakYedekKisi = txtYedek.Text;

DvdDukkani.DataLayer.Uye.UyeGuncelle(u,ua);

lblBilgi.Text = 5 saniye ierisinde anasayfaya


ynlendirileceksiniz!!!<br/><br/>;
DVDDukkani.com 233

lblSayac.Text = 5;
pnlIslem.Visible = true;
Timer1.Enabled = true;
}

Liste 3.44: Bilgilerim.aspx.cs dosyas metodlar.

Uygulama: Kullanclarn birden fazla adres eklemelerini salayacak, bu adreslere isim verebile-
cekleri adreslerim.aspx sayfasn yapn.

Kullancnn sepetini grebilecei, deiiklik yapaca veya rn kaldraca Sepet.aspx sayfasn


uygulamaya ekleyin.
A Terimler
Szl
Teknik Terimler Szl
A
$PARTITION: Belirli bir blm fonksiyonu iin bir deerin blm numarasn dndren bir fonk-
siyon.

.NET Framework 2.0 Configuration arac: .NET Framework tarafndan salanan, uygulamala-
rn ve assemblylerin grsel konfigrasyonuna ve ynetimine imkan veren bir ara.

abstract class (soyut snf): Sadece tretilmi bir class iin bir base class olarak kullanlabilecek
bir class. Bir abstract classn instance oluturulamaz. Bu tip classda NotInheritable tanmlayc-
s kullanlr (C# iin bu tanmlayc abstractdr).

access control list ACL (eriim kontrol listesi): Genellikle bir Discretionary Access Control
List (DACL) iin kullanlan bir terim. Bir nesne zerinde atanan veya reddedilen eriim izinleri iin
kullanclar ve gruplar tanmlayan bir yetkilendirme kstlama mekanizmas.

access keys (eriim tular): Belirli bir kontrol iin bir klavye ksayolunu tanmlayan, birden fazla
tu basnn bir kombinasyonu.

access rule (eriim kural): Verilen veya reddedilen bir izin, bir kullanc veya roln kombinas-
yonu.

accessibility aid (eriim yardm): Windows uygulamalarn kullanan grsel, iitsel veya hareket
engelli kullanclara yardm eden bir uygulama. Windows kurulurken varsaylan durumda Acces-
sories blmne kurulan bir uygulama grubu.

accessible design (eriilebilir tasarm): Uygulamann farkl becerilere sahip engelli kiiler tara-
fndan eriilebilir olmasna imkan vermek zere belirli ilkelere uyacak ekilde bir kullanc arayz
tasarlama ilkesi.

ACID zellikleri: Bir transactionn drt temel zelliini tanmlayan bir ksaltma; atomicity (atomik-
lik), consistency (tutarllk), isolation (izolasyon) ve durability (dayankllk).

activation (etkinletirme): Mesajlar kuyrua yerletirildiinde stored procedurelerin otoma-


tik olarak balatld sre. Bu sre ayn zamanda, ykle uyum salamak iin bir tek stored
proceduren m yoksa birden fazla proceduren m balatlacan da kontrol eder.

active log (etkin gnlk): Bir transaction logunun commit edilmi ama henz yedeklenmemi
transactionlar ieren ksm. Ayrca ak transactionlar da ierir.

activity diagram (etkinlik diyagram): Bir UML ak tablosu gibi bir ema. Birbiri ardna mey-
dana gelen eylemleri, bu eylemlere yol aan kararlar ve paralel olarak meydana gelen eylemleri
gsterir. Bir etkinlik emas, ticari i aklarn ve karmak algoritmalar modellemek iin kulla-
nldr.

activity diagram (etkinlik diyagram): UML ak tablosu gibi bir ema. Birbiri ardna meydana
gelen eylemleri, bu eylemlere yol aan kararlar ve paralel olarak meydana gelen eylemleri gste-
rir. Bir etkinlik emas, ticari i aklarn ve karmak algoritmalar modellemek iin kullanldr.

adaptive rendering: Bir kontroln, web sayfasn talep eden taraycya gre frakl render edil-
mesi.

ADO.NET: ADO, COM dnemi teknolojisinde kullanlan Active Data Objects anlamndadr. ADO.
NET, bu teknolojinin managed koda doal evrimidir. System.Data namespaceinde bulunabilir.
(Veri kaynaklarna balanmak iin kullanlr.)
238 Ek - A

Advanced Encryption Standard (AES): 128 ila 256 bit anahtar boyutlarn kullanan simetrik bir
kriptolama algoritmas olan Rijndael ile e anlamldr.

agent: Yk, stres veya performans testini altran bir bilgisayar. Genellikle bir tek agent birden
fazla threadi altrr. Her thread, testlerin tamamn altrr.

aggregate function (topluluk fonksiyonu): Her bir deer yerine satr setleri zerinde alan
bir fonksiyon.

aggregation (birletirme): Bir nesnenin yelerinin, kapsayan bir nesne araclyla aa karl-
d nesne ynelimli programlama kavramdr.

alert (uyar): Bir operatre haber vermek veya bir ii altrmak gibi bir cevab tetikleyen bir
sistem durumu.

alerts (uyarlar): Belirli sistemlere ve/veya bireylere gnderilen belirli olaylarn bildirimi.

alignment (hizalama): Bir tablonun tm indeksleri ve tablonun kendisi ayn blmleme fonksiyo-
nu kullanlarak blmlendiinde meydana gelir.

AppDomain: .NETte AppDomain nesnesi, iinde uygulamalarn altrld izole edilmi bir uy-
gulama domainini temsil eder. zolasyon, bir AppDomainindeki srelerin ikinci bir AppDomain
iin ayrlan bellee dorudan eriememesinden kaynaklanr.

application caching (uygulama n belleine alma): Daha sonra dorudan bellekten elde et-
mek zere, nesnelerin Cache nesnesinde programsal olarak depolanmas iin bir teknik.

application container (uygulama konteyneri): Uygulamanzn hostu veya birincil biimi. Bir
uygulama konteyneri, navigasyon ve pencere ynetimi gibi servisleri salar.

application domain (uygulama domaini): Birden fazla assemblynin bir tek sre iinde al-
malarna izin verirken, bu assemblylerin bellek (ram) zerinde birbirlerinin belleklerine dorudan
erimelerini engelleyen mantksal bir yapdr.

application flow-logic diagram (uygulama ak mant emas): Bir uygulamay meydana


getiren bileenleri ve bu bileenlerin birbiriyle ilikilerini aklayan ema.

application library (uygulama ktphanesi): zmnzde kullanabileceiniz bileenler k-


mesi.

application scope (uygulama kapsam): alma zamannda salt okunur ayarlar. (Uygulama
ayarlarndan (Application Settings) bahsederken).

application server (uygulama sunucusu): Sunucu kodunuzu (genellikle ASP.NET ve .NET


Framework) altran sunucu yazlm. Internet Information Server (IIS), bir uygulama sunucu-
sudur.

application setting (uygulama ayar): Uygulamann okuduu, yazd veya hem okuyup, hem
de yazd zel bir ayar.

application settings (uygulama ayarlar): Uygulamay altran her kullanc iin mevcut olan
ayarlar. Genellikle bu ayarlar veritaban balantlarn, versiyon bilgilerini ve web servisi u nok-
talarn ierir.

application state (uygulama durumu): Web uygulamasndaki tm sayfalardan eriilebilen glo-


bal bir depolama mekanizmas.

application URL (uygulama URLi): Uygulama iin benzersiz bir konumu tanmlamak zere
kullanlan bir uygulama URLi (Uniform Resource Locator).
Terimler Szl 239

assembly evidence (assembly kant): Assemblynin kimliini (hash, yaymc veya gl ad


gibi) tanmlayan, assembly tarafndan sunulan kant.

assertion (iddia): Bir noktada true olmasn beklediiniz bir koulu temsil eder. Koul true deil-
se, iddia baarsz olur.

asymmetric algorithm (asimetrik algoritma): Public key ifrelemesi olarak da bilinen bu metot,
bir anahtar iftini ierir. Public key (birden fazla partyye datlabilir) ile imzalanan mesajlar sade-
ce private key ile zlebilir.

asymmetric encryption (asimetrik ifreleme): Verileri ifrelemek ve zmek iin ayr private ve
public keyleri kullanan bir ifreleme teknii. Public key ifreleme olarak da bilinir.

asymmetric key (asimetrik anahtar): Private keyi ve buna karlk gelen public keyi birletirir.
Bir asimetrik anahtar, simetrik anahtardan daha gldr ama ayn zamanda daha kaynak yo-
unlukludur. (Bkz. sertifika; simetrik anahtar.)

asynchronous (asenkron): lemenin meydana gelmesini engellemeyen bir arma (asenkron


bir ar, ileme meydana gelirken programn almasn engellemez). Ayn anda birden fazla
ilem yaplmasn salayan mekanizmadr.

asynchronous processing (asenkron ileme): Dier alma gerekletirilirken balatlan ve


almaya braklan bir ilem. lemin balatcs ilemin zamanlamasn veya altrlmasn kon-
trol etmez.

Asynchronous Programming Model: Belirli metotlarn asenkron altrlmasn salamak ze-


re Begin/End metot iftlerini kullanan zel tiplerdeki .NET snflaryla alma deseni. rnein:
BeginReceive, EndReceive

attribute: .NET Frameworkte, kodun deklaratif olarak balanmasna imkan veren zel bir class
tipi.

authentication (kimlik denetimi): Oturum amak iin gelen bir talebin gndericisinin kimliini
dorulama teebbs sreci. Kimlik denetimi yaplan gnderici bir bilgisayar program veya bir
bilgisayar kullanan bir kii olabilir.

authorization (yetkilendirme): Bir kullancnn istenen bir kaynaa erimesine izin verildiini
dorulama sreci. Kullancnn rol. rnein; site yneticisi veya normal bir kullanc.

B
backup (yedek): Genellikle ciddi bir veritaban hatas veya bir sistem baarszl sonrasnda
verileri geri yklemek iin kullanlabilecek bir veritaban, dosya grubu, dosya veya transaction log
kopyas.

backup device (yedekleme aygt): Bir yedekleme konumuna nceden tanmlanm bir iareti.
Bir yedekleme aygt, backup komutunun iinde bir manyetik bant veya disk konumunu dinamik
olarak belirtmek yerine, fiziksel konuma bir isim atar ve daha sonra bu isim yeniden kullanlabilir.

backup file (yedekleme dosyas): Veritaban, transaction log veya dosya ve dosya grubu yede-
inin tamamn veya bir ksmn depolayan bir dosya.

backup strategy (yedekleme stratejisi): Mesleki gereksinimleri karlamak zere geri yklene-
bileceinden emin olmak iin, belirli bir veritaban iin kullanlan yedeklerin kombinasyonu. (Bkz.
geri ykleme stratejisi.)

base class (taban snf): Tretilen classn kendisinden temel ilevsellii ald class. Eer Class
B, Class Adan tretilirse, Class A base class olarak kabul edilir ve bu classa, base class denir.
240 Ek - A

base64 encoding (64 tabanl kodlama): kilik (binary) verileri SMTP ve HTTP protokollerinde
aktarm iin uygun bir 7-bit biime eleyen karakter seti kodlamas.

bcp: Bulk Copy Program komut satr yardmc program. SQL Server srecinin dnda alan,
verileri SQL Servera veya SQL Serverdan toplu olarak kopyalayan harici bir program.

best-effort restore: restore komutunun CONTINUE_AFTER_ERROR seeneinin etkinletir-


mesi iin kullanlan genel terim. Bu sre, yedekleme ortamnda hatalar bulunsa bile geri ykleme
ileminin devam etmesini salar.

BinaryFormatter: System.Runtime.Serialization.Formatters.Binary namespaceinde bulunan


bu biimlendirici, sadece .NET Framework tabanl uygulamalar tarafndan okunacak nesnelerin
serialization iin en verimli yoldur.

binding (balama): Belirli bir spesifikasyona uyan bir XML Web metodunu belirtme yntemi veya
herhangi bir datay kontrole balama ilemi.

BindingSource: Bir veri kaynana veri balama kontrollerini (data binding controls) salayan bir
Windows Form bileeni.

black box testing (kara kutu testi): Bir gelitiricinin bir uygulamaya girdi salad ve daha
sonra uygulamann ktsn veya davrann belirli testler iin beklenen sonularla karlatrd
testleri temsil eden bir test tipi. Entegrasyon testleri ve yk testleri bu test tipine rnektir.

BLOB: Bir BLOB, byk bir ikilik dzen (1 0 formatnda) nesnesidir; grafikler, mzik dosyalar,
altrlabilir dosyalar veya ikilik biimde temsil edilen herhangi bir e gibi byk eleri temsil
eden bir byte dizisi.

blocking (engelleme): ok kullancl bir eriim kontrol mekanizmas. SQL Server, birden fazla
kullanc tarafndan eriilebildiinde veri btnln kontrol etmek iin kilitleme mekanizmalarn
kullanr. Veriler dier bir sre tarafndan kilitlendiinde, bir sre verileri talep ederse bir engel-
leme meydana gelir.

Bir deer dndrlene kadar bir threadin kesilmesi.

boundary points (snr noktalar): Bir tablo veya indeks iindeki verilerin nerede blmlere ay-
rldn belirlemek iin kullanlan deerler.

bounds check (snr kontrol): Bir birimin parametresinin snrlarnda nasl altn kontrol
eden bir test. Bir snrn tanm, parametrenin beklenen deerlerine veya parametrenin veri tipine
baldr. Bu snrlarn yaknnda veya tesinde genellikle hatalar meydana gelir.

bounds check (snr kontrol): Bir birimin parametresinin snrlarnda nasl altn kontrol
eden bir test. Bir snrn tanm, parametrenin beklenen deerlerine veya parametrenin veri tipine
baldr. Bu snrlarn yaknnda veya tesinde genellikle hatalar meydana gelir.

boxing: Bir deer tipinin bir referans tipine dntrlmesi; genellikle dolayl olarak meydana
gelir.

broken ownership chain (krlm sahiplik zinciri): Bir nesnenin kullanlmasn engelleyen,
baml nesneler arasndaki bir izin akmas.

B-tree (B aac): zerinde indekslerin ina edildii, dengeli bir aa yaps. B-tree simetrik oldu-
undan, belirli bir deeri bulmak iin bir sorgu ayn miktarda kaynak gerektirir.

buffering (tamponlama): Oynatmaya balamadan nce, akan bir medya dosyasnn nceden
tanmlanm miktarn elde etme eylemi. Tamponlama, geerli ierik oynatlrken gelecekteki ie-
rik elde edildiinden, oynatmann daha przsz grnmesini salar.
Terimler Szl 241

bugs (hatalar): Hatalar veya eksik ya da yanl ilevsellik biiminde grnen uygulama sorunla-
r.

BULK INSERT: Verileri bir SQL Server tablosuna veya grnmne yerletirmek iin kullanlan
bir Transact-SQL komutu.

Bulk-Logged recovery model: Veritaban motorunun SELECT INTO ve BULK INSERT gibi top-
lu ilemleri minimum dzeyde loga kaydettii bir sre. Bu recovery modelinde, bir log yedei
herhangi bir bulk ilemi ierirse, veritaban, zaman iindeki bir noktaya deil, log yedeinin so-
nuna geri yklenebilir. Bulk-Logged recovery model, byk bulk ilemler srasnda geici olarak
kullanlmak zere tasarlanmtr. (Bkz. Full recovery model; Simple recovery model.)

Business Access Layer (BAL): Uygulama iin tm mesleki mant ieren bir veya daha fazla
snf. Mant kendi snf setine ayrmak, mesleki mant ve veri eriimini kullanc arayznden
ayrma srecinin bir parasdr.

business domain (i (business) alan): Mantksal modelinizden ve ORM emasndan tretilen


snflar temsil eden bir domain. Bu snflar, uygulamann birincil i (business) fonksiyonlarn -
zer.

business logic (i (business) mant): Bir bileenin i (business) olaylarna yardm etmek ze-
re veri eriim bileenlerine eklenen herhangi bir ilevsellik.

business requirement (i (business) gereksinim): Proje hissedarlarnn perspektifinden baar


faktrlerini tanmlayan bir gereksinim. Bir i (business) gereksinim, projenin baars iin nemli
olan eyleri temsil eder.

business rule validation (i kural geerlilik kontrol): Verilerin kabul edilebilir olup olmadn
belirlemek zere, biimlendirmenin kapsam dna den bir kural setini kullanan bir veri geer-
lilii kontrol tipi.

C
cache dependency (n bellek bamll): Bir nesnenin n bellekten ne zaman kaldrldn
belirleyen bir dosya, veritaban, sre veya dier bir nesne.

caching (n bellee alma): Sk eriilen verilerin, bir dosya veya veritabanna gre daha hzl
elde edilebilecei bellee depolanmas iin kullanlan bir teknik.

callback (geri arma): leme sreci tamamlandktan sonra ary yapana bildirimde buluna-
cak bir metoda gnderilen bir nesne. Asenkron programlama kullanlan programlama yntemi-
dir.

capacity planning (kapasite planlamas): Performans temeline ve kapsaml testlere dayanan,


ngrc uygulama kaynak kullanm planlamas.

CAS (code access security): Yneticilerin ve gelitiricilerin, kullanclar yetkilendirdikleri gibi


uygulamalar yetkilendirmelerini salayan bir gvenlik sistemi.

cascading dependency (basamakl bamllk): Bir assemblynin ikinci bir assemblye ve ikin-
cisinin de nc bir assemblyye baml olma durumu.

case expression (durum deyimi): Gelitiricilerin karmak anahtar mantn, Transact-SQL


iinde geerli bir deyimin kullanlabilecei her yerde ifade etmesini salayan bir Transact-SQL
yaps.

cast (tip atamas): Bir tipten dierine bir dnm.

catalog of changed pages (deitirilen sayfalar katalogu): Bir Database Snapshot oluturul-
duktan sonra bir veritabannda deitirilen sayfalarn bir listesi. Bu katalog, verilerin hangi sayfa-
242 Ek - A

dan alnacan belirlemek iin kullanlr: Kaynak veritabanndaki sayfa veya Database Snapshot
iindeki sayfa.

catalog population (katalog poplasyonu): Bir veya daha fazla stun iinde bulunan benzersiz
szcklerin bir listesini karmak ve bir indeks iinde oluturmak zere metin ve grnt stun-
larn zmlemek iin, word breakerlar, noise word dosyalarn, dil dosyalarn ve (istee bal
olarak) filtreleri ve protokol yneticilerini ykleyen bir arka plan sreci.

CCW (COM Callable Wrapper): Bir .NET assemblysi ve bir COM bileeni arasnda yer alan bir
proxy snf; COM bileeninin .NET assemblysine eriip iindeki metotlarn kullanlmasn sa-
lar.

certificate (sertifika): Bir public key sertifikas, public keye karlk gelen private keyi tutan bir
kiiyi, aygt veya servisi tanmlamak zere bir public keyin deerini eleyen, dijital olarak imza-
lanm bir ifadedir.

channel (kanal): Bir iletiim kanal, bir istemci uygulamas ve uzak nesneleri barndran bir su-
nucu arasndaki iletiim iin bir yol olarak hizmet eder. Datk uygulama mimarisi ierisinde kul-
lanlr.

child node: Dier bir nodeun iinde yer alan bir node.

cipher text (ifre metni): Bir ifreleme algoritmas tarafndan retilen ve bir gizli anahtar olmak-
szn dz metne dntrlemeyen ifrelenmi metin.

class diagram (snf emas): Kodunuzu meydana getiren classlarn, enumaration yaplarn
ve arayzlerin statik bir temsili olan bir ema. Bir class emas, ilikileri ve miras (inheritance)
gsterir.

ClickOnce: Bir uygulamann bir web sitesinde veya dosya paylamnda abuk yaynlanmasn
ya da bir uygulamann bir bilgisayara abuk kurulmasn salayan yeni bir yaym teknolojisi. Clic-
kOnce uygulamalar genellikle varsaylan gvenlik ayarlar altnda alr.

client (istemci): Bir uygulamann kullanclara nasl sunulaca hakknda teknoloji tercihi. stemci
tercihleri; Windows, konsol, Office ve Mobile ierir.

CLS-compliant exception (CLS uyumlu istisna): .NET Framework tarafndan ynetilen her-
hangi bir exception nesnesi. CLS uyumlu tm exceptionlar System.Exception hiyerarisinden
tretilir. CLS, Common Language Specificationn ksaltmasdr.

clustered index: Veri sayfalarndaki satrlarn ve veri sayfalarnn kendilerinin clustering anah-
tarna gre sralanmasna neden olan bir indeks. Bir tablo sadece bir tek clustered indexe sahip
olabilir.

clustering key: Bir clustered indexi tanmlamak iin kullanlan stun (veya stunlar).

code (kod): Bir datm yerinin bir UML temsili. Genellikle bir donanm parasn temsil eder (bir
sunucu gibi).

code access security (CAS): Yneticilerin ve gelitiricilerin, kullanclar yetkilendirdikleri gibi


uygulamalar yetkilendirmelerini salayan bir gvenlik sistemi.

code analysis (kod analizi): Visual Studio 2008 Team Editionda yerleik olan, kaynak kodunu-
zu bir kural setine kar gzden geiren bir ara. Bu kurallar srdrlebilirlik, okunabilirlik, globali-
zasyon ve performans gibi alanlar iin kabul edilen en iyi uygulamalar tanmlar. Ayrca statik kod
analizi olarak da adlandrlr.

code analysis (kod analizi): Visual Studioda yerleik olan, kaynak kodunuzu bir kural setine
kar gzden geiren bir ara. Bu kurallar srdrlebilirlik, okunabilirlik, globalizasyon ve perfor-
Terimler Szl 243

mans gibi alanlar iin kabul edilen en iyi uygulamalar tanmlar. Ayrca statik kod analizi olarak da
adlandrlr.

code coverage (kod kapsam): Belirli bir test (genellikle birim testi) sonucu elde edilen kod yz-
desini tanmlayan bir l. Kod kapsam, test edilmekte olan uygulama kodu blmnn lle-
bilir ekilde anlalmasn salar. Test edillen kodun arka plan farkl bir biimde renklendirilmekte
dolaysyla kodun test edilmeyen ksm ok rahat bir biimde grnmektedir.

code group (kod grubu): Assemblyleri izin setleriyle ilikilendirilen yetkilendirme aygt.

code page (kod sayfas): Belirli bir srada seilmi karakter kodlarnn bir listesi (karakterler kod
noktalar olarak temsil edilir). Kod sayfalar, genellikle ortak yazma sistemlerini paylaan belirli
diller veya gruplar desteklemek zere tanmlanr. Windows kod sayfalar 256 kod noktasn ierir
ve sfr tabanldr.

code review (kod gzden geirme): Bilinen standartlara ve en iyi uygulamalara kar kodu do-
rulamak iin zerinden geme sreci. Kod gzden geirmeleri genellikle peer-to-peer temelinde
yaplr.

codec: Verileri bir biimden dierine kodlamaktan ve zmekten sorumlu bir yazlm veya dona-
nm paras. Genellikle bu terim, internette sunulan ses ve video ierii iin kullanlr.

collaboration diagram (beraber alma emas): Bir kullanm durumunu anlamak iin nes-
nelerin birlikte nasl altn gsteren bir ema. Mesaj etkileiminin sras, numaralandrlm
mesajlarla gsterilir.

collation: Verilerin nasl karlatrldn, sralandn ve sunulduunu belirleyen bir kurallar


seti. Karakter verileri collation bilgileri (corafi konum, sra ve harf kipine duyarllk) kullanlarak
sralanr.

collection (koleksiyon): elerin listelerde toplanmasna ve eler zerinde yinelemeye imkan


veren herhangi bir class.

COM (Component Object Model): .NETten nce, Microsoftun temel gelitirme framework
COMdu.

COM Callable Wrapper (CCW): Bir .NET assemblysi ve bir COM bileeni arasnda yer alan bir
proxy snf; COM bileeninin .NET assemblysine eriip iindeki metotlarn kullanlmasn sa-
lar.

Common Language Runtime (CLR): .NET Framework iin kodu yneten ana motor.

complexity (karmaklk): Bir bilgisayar programnn anlalmasnn ne kadar zor olduunun


ls. Karmaklktan, belirli bir programn ne kadar anlalr olduunu ve belirli bir deiikliin
bir program zerinde ne gibi istenmeyen yan etkiler douraca grlebilir.

component (bileen): 1. Kurumsal uygulama tasarmnda mantksal olarak ilikili classlar ve


metotlar grubu. Bileenler genellikle .dll dosyalar olur. 2. .NET Frameworkte, System.Compo-
nentModel.IComponent arayzn uygulayan veya IComponent uygulayan bir classtan do-
rudan veya dolayl olarak treten bir class. Genelde, yeniden kullanlabilir ve dier classlarla ve
nesnelerle alan bir class veya nesne.

component diagram (bileen emas): Bileenleri ve bunlarn ilikilerini (referanslar) gsteren


bir ema. Ayrca, bu bileenlerin nodelar zerine nasl datldn da gsterebilir.

Component Management ynetim konsolu: Administrative Tools mensnde yer alan, servis
verilen bileenlerinizi izlemek ve yaplandrmak iin kullanabileceiniz ara.
244 Ek - A

composite control (kompozit kontrol): (1) Dier kontrollerden meydana gelen ve UserControl
base classndan miras alan, kullanc tarafndan yazlan bir kontrol. (2) Tamamlayc kontrolleri
ierebilen bir kontrol; tamamlayc kontroller, kontrol tanmlayan snf dosyasndaki kod aracl-
yla kompozit kontrole eklenir. Snf dosyas, uygulamalar arasnda paylalabilen bir .dll dosya-
sna derlenir ve istee bal olarak GACye (global assembly cache) kurulabilir.

composition: Bir ilikili tablolar setinin XML verilerine dntrlme sreci.

compression (sktrma): Dijital bir medya dosyasndan veya akndan, boyutunu ve kullanlan
bant geniliini azaltmak zere gereksiz verilerin kaldrlmas sreci.

Computer Management konsolu: Administrative Tools mensnde yer alan, bilgisayarnzn


eitli blmlerini (Message Queuing de dahil olmak zere) izlemek ve yaplandrmak iin kulla-
nabileceiniz ara. Bu ara Start > Run komutundan sonra compmgmt.msc komutu girilerek de
balatlabilir.

configuration management (konfigrasyon ynetimi): Bir uygulamann nasl kurulacann ve


yaplandrlacann ynetimi.

conflict resolver (akma zc): Birletirme replikasyonunda meydana gelebilecek ak-


malar zmek iin tasarlanm bir .NET Framework (managed code) veya COM (unmanaged
code) bileeni.

Connection nesnesi: Bir veri kaynana bir balantnn temsili.

connection pool (balant havuzu): Srekli balant oluturma ve kaldrma sonucu doan za-
man kaybn azaltan, yeniden kullanlabilecek balantlarn bir koleksiyonu.

connection pooling (balant havuzunda toplamak): Veritabanna bir talep yapldnda yeni-
den balantlar kullanmak yerine mevcut etkin balantlar yeniden kullanma sreci.

connection string (balant stringi): Bir veri kaynana balanmak iin gereken, veritaban su-
nucu ad, veritaban ad, kullanlacak kimlik bilgileri tipi gibi bilgiler. Tm ODBC ve OleDB uyumlu
veritabanlar (tm ana tedarikilerin veritabanlar) bir balant stringi kullanr.

constraint (kstlama): Bir tip parametresi zerinde yer alan, ona salayacan tip argmann
kstlayan bir koul. Bir kstlama, tip argmannn belirli bir interfacee uygulamasn, belirli bir
class olmasn veya belirli bir classtan miras almasn, eriilebilir parametresiz bir yaplandrcya
sahip olmasn veya bir referans tipi ya da bir deer tipi olmasn gerektirebilir. Bu kstlamalar
birletirebilirsiniz ama en fazla bir class belirtebilirsiniz.

consumers (tketiciler): Bir bileeni kullanacak olan kod paras veya mimari.

container control (konteyner kontrol): Panel kontrol, GroupBox kontrol veya TabControl
kontrol gibi dier kontrolleri ierebilen bir kontrol.

content page (ierik sayfas): Standart bir .aspx sayfasna ok benzeyen ama bir master sayfa-
da konumlandrlm ContentPlaceHolder kontrolleri iin ierik salayan bir sayfa.

content placeholders (ierik yer tutucular): Bir master sayfann verilerin, kontrollerin ve ierik
sayfasna zg dier ktlarn yerletirilecei blgelerindeki yer tutuculara karlk gelir. Bir ierik
yer tutucu, ierii barndrmak iin ContentPlaceHolder kontroln kullanr. Bir tek master sayfaya
birden fazla ierik yer tutucu uygulanabilir.

context-sensitive help (balama duyarl yardm): Balama duyarl yardm, genel yardmdan
farkl olarak, istenen balama zel yardma karlk gelir. Bu yzden, eer odak bir rn numaras
metin kutusundaysa, grntlenen yardm rn numarasndaki beklentilere younlaacaktr.
Terimler Szl 245

continuous integration (devam eden entegrasyon): Test durumlarn gelitirilen ve kullanla-


bilir eitli bileenler olarak altran bir test stratejisi. Devam eden entegrasyon testi stratejisi,
hatalar srecin erken safhalarnda bulacak ve ayklanmalarn kolaylatracaktr.

contract: Bir Service Broker uygulamasnda bulunan, bir konuma iin izin verilen mesaj tiplerini
ve bir mesaj tipini kullanmasna izin verilen u noktay tanmlayan bir bileen.

control (kontrol): Grsel bir arayze sahip ve bir form veya konteyner kontrolnde barndrlabi-
len bir bileen. Kontroller, ortak bir ilevsellik oluturmak zere birlikte alan zellikleri, metotlar
ve olaylar ierir. Button, TextBox ve Label, kontrollere rnektir.

control state (kontrol durumu): Grnm durumundaki gibi devre d braklamayan zel bir
kontrol iinde depolanm veriler.

controller (denetleyici): Test agentlarn kontrol etmek iin kullanlan bir bilgisayar. Denetleyi-
ciler agentlar balatr ve durdurur. Ayrca, gzden geirilmek zere performans lmlerini de
toplarlar.

conversation (konuma): Bir Service Broker uygulamasndaki u noktalar arasnda, tek ynl
veya iki ynl sral mesaj takas.

cookie (kurabiye): Bir web sunucusunun bir web istemcisinde depolad veriler. Web istemcileri
her sayfa talebinde kurabiyeleri sunucuya geri aktarr ve bu sayede, sunucunun bir sitedeki farkl
sayfalar ziyaret eden kullancy izlemesine imkan verir.

cooperative multiprocessing (mterek oklu ileme): SQL Servern bir ilemci zerinde a-
ltrlacak threadleri zamanlamak iin dahili olarak kulland sre. Bu sre, bir ilemci zerin-
de bir seferde bir tek threadin altrlmasn salar ve kaynaklar zerinde bellekte yer ayrlma-
sn bekleyen threadlerin bir ilemciyi tekellerine almamalarn salamak zere thread aklarn
ynetir.

Copy Files task: Bir log gnderme sreci srasnda, dosyalarn birincil bir sunucudan ikincil bir
sunucuya kopyalanmasndan sorumlu seenek.

copy-on-write: Verilerin zaman iinde bir noktadaki durumunu oluturmak zere, bir veri sayfas-
nn nceki grntsnn bir DataBase Snapshota kopyalanmas iin kullanlan teknoloji.

corrupt page quarantine (bozuk sayfa karantinas): Bir sayfay bozulmu olarak iaretleyen
sre. Tablonun veya veritabannn tamamn evrim dna almak yerine, tabloya kar gerek-
letirilen sonraki eylemlerin iaretlenen sayfayla etkileime girmek zorunda kalmamasn salar.

covering index (kapsayan indeks): Bir sorguyu btnyle karlamak iin kullanlan bir indeks.

crawl: Bir tam metin indeksinin tam veya ksmi olarak doldurulmasn salayan sre.

cross-page posting: Bir kontrol, kontroln tanmland web sayfasndan farkl bir web sayfasna
post back yapacak ekilde yaplandrlr.

cross-tabulation (apraz tablolama): Satrlarn stunlara dntrld genel bir mesleki ra-
por biimi.

culture (kltr): Gelitirmede bu terim, blgesel dile ve biimlendirme farkllklarna karlk gelir.
rnein ABDde konuulan ngilizce, ngiltere veya Avustralyada konuulan ngilizceden biraz
farkldr. Her lke, para birimi ve biimlendirmesi iin de farkl standartlara sahip olabilir. rnein
ABDde bir say 12,345.67 biiminde yazlrken, Avrupann baz blmlerinde virgl ve nokta
iaretleri farkl ekilde kullanlr ve ayn say 12.345,67 biiminde yazlr.

current culture (geerli kltr): Uygulamann halihazrda altnda altrlmakta zere yaplan-
drld kltr. rnein tr-TR
246 Ek - A

current UI culture (geerli UI kltr): Grsel arayz elementlerinin ounu grntlemek iin
kullanlan kltr. Bu, geerli kltr ile ayn olabilir veya ayn olmayabilir.

custom action (zel eylem): Bir Windows Installer kurulumunun Install, Commit, Rollback veya
Uninstall aamasnda altrlan kod. zel eylemler Installer classlarnda yazlr ve kurulacak
projelere eklenir.

custom control (zel kontrol): Kullanc arayzn render etmek iin kendi kodunu salayan,
kullanc tarafndan yazlan bir kontrol.

custom exception (zel istisna): Bir zel exception, System.Exceptiondan tretilen bir classtr
ve bir exception hakknda ilave bilgileri yakalamak ve nakletmek iin gerekli ilave zelliklere ve
metotlara sahiptir.

custom Web server control (zel Web sunucusu kontrol): Kullanc arayz ve ilikili ilev-
sellii kapslleyen sunucu tarafl bir bileen. zel bir web sunucusu kontrol, sizin oluturduu-
nuz bir kontroldr. Web sunucusu kontrolleri System.Web.UI.Control classndan tretilir.

cyclomatic complexity: Bir uygulamay meydana getiren elementler ve bileenler arasndaki


bamsz izgi ve yol saysn kullanarak bir uygulamann karmakln lmek iin kullanlan
matematiksel bir ara.

cyclomatic complexity: Thomas McCabe tarafndan gelitirilen, karmakl lmek iin kul-
lanlan bir mekanizma. Bir yazlm grafii zerinde bamsz yollarn saysna gre nmerik bir
deer karr.

D
DAC: Bkz. Dedicated Administrator Connection.

DACL (discretionary access control list): Bir nesne zerinde atanan veya reddedilen eriim
izinleri iin kullanclar ve gruplar tanmlayan bir yetkilendirme kstlama mekanizmas.

Data Access Layer (DAL): Veritabanna bir arayz salayan bir veya daha fazla snf. Mant
kendi snf setine ayrmak, mesleki mant ve veri eriimini kullanc arayznden ayrma sreci-
nin bir parasdr. Katmanl mimaride olduka fazla kullanlan bir yapdr Veri eriiminde kontroln
tek bir noktadan yaplabilmesini salar.

data binding (veri balama): Kontrol ve veri kayna arasnda iki ynl iletiimi uygulayan bir
form zerindeki bir kontrolde bulunan verileri grntleme kavramdr. Birinde yaplan deiiklik-
ler dierini etkiler.

data definition language (DDL) trigger: CREATE, ALTER ve DROP gibi DDL ilemlerine cevap
olarak atelenen trigger.

Data Encryption Standard (DES): ifre krma saldrlarna kar savunmasz olan, nispeten ksa
anahtar uzunluklarn kullanan bir simetrik ifreleme algoritmas.

data file (veri dosyas): Verileri ve tablolar ve indeksler gibi nesneleri ieren bir dosya. (Bkz. log
dosyas.)

data manipulation language (DML) trigger: INSERT, UPDATE ve DELETE ilemlerine cevap
olarak atelenen trigger.

data storage (veri depolama): Uygulamanzn verilerinin nasl depolayacan ve onlara eriim
salayacan temsil eden depolama.

Data Transfer Object: Bir n katl (tier) uygulamada, katlar arasnda verileri transfer etmek iin
kullanlan bir nesne. Genel kullanm, istemci ve mesleki katlar arasndaki verileri ierir.
Terimler Szl 247

DataAdapter: DataSeti doldurmak ve veri kaynan gncellemek iin kullanlan SQL komutlar
setini ve bir veritaban balantsn temsil eder.

Database Engine Tuning Advisor (DTA): SQL Server 2005 ile birlikte gelen bir ayarlama arac.
Girdi olarak bir SQL Server Profiler izini alr ve indeksler, istatistikler veya blmleme gibi yapsal
deiikliklerin sorgu performansn gelitirip gelitirmeyeceini belirlemek iin bu izi canl bir veri-
tabanna kar analiz eder.

Database Mail hesab: SQL Servern Simple Mail Transfer Protocol (SMTP) sunucusuna e-pos-
ta mesajlar gndermek iin kulland bilgileri ierir. rnein SMTP sunucu ad, kimlik denetimi
tipi ve e-posta adresi gibi.

Database Mail profili: Database Mail hesaplarnn bir koleksiyonu. Database Mail profilleri pri-
vate veya public olabilir. Private profil iin, Database Mail profili kullanabilecek kullanclarn bir
listesini salar. Bir public profil iin, DatabaseMailUserRole msdb veritaban rolnn yeleri profili
kullanabilir.

Database Mail: SQL Server 2005 veritaban motorundan mesaj gndermek iin yeni zm.

database master key: Bir veritabanndaki sertifikalarn ve anahtarlarn ifresini zmek iin veri-
taban dzeyinde oluturabileceiniz, istee bal simetrik anahtar.

database mirroring role: Bir veritaban mirroring oturumunda her bir katlmcnn ileyi durumu-
nu tanmlar. olas rol vardr: Principal, mirror ve witness.

database mirroring session: ilem kipinden (High Availability, High Performance veya High
Protection) biri kullanlarak veri takas iin yaplandrlm bir principal, mirror veritaban ve istee
bal bir witness sunucu.

database mirroring: Bir principal ve mirror veritaban ve istee bal bir witness sunucu arasn-
da yaplandrlan, ok kullanl bir SQL Server 2005 teknolojisi. Verilerin senkronizasyonunu ve
veritaban emasn salar ve otomatik baarszlk seeneini sunar.

database partners (veritaban ortaklar): Bir database mirroring oturumuna katlan principal ve
mirror veritaban ifti iin kullanlan terim.

database restore (veritaban geri ykleme): Tm verileri ve log sayfalarn belirtilen bir yedek-
ten belirtilen bir veritabanna kopyalayan (veri kopyalama aamas) ve yedekte loga kaydedilen
tm transactionlar ileri saran (yineleme aamas), ok aamal bir sre. Bu noktada, varsaylan
durumda bir geri ykleme ilemi, tamamlanmam transactionlar geri alr (geri alma aamas) ve
veritabannn kurtarlmasn tamamlar ve kullanclarn kullanmna aar.

database role (veritaban rol): Her bir kullanc veritaban tarafndan salayan yerleik verita-
ban rolleri seti. Ynetimi iyiletirmek zere, veritaban roln kullanarak veritaban kullanclarn
gruplandrabilirsiniz. Ayrca, veritaban kullanclarn gruplandrmak ve her bir grup baznda izin-
ler atamak iin kendi veritaban rollerinizi de oluturabilirsiniz.

database schema (veritaban emas): Bir veritabanndaki ilikili verilerin, verilerin nasl depo-
land, birbirleriyle nasl ilikili olduu ve nasl kstlandn da ieren yerleimi.

Database Snapshot: Bir kaynak veritabannn zaman iinde bir noktadaki, salt okunur versiyonu.
Bir Database Snapshottan dndrlen veriler, Database Snapshot oluturduunuz zamandaki
rnee sabitlenir.

DataColumn: Bir DataTable iinde bir veritaban tablosundaki stunu temsil eden nesne.

DataColumn: Bir DataTableda tutulacak verileri tanmlayan bir nesne.


248 Ek - A

data-format validation (veri biimi geerlik kontrol): Verinin kabul edilebilir olup olmadn
belirlemek zere girdinin biimini kullanan bir geerlik kontrol tipi.

DataRow: Bir DataTableda tutulan verileri ieren bir nesne.

DataSet: Tablolarla ve ilikilerle bir ilikisel veritaban gibi yaplandrlm verilerin bellek ii tam-
ponu.

DataTable: Bir DataSet iinde, dndrlen verilerin bir tek setini temsil eden nesne.

DataView: Bir DataTable iindeki verilerin sralanabilen, filtrelenebilen ve belirli bir durumdaki
(silinen tm kaytlar gibi) kaytlar grntleyecek ekilde ayarlanabilen, zelletirilmi bir gr-
nm.

DDL trigger: Bkz. data definition language (DDL) trigger.

deadlock detection: SQL Servern bir deadlock zmek zere deadlock kurbann semek iin
kulland algoritma.

deadlock trace: SQL Trace araclyla yakalanan, bir deadlock tarafndan oluturulmu sre-
leri ve transactionlar tanmlayan zel bir iz.

deadlock victim (deadlock kurban): Bir deadlock zmek zere sonlandrlmak iin seilen
sre.

deadlock: ki srecin, veriler zerinde rekabet halindeki kilitleri ele geirdiinde, srelerden
hibiri dierinin transaction tamamlamasna izin vermediinde meydana gelen bir durum.Farkl
transactionlarn akmas sonucu ortaya kar.

declarative RBS demands (deklaratif RBS talepleri): Bir metoda bir attribute olarak deklare
edilen ve alma zamanna, metodu altrmadan nce bir eriim kontrol gerekletirmesi tali-
matn veren eriim kstlamalar.

Dedicated administrator connection (DAC): SQLCMD araclyla eriilebilen zel bir TCP u
noktas olarak oluturulan bir balant. Bir DAC kullanarak bir veritaban yneticisi, sunucu dier
balantlara izin vermek iin ok megul olsa bile daima bir SQL Servera balanabilir.

default filegroup (varsaylan dosya grubu): Bir veritaban nesne oluturduunuzda bir dosya
grubunu belirtmezseniz, nesne varsaylan dosya grubuna ayrlacaktr.

defense-in-depth (derinlemesine savunma): Sisteminizin bir ak durumunda bile korunmas-


na devam edilmesi iin birden fazla koruma dzeyi salayan gvenlik prensibi.

deflate: Verileri verimli ekilde ve patentsiz olarak sktrmak iin kullanlan bir sektr standar-
d.

delegate (delege): Bir metodu ezamanl veya ezamansz olarak armak iin kullanlabilen
bir type-date fonksiyonu.

dependent assembly (baml assembly): Bir ilevi doru ekilde sunmak iin bir assemblynin
gerektirdii dier bir assembly.

deployment model (datm modeli): Bir uygulamadaki bileenler arasnda bulunan bamllk-
lar belgeleyen bir diyagram. En azndan, uygulamadaki eitli bileenleri ve bunlarn arasnda
aktarlan mesajlar ierir. Baz durumlarda, bileenler ve bileenlerin datlaca donanm plat-
formlar arasnda bir elemeyi de ierebilir.

deployment plan (datm plan): Uygulama gelitirme dngsnn tasarm aamasnda olu-
turulmas gereken bir plan. Bir uygulama datm plan, bir uygulamann hedef altrma ortam-
na nasl datlacann ayrntlarn ierir.
Terimler Szl 249

dequeue (kuyruktan kaldrmak): Mesajlarn bir kuyruktan kaldrlmas sreci.

derived class (tretilmi snf): Baz temel fonksiyonlar bir base classtan treten snf. Eer
Class B, Class Adan tretilirse, Class B derived class olarak kabul edilir.

derived table (tretilmi tablo): Bir tablodan seilebilen ve bir tablo gibi eklenebilen zel bir tr
alt sorgu.

DES (Data Encryption Standard): ifre krma saldrlarna kar savunmasz olan nispeten ksa
anahtar uzunluklarn kullanan bir simetrik ifreleme algoritmas.

deserialization: Daha nce serialize edilmi byte sekansn bir nesneye dntrme sreci.

design pattern (tasarm deseni): Sk karlalan belirli bir sorun iin uygulanan standart bir
zm. Uygulamanz tasarlarken bir veya daha fazla tasarm deseni uygulayarak, uygulama
domaininizdeki sorunlar bilmeyen ama tasarm desenlerinizi bilen kiiler iin tasarmnz daha
okunabilir klacaksnz.

destination (var noktas): Bkz. hedef.

deterministic function (deterministik fonksiyon): arldnda daima ayn deeri dndren


bir fonksiyon. Belirtilen bir ann trigonometrik kosinsn dndren yerleik SQL Server fonksi-
yonu COS, deterministik fonksiyona bir rnektir. (Bkz. nondeterministic function).

device-specific rendering (aygta zg rendering): Bir aygt tipine gre bir kontrol iin
renderingi belirtme becerisi.

dialog (iletiim): ki u nokta arasnda meydana gelen konuma.

differential backup: Son tam yedeklemeden sonra deimi olan tm veri sayfalarn yedekle-
yen bir sre.

differential restore: Bir differential backup kullanan bir geri ykleme ilemi.

DiffGram: DataRow nesnesinin bilgileri de dahil olmak zere, DataSet nesnenizin tm verilerini
ieren bir XML belgesi.

Diffgram: Hem orijinal, hem de gncellenmi deerleri ieren, verilerin bir XML temsili. Bu,
DataSetlerin XMLe serialization iin varsaylan biimdir.

digital signature (dijital imza): Dijital imza, geleneksel kat tabanl imzay alr ve onu elektronik
bir parmak izine dntrr. Bu parmak izi veya kodlanm mesaj hem mesaj veya belge, hem de
imzalayc iin benzersizdir. Dijital bir imza, imzalayan kiinin gerekten de mesajn gndericisi
olduunu gsterir. mzalandktan sonra belge zerinde yaplan herhangi bir deiiklik, imzay
geersiz klar ve dolaysyla, sahtekarla kar koruma salar. Dijital imzalar, organizasyonlarn
imza atann gerekliini, sorumluluunu, veri doruluunu ve belgelerin ve transactionlarn red-
dedilmemesini salamasna yardmc olur.

Direct Internet Message Encapsulation (DIME): Uygulama tarafndan tanmlanan rastgele tip
ve boyuttaki bir veya daha fazla payloadu bir tek mesaj yapsna kapsllemek iin kullanlabile-
cek hafif sklet, ikilik mesaj biimi. WSE 3.0da, DIMEnin yerini MTOM alr.

discretionary access control list (DACL): Bir nesne zerinde atanan veya reddedilen eriim
izinleri iin kullanclar ve gruplar tanmlayan bir yetkilendirme kstlama mekanizmas.

Distributed Authoring and Versioning (DAV): Gelitiriciler ekip senaryolarnda alrken Web
sitesi gelitirmeyi basitletiren, HTTP/1.1e yaplan eklentiler seti.

DMFs: Bkz. Dynamic Management Functions.


250 Ek - A

DML trigger: Bkz. data manipulation language (DML) trigger.

DMVs: Bkz. Dynamic Management Views.

Document Object Model (DOM): Yapy tanmlayan W3C tarafndan salanm standartlar be-
lirler ve XML belgeleri iin ok eitli ortamlarda ve uygulamalarda kullanlabilecek standart bir
programlama arayz salar.

domain: Windows Server 2003 gvenliinde, grntleme ve ynetim amacyla gruplandrlan


ve ortak bir Active Directory dizin servisleri veritabann paylaan bir bilgisayar koleksiyonu.

drag-and-drop (srkle ve brak): Kullancnn sol fare dmesine basarak bir form iindeki ve-
rileri tuttuu, form boyunca srkledii ve sol fare dmesini brakarak dier bir kontroln zerine
brakt bir ilem.

driver (src): Bir entegrasyon testi srasnda iki veya daha fazla bileen arasndaki koordinas-
yonu ve ak yneten bir kod paras.

DTA: Bkz. Database Engine Tuning Advisor.

Dynamic management Functions (DMFs): Sorgu planlar gibi ilave verileri grntlemek iin
SQL Server aralaryla alan bir fonksiyon seti.

Dynamic Management Views (DMVs): SQL Server ara eitleriyle dinamik olarak doldurulan
bir grnm seti. Bu grnmler ok sayda dahili ilem boyunca ayrntl bir grnm salar.

E
edge case (kenar durumu): Belirli bir kullanm durumu srasnda bir kullancnn izleyebilecei
alternatif bir yol. Bu yol genellikle genel, baarl yol deildir. Kenar durumlar, test etmeniz gere-
ken eylemleri temsil ettikleri iin nemlidir. Ayrca alternatif kullanm durumu (alternate use case)
olarak da adlandrlr.

edge case (kenar durumu): Bir metot veya class iin parametrelerin ularndan birinde meyda-
na gelen bir olay veya durum. Bu u durum; minimum deer, maksimum deer, bo deer ya da
nulldan kaynaklanabilir.

Edge Table: Sekmeli biimdeki bir XML aac iin yapy temsil eden bir yap. Her satr, XML
yapsn oluturan nodelarn her birinin zelliklerini tanmlar.

encapsulation (kapsllemek): Bir nesnenin dahili yelerini gizleme ve sadece istemcinin ihtiya-
c olanlar aa karma becerisini ierir.

encode (kodlamak): Birinden dierine dntrme srecine karlk gelen bir terim. Multimedya
dnyasnda en tipik kullanm, verilerin HTTP uyumlu olmayan bir biimden HTTP zerinden gn-
derilebilecek bir biime dntrlmesidir.

encoding (kodlama): Bir XML elementini belirli bir balamda tanmlamak iin belirli attributelarn
bir XML elementine eklenmesi sreci.

encryption (ifreleme): Bilgileri zmek iin anahtara sahip olmayan kiiler tarafndan bilgileri
okunmaz klmak zere gizleme sreci.

encryption key (ifreleme anahtar): Verileri ifrelemek ve zmek iin kullanlabilecek bir de-
er. Simetrik ifreleme kullanldnda, paylalan sr (shared secret) olarak da adlandrlr.

endpoint (u nokta): Transactionlar ilemek zere SQL Server motoruna erimesi gereken
sreler tarafndan kullanlan bir balant mekanizmas. Bir konuma u noktas, bir konumaya
katlan iki veritaban rneini tanmlar. Bir Service Broker u noktas, Service Broker uygulama-
larnn SQL Server rnekleri zerinden mesaj gndermesini ve almasn salayan daha genel bir
Terimler Szl 251

SQL Server u noktas iin bir payload tipidir. Database mirroring iin, database mirroring oturu-
muna dahil olan her rnek zerinde TCP u noktalar oluturursunuz.

enqueue (kuyrua almak): Bir kuyrua mesaj yerletirme sreci.

enterprise services: COM+ servislerini kullanarak bileen tabanl uygulamalar ina etme meto-
du. Bunlar, transactionlar ve nesne havuzu gibi servislerden yararlanabilirler.

entity relationship diagram (varlk ilikisi diyagram): Bir varlk ilikisi diyagram (ER), verita-
banlar gibi ilikisel sistemleri modellemek iin kullanlan bir diyagramdr. ER diyagramlar, genel-
likle varlklardan (entity) ve bunlarn arasndaki ilikilerden meydana gelir.

enumaration veya enum (numaralandrma): Birlikte gruplandrlm, adlandrlm sabitlerin bir


listesi.

event (olay): Bir kontrolden uygulamann geri kalanna gnderilen ve olayla ayn yapya sahip
metotlar tarafndan ynetilebilen bir mesaj.

event handler (olay yneticisi): Bir olay tetiklendiinde altrlan metot. Bir event handler,
event ile ayn yapya sahip olmaldr.

event log: Bir uygulamann durumu hakkndaki bilgileri kaydetmesini ve kalc olarak tutmasn
salayan bir mekanizma.

event provider (olay salayc): Bir web olayn depolayarak veya olayn yneticisine bildirerek
web olayn yneten bir class.

evidence (kant): Bir assemblynin tanmlanma ekli; assemblynin depoland konum, assemb-
ly kodunun bir hashi veya assemblynin imzas gibi.

exception (istisna): Uygulamann altrlmas srasnda meydana gelen bir hatay temsil eder.

exception bubbling (istisna kabarc): lk kez Internet Explorerdaki olay mekanizmas ta-
nmlanrken kullanlan, event bubbling teriminden tretilen bir terim. Exception bubbling, bir
exceptionn bir try/catch ifadesi tarafndan yakalanana kadar ar ynnda (call stack) yukar
doru seyahat etmesi srecine karlk gelir.

explicit localization (ak yerelletirme): Bu, kontrolleri global kaynaklara elle ilikilendirir. Bir-
den fazla sayfa zerinde bir tek kayna grntlemek istediiniz ak yerelletirmeyi kullanma-
lsnz.

expression column (deyim stunu): Tretilmi veya hesaplanm stun olarak da bilinir. eri-
in bir formle dayand ve deitirilebilecek atomik verileri temsil etmeyen bir DataColumndur.
Deyim stunlar, gereken veriler doru biimde olmadnda kullanlabilir.

extended control (geniletilmi kontrol): nceden var olan bir kontrol miras alan ve bu kon-
troln ilevselliini kapsayan, kullanc tarafndan yazlm bir kontrol.

extender class (uzatc snf): Windows form uygulamalarnda, bir konteynerin iindeki kontrol-
lere zellikler eklemek iin kullanlan bir kontrol.

Extensible Markup Language: Bkz. XML.

external fragmentation (harici fragmantasyon): ndeks sayfalarnn fiziksel olarak bozukluk


derecesi.

extraction, transformation ve loading (ETL): karma, dnm ve ykleme ilevlerini ger-


ekletirmek zere kullanlan aralar iin genel bir terim. SQL Server 2000 Data Transformation
Services (DTS) ve SQL Server 2005 Integration Services (SSIS), ETL aralarna rnektir.
252 Ek - A

extreme programming (ar programlama): Ksa dnemde teslim edilecek projelere ve tamam-
lanmam veya deimekte olan gereksinimlere sahip projelerin stesinden gelmek iin yksek
dzeyde iletiime odaklanan bir yazlm gelitirme disiplini. Daha fazla bilgi iin http://www.
xprogramming.com adresini ziyaret edin.

F
Fagan Inspection: Michael Fagan tarafndan tantlan ve bir kodun gzden geirilmesinde nele-
rin alt ve nelerin almad zerine yapt kapsaml aratrmaya dayanan, resmiletirilmi
bir kod gzden geirme sreci.

file system (dosya sistemi): Dosyalarn klasrlerde ve srclerde depolanmas iin iletim
sistemi tarafndan salanan mekanizma.

filegroup (dosya grubu): Veritaban yneticilerinin veri dosyalarn gruplandrmasn ve bu dos-


yalar mantksal bir birim olarak ynetmesini salayan mantksal bir yap.

filegroup backup: Bir veritaban iindeki her bir dosya grubunu yedekleyen bir sre.

filegroup restore: Bir veya daha fazla dosya grubunu bir veritabanna geri ykleyen bir sre.

filter (filtre): Uygulamalarda, dosya seimi srasnda, sadece belirli uzantl dosyalarn grnt-
lenmesini salar.

filtering exceptions (istisnalar filtrelemek): Genel exception tiplerinden nce belirli excepti-
on tiplerinin yakalanmasn salamak zere Catch koullarnn sralanmas sreci. rnein Sq-
lException, FileNotFoundException.

fire and forget: Bir metoda bir ary balatmak ve metot bir exception frlatsa bile, ondan hibir
sonu elde etmemek.

fixed server role (sabit sunucu rol): Oturum amalara ynetimsel ayrcalklar atamanz sa-
layan, sysadmin veya securityadmin gibi bir rol.

flat file (dz dosya): Dosyadaki her satrn bir veritabanndaki kayda edeer olduu metne
verilen ad.

FLWOR expression: Gelitiricilerin belirtilen bir filtreye elenen bir node seti boyunca tekrarla-
nan karmak sorgu mantn yazmasn salayan, en nemli XQUERY deyimi.

foreign key: ki tablo arasndaki ilikiyi tanmlamak iin kullanlan ilikili bir tablodan elde edilen
primary key deeri.

frame rate (kare hz): Bir video aknda grntlenen saniye bana kare says. Belirli bir kare
saysnn zerinde, plak gzle aradaki kalite fark grlemez.

framework (platform): Gelitiriciyi ok sayda mimari almayla uramaktan kurtaran, base


classlar ve bileenler seti.

full database backup (tam veritaban yedeklemesi): Verileri depolamak iin ayrlm bir verita-
banndaki tm veri sayfalarn yedekleyen bir sre.

full database restore (tam veritaban geri yklemesi): Daha nceden mevcut olan her eyi
deitirerek tam bir yedei geri ykleyen bir sre.

Full recovery model: Tm ilemlerin transaction loguna kaydedildii ve veritaban motorunun


logu asla silmedii bir kurtarma modeli. Transaction logu silmek iin transaction log yedekleme-
sini gerekletirmeni gerekir. Full recovery model, bir veritabann baarszlk noktasna (veya
SQL Server 2005 Enterprise Editionda daha nceki bir noktaya) geri yklemenize izin verir. (Bkz.
Bulk-Logged recovery model; Simple recovery model.)
Terimler Szl 253

full-text catalog (tam metin katalog): Bir veya daha fazla tam metin indeksini ieren harici bir
depolama yaps.

full-text index (tam metin indeks): Bir tam metin katalog iinde yer alan harici bir yap. Bir tam
metin indeks, bir tablonun indekslenmesi iin belirtilmi bir veya daha fazla stunda bulunan bir
szck setini temsil eden tokenlarn ters evrilmi, sktrlm bir yndr.

fully trusted (tam gvenilir): Code access security (CAS) izin kontrollerinden muaf tutulan bir
assembly.

function (fonksiyon): Bir tablo deikenini veya skaler bir deeri dndrebilen ama bir verita-
bannn durumunu deitiren herhangi bir komutu altrmasna izin verilmeyen, programsal bir
nesnedir.

functional requirement (fonksiyonel gereksinim): Bir gelitiricinin perspektifinden bir zellii


tanmlayan gereksinim. Bir gelitirici, spesifikasyonu veya gereksinimi gzden geirebilmeli ve o
spesifikasyonu uygulayabilmelidir.

functional specification (fonksiyonel spesifikasyon): Bkz. Fonksiyonel gereksinim.

G
garbage collection: Referans olmaktan karlan elerin kaldrlmas araclyla heapteki bel-
lein kurtarlmas.

generic type (jenerik tip): eitli veri tipleri iin ayn ilevsellii gerekletirmek zere uyarlanan
bir tek programlama elementi.rnein; List<>,IEnumerable<>.

global resources (global kaynaklar): Bir uygulamada herhangi bir sayfadan eriilebilecek
stringler veya dier nesneler. Globalizasyon balamnda global kaynaklar, birden fazla dile ev-
rilen ifadeler iin merkezi bir depo salar.

globalization (globalletirme): Bir uygulamann belirli bir kltr iin saylar ve tarihleri biimlen-
dirmesini salama sreci.

granularity: Bilginin gerektirdii veya akland ayrnt dzeyi.

Graphics nesnesi: izim yzeyini temsil eden bir nesne. Yazdrma (printing) ileminde, ieriin
sayfaya izilmesi iin Graphics nesnesi kullanlr.

gzip: lave bilgiler tamak zere bir bala izin veren sktrma algoritmasn amak iin kul-
lanlan bir sektr standardnn uzants. Uygulamadaki verileri *.zip formatnda sktrmak iin
kullanlr.

H
hash algorithm (hash algoritmas): Orijinal veriler belirlenemeyecek ekilde verileri gizlemek
iin kullanlan bir ifreleme teknii. Hash algoritmalar, sklkla parolalar korumak iin kullanlr.

hash: Byk bir veri parasn zetleyen ve hash retildikten sonra verilerin deitirilmediini
dorulamak zere kullanlabilecek bir deer.Bu bilgiyi alabilmek iin ise GetHashCode() metodu
kullanlr.

heap: .NET Frameworkn, referans tipindeki deikenler tarafndan kullanlacak yeri ayrd,
bellekteki bir yer. Ayrca, heapteki bellek garbage collectiona maruz kalr. Bu, ynda (stack)
ayrlan deikenlerden farkldr.

heartbeat method (heartbeat metodu): Bir web servisin, harici uygulamalarn servisin duru-
munu kontrol etmesine izin veren bir metot. Metodun uygulamas, harici talepleri karlamak iin
gereken dahili kaynaklar zerinde bir kontrol iermelidir.
254 Ek - A

hepler service (yardmc servis): Tam metin indeksleri doldurmak ve tam metin sorgularn
gerekletirmek iin kaydedilmi bir servis grubu. Bu servisler word breakerlar, noise word dos-
yalarn ve dil dosyalarn ierir.

hidden field (gizli alan): Bir web formu iinde depolanan ve kullanc sayfay web taraycsnda
grntlendiinde kullancya grnmeyen veriler.

hidden tables (gizli tablolar): SQL Server iinde bulunan ve depolama motoru tarafndan tam
anlamyla tannan tablolardr. Bu tablolara kar dorudan INSERT, UPDATE, DELETE veya SE-
LECT ifadelerini uygulayabilirsiniz. Ayrca indekslenemezler, yaplar deitirilemez veya kendi-
lerine kar oluturulmu triggerlara sahip olamazlar. Gizli tablolar bir grnm araclyla aa
karlr.

High Availability iletim kipi: Bir principal, mirror ve witness gerektiren bir veritaban mirroring
iletim kipidir; verileri principaldan mirrora senkronize olarak transfer eder ve baarsz olduun-
da, witness sunucusuna eriilebildii srece, otomatik baarszlk tespitine ve otomatik failovera
izin verir.

High Performance iletim kipi: Sadece bir principal ve mirror gerektiren bir veritaban mirroring
iletim kipi. Verileri principaldan witnessa asenkron transfer eder ve sadece elle gerekletirilen
failovera izin verir.

histogram: Her deer aralna tam olarak ka satrn elendiini, bir araln iine ka satrn
dtn ve bir aralk iindeki deer younluunun bir hesaplamasn veya kopya deer rnek-
lerini belirtir.

horizontal prototype (yatay prototip): Bkz. Mockup.

host evidence (host kant): Assemblynin hostunun, assemblynin orijinini (uygulama dizini,
URL veya site gibi) akladn gsteren kant.

HTML server control (HTML sunucu kontrol): Elenen HTML etiketine benzer ama ayn za-
manda runat=server attributeunu ierir ve programsal olarak eriebileceini sunucu tarafl bir
nesne salar.

HTTP endpoint (HTTP u noktas): Gelitiricilerin, bir SQL Server 2005 veritaban iindeki sto-
red procedureleri ve fonksiyonlar, SOAP protokol kullanlarak herhangi bir uygulamadan ar-
labilecek web metotlar olarak sunmasn salayan bir u noktas tipi.

HTTP handler (HTTP yneticisi): zel dosya tiplerinden cevaplar retmek iin ASP.NETi etkin-
letiren, IHttpHandler tabanl bir class.

Hypertext Transfer Protocol (HTTP): Web sunucusundan web sayfalarn talep etmek ve web
taraycsna cevaplar geri gndermek iin kullanlan, metin tabanl bir iletiim protokol.

I
ILogFormatter arayz: Enterprise Librarynin Logging Application Blocku iindeki biimlendiri-
ciler tarafndan kullanlan arayzn ad.

IMessageFormatter arayz: .NETte MessageQueque class tarafndan bir biimlendirici ola-


rak kullanlmak zere bir classn uygulamas gereken arayz.

InnerException property (InnerException zellii): Bu, exceptionlar birbirine zincirlendiinde


bir Exception nesnesi zerinde kullanlan bir zelliktir. Baz durumlarda exception yakalanr ve
yeni bir exception tipi rneklendirilir. Orijinal exception, yeni exception zerinde bu zellie atan-
maldr.

InstallException: Bir Installer class tarafndan frlatlabilen bir exception Bir zel eylemde Instal-
lException exceptionnn frlatlmas, kurulumun geri alnmasna neden olacaktr.
Terimler Szl 255

Interop: Interoperation iin bir ksaltma; managed ve unmanaged kodun birlikte almas anla-
mna gelir. Office Interop buna rnek gsterilebilir. .Net ile yazlmayan bir bileenin .Net ile birlikte
kullanlmasn salar.

IsPostBack: Bir ASP.NET web sayfasnda bulunan, verilerin web sunucusuna geri gnderilmek-
te olup olmadn veya sadece web sayfasnn talep edilmekte olup olmadn belirlemek iin
kullanlan bir zellik.

IV (initialization vector): ifrelenmekte olan verilerin ilk blounu daha da gizlemek iin simetrik
ifreleme algoritmalarn kullanan veriler; bu, yetkisiz ifreleme zmn daha zor hale getirir.

IXmlSerializable arayz: Bir snfn, zel bir XML temsili salamak iin uygulamas gereken
arayz.

immutable (deimez): Bir immutable (deimez) nesne, nesne oluturulduktan sonra zellik-
lerinin deitirilemedii nesnedir.

imperative role-based security (RBS) talepleri: Kodunuzun iinde deklare edilen ve kodun
belirli blmlerine eriimi kstlamak iin kullanlabilecek eriim kstlamalar.

impersonation (taklit etme): Bir sreci kaynaklara tantmak iin son kullancnn kimlik bilgilerini
kullanma sreci. rnein bir web uygulamasnn bir veritabanndaki bir tabloyu okumas gereki-
yorsa ve sadece Managers grubunun yeleri tabloyu okuma iznine sahipse, web uygulamasnn
tabloya erimek iin yetkilendirilmi kullancy taklit etmesi gerekir.

implicit localization (dolayl yerelletirme): Bu, ASP.NETin kontrolleri otomatik olarak yerel
kaynaklarla ilikilendirme becerisini tanmlar. Dolayl yerelletirme, sayfa sayfa eviriler salama-
nn en iyi yoludur.

index fragmentation (indeks fragmantasyonu): ndeks sayfalarnn bozukluk derecesi veya


indeks sayfalarnn ksmi doluluk derecesi.

index population (indeks poplasyonu): Bir tek tam metin indeks iin gerekletirilen bir ina
sreci. (Bkz. katalog poplasyonu.)

index rebuild (indeksin yeniden ina edilmesi): ndeksin drlmesi ve yeniden oluturulma-
syla fragmantasyonun kaldrlmas iin bir indeksin yeniden ina edilmesi sreci.

index reorganization (indeksin yeniden dzenlenmesi): Tablolar ve grnmler zerindeki


clustered ve nonclustered indekslerin leaf dzeyinin defragmantasyon sreci. Yeniden dzenle-
me sreci, indeks sayfalarn kltrken, leaf nodelarn mantksal, soldan saa srasna elen-
mek zere leaf dzeyindeki sayfalar fiziksel olarak yeniden sralar.

indexed view (indekslenmi grnm): Daha hzl performans iin dndrlen verilerin disk
zerinde somutlatrlmas iin bir clustered indeks zerinde oluturulan bir view.

infoset (XML Information Set): yi biimlendirilmi (well-formed) bir XML belgesinin ierdii bil-
giler. Bir infosete sahip olmas iin XML belgesinin iyi biimlendirilmi olmas ve namespace
koullarn karlamas gerekir.

inheritance (miras): Bir snfn temel ilevselliini ikinci bir snftan ald ve daha sonra bunu
yeni metotlar, zellikler veya uygulamalar ekleyerek genilettii, iki snf arasndaki iliki.

inheritance hierarchy (miras hiyerarisi): Tretilmi bir snf dier bir snf iin bir taban snf
olarak davranabileceinden, ilikili tm snflar arasnda aa benzeri bir yap oluturmak mm-
kndr. Bu yap, miras hiyerarisi olarak bilinir.

inherited permission (miras alnan izin): Bir nesneye parent nesnesinden aktarlan izinler.
256 Ek - A

initialization vector (IV): ifrelenmekte olan verilerin ilk blounu daha da gizlemek iin simetrik
ifreleme algoritmalarn kullanan veriler; bu, yetkisiz ifre zmn daha zor hale getirir.

inner join (i ba): Bir sorgudaki birden fazla tabloyla alrken, her iki tablodan da elenen
satrlar dndren bir ba tipi. (Bkz. d ba.)

input parameter (girdi parametresi): Bir stored procedure veya fonksiyona aktarlan bir dei-
ken.

instrumentation (enstrmantasyon): Uygulamann durumu, ilerleyii ve sorunlar hakkndaki


bilgilerin uygun kitleye rapor edilebilmesi iin bir uygulamann iine stratejik olarak kod yerletir-
mek.

integrated security (entegre gvenlik): Windows Authentication olarak da bilinir. Bu gvenlik


yntemi, bir veri kaynana erimek iin mevcut domain kimlik bilgilerini kullanr.

integration test (entegrasyon testi): Her bir uygulama bileenini bir tek zmde deerlendiren
bir test. Bir entegrasyon testi, her bir birimin istendii ekilde birlikte alp almadn kontrol
etmek iin kullanlr ve bir test durumundan oluturulur. Test durumu, sisteme girilen girdileri ve
beklenen ktlar tanmlar.

integrity (btnlk): Bir mesajn aktarm srasnda deitirilmediini dorulama sreci.

interface (arayz): Arayz uygulayan tm classlarn salamas gereken genel bir ye setini
tanmlar.Tipler arasndaki szlemelerdir.

intermediate level (orta dzey): ndeksin rootunda bir tek sayfann bulunduundan emin olmak
zere, oluturulan bir B-tree iindeki bir veya daha fazla dzey.

internal fragmentation (dahili fragmantasyon): ndeks sayfalarnn ksmi doluluk derecesi.

interop assemblies (interop assemblyler): Bir .NET uygulamasnn bir COM bileenini ar-
mas iin bir callable wrappern retilmesi gerekir. Bir interop assembly, CLRn wrapper retmek
iin kullanabilecei, bir COM bileeni tarafndan aa karlan tipleri ieren bir .NET esidir.

isolated storage (izole edimi depolama): Bir kullancnn sisteminde, bir uygulama iin yksek
dzeyde haklar gerektirmeksizin verileri depolamak iin kullanlan ve kapsam kullanc, assembly
veya uygulama tarafndan belirlenen, korunmu bir yer. rnein serialization yaplm bir dosyay
sadece o ilemi yapan kullancnn veya o makine zerindeki herhangi bir kullancnn deseariali-
ze yapmasn salamak, dosya baka bir yere kopyaland zaman gvenlik sebebi ile desearilize
yaplmasn engellemek iin kullanlabilir.

isolation levels (izolasyon dzeyleri): Veri ve sorgu btnln garantileyen standart ANSI
kilitleme davranlar.

iteration (yineleme): Bir e koleksiyonu boyunca ilerleme sreci. rnein IEnumerable

J
jitter: Multimedyada, veri aknn gecikmesindeki grlen deiim nedeniyle oluan durum. Bu
deiim, akn grntlenmesinde duraklamaya veya teklemelere neden olabilir. Bu sorunun en
genel zmlerinden biri, gelen akn oynatmdan nce depolanmas iin bir tampon kullanmak-
tr. Tampon, bir ok emici gibi davranr ve veri geli hzndaki deiiklikler asl oynatm annda
etkilemez.

job (i): altrlacak bir veya daha fazla grev. stee bal olarak bir ii, belirlenen bir zamanda
veya bir kullanc eylemine ya da sistem kouluna cevap olarak alacak ekilde yaplandrabilir-
siniz. rnein her gn saat 15:00te veritabannn yedeinin alnmas
Terimler Szl 257

job schedule (i program): Bir ii bir tarih veya zaman tabanl triggera gre otomatik olarak
altrmak iin gereken altrma parametrelerini salar.

job step (i adm): altrlacak bir kod blou. Her i adm genellikle bir tek ayr mesleki ilemi
altrr.

K
Kerberos: Kimlik denetimi ilevselliini salayan, markaya zg Microsoft standard.

kernel mode (ekirdek kipi): alan threadin normalden daha st dzey izinlere sahip olduu,
CPUdaki bir kip. Genellikle ekirdek kipinin ileyii, iletim sistemi tarafndan gerektirilen fonksi-
yonlarn performansyla ilikilidir.

keyed hash algorithms (anahtarl hash algoritmalar): Hem gndericinin, hem de alcnn sa-
hip olmas gereken gizli bir anahtar kullanarak hashin ifrelenmesi yoluyla hashin deitirilme-
sine kar koruma salayan algoritmalar.

L
language file (dil dosyas): Bir tam metin indeksi veya tam metin sorgusu iin dile zg
attributelar belirlemek zere kullanlan bir dosya.

layers (katmanlar): Yksel yeniden kullanlabilirlik gibi tasarm hedeflerinizi yerine getirmek iin
uygulamanzdaki kodun mantksal blm. Katmanlar kullanc arayzn, middle tier (ara kat)
ve veritabann ierir.

leaf level (leaf dzeyi): Bir indeks iindeki en alt dzey.

leaf node: Hibir child iermeyen bir node.

lease (kira): Bir istemci uygulamas zerindeki uzak bir nesneye bir referans salamak iin bir le-
ase kullanlr. Bir lease, CLR (Common Language Runtime) garbage collectorn (GC), uzak nes-
neye yerel referanslar olmad durumda uzak bir nesneyi toplamasn engellemek iin kullanlr.

Lightweight Transaction Manager: System.Transactionsn bir paras olarak uygulanan bu


zellik, gerektiinde bir (lightweight) transaction tam datlm bir transactiona terfi ettirir.

linked server (bal sunucu): Harici veri kaynaklarna (uzak bir SQL Server gibi) erimenizi sa-
layan bir sunucu; sunucunuzdaki dier bir rnek veya bir Access, Oracle ya da dier bir veritaban
(yerel Transact-SQL kodunuzdan).

list (liste): Bir uygulamada kullanlabilecek, genellikle bir koleksiyon araclyla kullanlan ilikili
nesnelerin bir grubu. Bir listeyle alan bir kontrol, genellikle listenin elerini eklemek, kaldrmak
ve ynetmek iin metotlara sahip olacaktr.

list-based control (liste tabanl kontrol): Bir item (e) listesini aa karmak veya grnt-
lemek iin tasarlanm bir kontrol. ListBox, ComboBox ve CheckedListBox, sk kullanlan kontrol-
lere rnektir.

load test (yk testi): Uygulamann beklenen yk altnda alp almadn kontrol eden bir
test. Yk, ayn anda alan kullanclar temsil eden bir set boyunca gerek ykn datmnn
taklit edilmesiyle tanmlanr.

local resources (yerel kaynaklar): Bir tek web sayfasyla ilikili stringler veya dier nesneler.
Globalletirme balamnda ASP.NET, kontrollerle ilikilendirilmi yerel kaynaklar otomatik olarak
kullancnn tercih ettii dilde grntler.

local system account (yerel sistem hesab): Yerel bilgisayar zerinde tam ynetici haklarna
sahip olan ama a eriim haklarna sahip olmayan bir Windows iletim sistemi hesab. Bu hesap,
gelitirme iin veya dier sunucu uygulamalaryla entegre olmas ya da a kaynaklaryla etkile-
258 Ek - A

ime girmesi gerekmeyen test sunucular iin kullanlabilir. Ancak, bu hesaba verilen ayrcalklar
yznden, SQL Server servisi veya SQL Server Agent servisi iin bu hesabn kullanlmas ne-
rilmez.

localization (yerelletirme): Lokasyona zg bir ekilde zelletirilmi bir kullanc arayzn


grntleme sreci.

lock escalation (kilit ykselii): SQL Servern dinamik olarak bir ince ayarl kilitten daha kaba
ayarl bir kilide getii sre; rnein sayfa dzeyindeki bir kilitten tablo dzeyindeki bir kilide
gei gibi.

locking level (kilitleme dzeyi): Satr, sayfa veya tablo olabilen bir kaynak zerinde elde edilen
kilit dzeyi.

locking promotion (kilit terfisi): Bir kilidin gncellenmesinde meydana gelen bir sre. Bu tip bir
kilit, paylalan bir kilit olarak balar ve sonra, veriler deitirilmeden hemen nce zel bir kilide
deiir.

log file (log dosyas): Bir transaction logunu ieren bir dosya. (Bkz. veri dosyas.)

log level (log dzeyi): Olas bir log girdisinin ilenmesi iin gereken minimum seviyeyi gsteren
bir konfigrasyon ayar.

log pointer (log iaretisi): Bir transaction logunda, bir sonraki yazma ileminin meydana ge-
lecei konumu izlemek iin lazywriter sreci tarafndan kullanlan bir referans. Bu, grnrle
sahip olmayan ve dzenlenemeyen dahili bir yapdr.

log shipping (log tama): Bir transaction logunun otomatik olarak birincil bir sunucudaki bir
veritabanndan yedeklenmesi, kopyalanmas ve dier bir sunucudaki bir veya daha fazla ikincil
veritabanna geri yklenmesi sreci.

log_shipping_monitor_error_detail tablosu: Hata ayrntlarn izleyen bir log tama tablosu.

log_shipping_monitor_history_detail tablosu: Log tama grevleri hakkndaki gemi bilgile-


rini depolayan bir log tama tablosu.

logging: Bir uygulamann durumu, ilerleyii ve sorunlar hakkndaki bilgileri kalc bir veri depo-
suna yerletirme sreci.

logical design (mantksal tasarm): Bir sistemi tasarlamak amacyla her bir farkl alma birimi-
nin mantksal gruplara ayrlmas.

looping (dng oluturmak): Bir kullanm durumu iin olay aknda durum, akn devamna
izin vermek zere yeniden istenmesi ve daha sonra dzeltilmesi gereken geersiz bir girdi ar-
dnda bir dng meydana gelir.

M
machine.config dosyas: Microsoft .NET Framework tarafndan kullanlan birincil konfigrasyon
bilgileri dosyas. machine.config dosyas, Microsoft Windows registryye benzer. Web.config dos-
yalar machine.config dosyasnn izin verdii lde alr.

maintainability (srdrlebilirlik): Zaman iinde bir kod blounu dzenlemek, kodu olutur-
maktan daha maliyetlidir. Bu yzden, gelecekte bakmnn yaplabilmesi iin kodun ak ve oku-
nabilir olmas nemlidir.

maintenance job (bakm ii): Maintenance Plan Wizardn kts olarak SQL Server Agent iin-
de oluturulan bir i.
Terimler Szl 259

maintenance plan (bakm plan): Yedeklemeler veya yeniden indeksleme gibi bir veritabannn
bakmn gerekletirmekle ilgili bir veya daha fazla grevden meydana gelen, bir SQL Server
Integration Services (SSIS) paketi.

managed code (managed kod): .NET Framework alma zaman tarafndan ynetilen kod.

margin (marj): Kullanc arayznde, bir kontroln etrafn eviren boluk (piksel) miktar.

marshal-by-reference (MBR): Bir marshal-by-reference nesnesi, istemci makinede bulunan bir


proxy nesnesi tarafndan referans verilen uzak bir nesnedir. Marshal-by-reference nesneleri su-
nucuda bulunur.

marshal-by-value (MBV): Bir marshal-by-value nesnesi, istemci makineye kopyalanan uzak bir
nesnedir; proxy nesnesi gerekli deildir.

marshaling: Tip verilerini farkl altrma ortamlar boyunca tamak.

mask (maske): Bir MaskedTextBox iinde girilecek ve grntlenecek metnin biimi.

master page (master sayfa): Bir veya daha fazla ContentPlaceHolder kontroln ieren bir ab-
lon. erik sayfalar, tam bir sayfa oluturmak iin ContentPlaceHolder kontrollerini doldurur. Mas-
ter pageler, tutarl bir yapya sahip olmak ve tekrarlanan sayfa elementlerini oluturmak zere
gereken zaman azaltmak iin bir web sitesinde birden fazla sayfay etkinletirir.

MD5: Message Digest hashing algoritmas. MD5 algoritmas iin hash boyutu 128bittir.

MDI child: Bir MDI parent formunun ierdii bir form.

MDI parent: MDI child formlar ieren, barndran ve organize eden bir form.

media set (ortam seti): Bir yedein depoland dosya ve/veya manyetik bant listesi.

medium trust (orta dzey gven): Microsoft Prescriptive Architecture Group tarafndan neril-
diine gre, ASP.NETin altnda altrlmas gereken izinler seti. Bu dzey, registry ve event log
eriiminde kstlamalar ierir ve davetsiz bir misafirin neden olabilecei zarar en aza indirmeyi
amalar.

memory leak (bellek szmas): Bellekle ilgili kaynan geri alnmayacak ekilde szmas soru-
nu.

MenuStrip: ToolStripMenuItem kontrollerini barndracak ekilde zelletirilmi bir ToolStrip kon-


trol.

merge replication (birletirme replikasyonu): Birden fazla sunucunun kopyalanan verileri de-
itirmesini salayan ve birden fazla sunucu iindeki veri deiikliklerini izlemek zere benzersiz
tanmlayc stunlar, triggerlar ve tablolar kullanan bir replikasyon tipi.

MERGE: Bir blm fonksiyonundan bir snr noktasn kaldran ilem.

message (mesaj): Bir Service Broker uygulamasndaki temel veri birimi. lenmesi gereken tm
bilgileri ierir.

message layer security (mesaj katman gvenlii): stemcinin kimlik denetimini yapmak iin
kullanlan public key mesaja dahil edilir.

message queue (mesaj kuyruu): Sreler aras iletiim iin kullanlan bir bileen. Mesajlama
iin bir kuyruu veya kontroln, ieriin ya da nesnelerin aktarlmasn kullanr. Datk uygulama
mimarisinde mesaj gnderilmek istenen istemciye mesaj iletilemezse kuyruk kullanm hayat kur-
tarc olacaktr ve mesaj kayb olmayacaktr.
260 Ek - A

Message Transmission Optimization Mechanism (MTOM): Oluturma becerisini ve optimum


veri sktrmasn salayan tekniklerin bir kombinasyonuyla, ikili verileri bir SOAP mesajnda ilet-
mek iin kullanlan bir biim.

message type (mesaj tipi): Bir mesajn belirli bir uygulamasnn ad. Bir mesaj gvdesinde izin
verilen olas biimleri tanmlar.

messaging protocols (mesajlama protokolleri): ki taraf arasndaki iletiim iin metot. Bu


metot, hangi tipte nesnelerin oluturulabilecei ve neleri ierebilecekleri hakknda belirli kurallar
ierebilir.

metadata: Dier verileri aklayan veriler.

method (metot): Eylem veya komut olarak da bilinir. Metodu izleyen URLi kullanarak, web sunu-
cusu tarafndan gerekletirilecek eylemi gsterir.

Metot arlar arasnda veri deerlerini koruma ve dolaysyla, tm deikenleri parametreleri


olarak aktarma gerekliliinden kanma becerisini temsil eder.

Microsoft Distributed Transaction Coordinator: Kantlanm transaction ileme teknolojisini


kullanan Microsoft Windows platformlar iin datk bir transaction yardmc program. Sistem
baarszlklarna, sre baarszlklarna ve iletiim baarszlklarna kar dayankldr; lekle-
nebilir performans salamak iin gevek ekilde elenmi sistemleri kullanr. Kurulmas, yaplan-
drlmas ve ynetilmesi kolaydr.

Microsoft Installer: Microsoft Installer (.msi) dosyas, Microsoft Windows tarafndan desteklenen
bir datm paketidir. Microsoft Installer, uygulamalar kurmak iin kullanlan bir uygulamadr. He-
def sistemde bulunan kurulum mant sayesinde bir Microsoft Installer datm paketi, genellikle
standart kurulum programlarndan ok daha kktr.

Microsoft Message Queuing (MSMQ): MSMQ teknolojisi, farkl zamanlarda alan uygulama-
larn, geici olarak evrim d olabilecek heterojen alar ve sistemler zerinden iletiim kurma-
sn salar. MSMQ garantili mesaj teslimini, verimli ynlendirmeyi, gvenlii ve ncelik tabanl
mesajlamay salar. Hem asenkron, hem de senkron mesajlama senaryolar iin zmleri
uygulamak zere kullanlabilir. Cep telefonlarndaki smsler bu sisteme rnek gsterilebilir. Mesaj
gnderildii zaman alcnn telefonu ak olmasa bile belirlenen sre zarfnda mesaj kuyrukta
bekletilecektir.

mirror failover: Bir mirror veritabannn principala terfi ettirildii ve kurtarld sre. Bu sre,
ayn zamanda veritaban mirroring oturumundaki principal otomatik olarak mirrora drr.

mirror: Bir veritaban mirroring oturumunda, Bir kurtarma durumunda bulunan, hibir balantya
izin vermeyen ve principaldan deiiklikleri almakta olan veritaban.

mirrored backup: SQL Servern verileri bir defa yedekledii ama bir tek yedekleme ileminde bir
veritabannn birden fazla kopyasn oluturan bir sre.

Mixed Mode kimlik denetimi: SQL Server instancelarna balant teebbslerinin geerlilik kon-
trol iin kullanlan iki mekanizmadan biri. Kullanclar, balanrken bir SQL Server oturum IDsi
ve parolas belirtmelidir. SQL Server rnei, balantnn baarl olmasna izin vermeden nce
oturum IDsi ve parolasnn geerliliini kontrol eder. Bir iletim sistemi kullancsna elenmemi
SQL Server oturumlar oluturabilirsiniz. Windows dndaki kullanclara eriim salamak iin
Mixed Mode kimlik denetimini kullanrsnz. (Bkz. Windows kimlik denetimi.)

mock object (taklit nesne): Gerek bir class taklit eden bir nesne. Temel ilevselliin yannda,
metot arlarnn ve zellik deerlerinin de bir taklidini ierir.
Terimler Szl 261

mockup: Uygulamann navigasyonunu, gereksinimlerini ve kullanm durumlarn dorulamaya


yardmc olan kullanc arayz ekranlarnn seti; kullanc arayz mockup veya yatay prototip
(horizontal prototype) olarak da adlandrlr.

modal (kipli): letiim kutusu grntleme kipi. Bir iletiim kutusu kipli olarak grntlendiinde,
iletiim kutusu kapatlana kadar uygulamann ana threadi durdurulur.

modeless (kipsiz): letiim kutusu grntleme kipi. Bir iletiim kutusu (Dialog box) kipsiz olarak
grntlendiinde, iletiim kutusu akken uygulamann ana threadi devam edebilir.

module (modl): Bir assembly iindeki tipler iin bir tek konteyner. Bir assembly bir veya daha
fazla modl ierebilir.

monitor server (izleme sunucusu): Bir log tama srecini izleyen ve sre baarsz olduunda
uyar veren bir SQL Server veritaban motoru rnei.

monitoring (izleme): Bir uygulamann durumu, ilerleyii veya sorunlar hakkndaki bilgilerin ger-
ek zamanl (veya gerek zamanlya yakn) olarak izlenmesi.

monolog: Bir tek u noktas ve herhangi bir saydaki hedef u noktalar arasnda meydana gelen
bir konuma. Bu konuma tipi SQL Server 2005te mevcut deildir.

multifile assemblies (ok dosyal assemblyler): Gerektiinde bamsz olarak yklenebilecek


birka modle blnen bir assembly.

multiple condition coverage (birden fazla koulu kapsama): Branch coverage (dallanmay
kapsama) iin kullanlan dier (ve daha doru) bir ad. Bir If ifadesindeki her bir koulun, birim
testleri tarafndan kodun hangi blmlerine hitap edildiinin belirlenmesine dahil edilmesi gere-
ine karlk gelir.

multiple-document interface (MDI): Bir tek belge tipinde birden fazla rnei barndran bir kulla-
nc arayz konteyneri. rnek olarak, bir izim programn veya bir alma sayfas uygulamasn
dnebilirsiniz.

multiplicity (okluluk): ki nesne arasndaki bir ilikide yer alan nesne saysnn tanm. Bunlar
bire bir, birden oa veya oktan oa olabilir.

Multipurpose Internet Mail Extensions (MIME) tipi: Web taraycsna gnderilmekte olan kay-
nak tipinin bir gstergesidir. Tip ve alt tip olmak zere iki blmdr; birinci blm kaynak tipi ve
ikinci blm de kaynak alt tipidir.

Multipurpose Internet Mail Extensions (MIME): Binary verilerin Internet zerinde yaynlanma-
sn ve okunmasn salayan bir standart. Binary verilere sahip bir dosyann bal, verilerin
MIME tipini ierir. Bu, istemci programlara (Web tarayclar ve e-posta istemcileri gibi) verileri dz
metin olarak ileyemeyeceklerini bildirir.

N
named instance (adlandrlm rnek): Dier adlandrlm rneklerden ve ayn bilgisayar ze-
rindeki varsaylan rnekten ayrt edilmesini salamak zere kendisine bir ad verilen bir SQL Ser-
ver kurulumu. Adlandrlm bir rnek, bilgisayar ad ve rnek adyla tanmlanr.

naming container (adlandrma konteyneri): Kontrol adlar iin benzersiz bir namespacei ta-
nmlar. Bir adlandrma konteynerinin iinde her kontrol benzersiz ekilde tannabilmelidir.

narrowing (daraltma): Hedef tip kaynak tipten gelen olas tm deerleri barndramadnda,
bir deerin bir tipten dierine dntrlmesi. Bu dnmler C# ve eer Option Strict etkinse,
Visual Basicte ak olmaldr.
262 Ek - A

nested trigger (i ie yerletirilmi trigger): Dier bir triggern atelenmesine neden olan kodu
altran bir trigger.

Network Service hesab: Kimlik denetimi yaplm kullanclarn hesaplarna benzeyen zel bir
yerleik sistem hesab. Bu hesap, sistem kaynaklarna ve nesnelerine User grubunun yeleriyle
ayn dzeyde eriime sahiptir. Bu hesap altnda alan servisler, bilgisayar hesabnn kimlik bilgi-
lerini kullanarak a kaynaklarna eriirler. Bu hesabn SQL Service veya SQL Server Agent servis
hesab iin kullanlmas nerilmez.

neutral culture (ntr kltr): Sadece bir tek dili belirten bir kltr tanmlar. zel kltrlerden
farkl olarak, ntr kltrler para birimi veya say biimlendirmesini belirtmez. Ntr kltrler iki harfli
ksaltmalara sahiptir; rnein spanyolca iin es, Franszca iin fr ve ngilizce iin en.

No Recovery kipi: Kullanllk amacyla bir log tama konfigrasyonunu kullanrken kullandn
bir kip. No Recovery kip, kullanclarn sorgu iin ikincil veritabann kullanmamasn salar.

node: Bir datm yerinin bir UML temsili. Genellikle bir donanm parasn (bir sunucu gibi) temsil
eder.

noise words: Bir dilde sk kullanlan, indeks poplasyonu ve tam metin sorgular tarafndan ihmal
edilen szckler.

nonclustered indeks: Bir tablo iindeki veri sayfalarnn sralanmasna neden olmayan bir in-
deks tipi. Tablo bana 249a kadar nonclustered indeks oluturabilirsiniz.

nondeterministic function: arld her sefer farkl bir deer dndrebilen fonksiyon. Geerli
sistem tarihi ve zamann dndren yerleik SQL Server GETDATE() fonksiyonu buna bir rnek-
tir. (Bkz. deterministic function.)

nullable type: Nothing/null olarak deer atanabilen bir deer tipi.

O
object role modeling ORM (nesne rol modelleme): Gerek dnya kavramlarn ve bunlarn
ilikilerini temsil eden bir diyagram. Yazlmnzn mantksal bir modelidir.

one-way (tek yn): stemci tarafl ilemenin, sunucuda ne olursa olsun devam etmesini salayan
mekanizma. Yaplan ilemin sonucuna, durumuna baklmaz.

online index creation (evrimii indeks oluturma): Altta yatan tabloda meydana gelen i-
lemleri okuyup yazarken bir indeks ina etmenizi salamak zere satr versiyonlama teknolojisini
kullanan bir sre. Bu zellik sadece SQL Server 2005 Enterprise Editionda mevcuttur.

operating mode (iletim kipi): Bir veritaban mirroring oturumunun transactionlar ve mevcut
seenekleri nasl senkronize edeceini yneten bir konfigrasyon. iletim kipinden birini see-
bilirsiniz: High Availability, High Performance veya High Protection.

operator (operatr): Bir kiiye veya bir kullanc grubuna bir mesaj gndermek iin gereken bil-
dirim mekanizmasn ve parametreleri tanmlar.

optimistic concurrency (iyimser ezamanllk): ok kullancl veri eriimi iin bir teknik. Bu
teknikte, bir kullanc tarafndan okunurken satrlar kilitlenmez ve uygulamann, kullancnn bir
gncellemeyi gndermesine izin vermeden nce, satrn gncellenmediini dorulamas gerekir.

optimistic: Deiiklikler yaplrken kullanclar veri paralarnn dna kilitlemeksizin birden fazla
veri deiikliini ynetmenin bir yolu. Genellikle, eer veriler son zamanlarda deitirilmemise,
veri deiikliklerinin kaydedilmesine izin verir.

outer join (d ba): Bir sorguda birden fazla tabloyla alrken, tablolardan birinden veya her
ikisinden tm satrlar ve dier tablodan elenmeyen satrlar dndren bir join tipi. (Bkz. i ba.)
Terimler Szl 263

output parameter (kt parametresi): Bir stored procedureden dndrlen skaler bir deer.

override (ezmek): Bir miras ilikisinde, eer tretilen class bir metot iin base classa bal olmak
yerine metodun kendi uygulamasn ierirse, base classtaki metodun ezildii kabul edilir. En ok
kullanlan ToString() metodudur.

ownership chain (sahiplik zinciri): Bir parent nesneden bir veya daha fazla baml nesneye
giden, basamakl izinler seti.

P
padding (dolgu): Bir kontrolde, kontroln kenar ve kontroln iindeki dier eler arasndaki
boluk (piksel) miktar. rnein bir form paddinge sahip olduundan, kontroller kenara ok yakn
hizalanmaz.

page (sayfa): Sanal bir paging sistemi oluturmak iin, en kk ina blou olan bellek blm.
Sanal paging, bir iletim sisteminin sayfalar fiziksel bellekten fiziksel bir dosyaya tayarak, daha
fazla bellee sahip olmasn salar.

page fault (sayfa hatas): Bir bilgisayar belirli bir bellek sayfasn talep ettiinde, sayfa fiziksel
bellekte deilse meydana gelen bir kesilme. Bir sayfa hatasnn sonucunda, sayfann fiziksel bir
dosyadan yeniden elde edilmesi iin ilave ileme gerekir.

page output caching (sayfa ktsn n bellee alma): Gelecekteki talepler iin dinamik olarak
retilmelerini gerektirmemek zere, render edilen ASP.NET sayfalarnn kopyalarn depolayan
bir ASP.NET zellii.

page split (sayfa blmek): Bir sayfa verilerle doldurulduunda ve veri srasn korumak zere o
sayfaya dier bir satrn yazlmas gerektiinde meydana gelen sre. Daha sonra SQL Server,
indeks veya tabloya yeni bir sayfa ayrr ve tam sayfann stndeki verilerin yarsn yeni sayfaya
tar.

pair programming (e programlama): Kodu tasarlamak ve yazmak zere iki gelitiricinin bir tek
i istasyonunda (workstation) almas. Sklkla ar programlamann (extreme programming)
bir paras olarak kullanlr.

parameter (parametre): Veritaban sorgularn olutururken, SQL ifadeleri ve stored procedureler


gibi deyimlere alternatif deerler salamak iin kullanlan bir deiken.

parent node: Dier nodelar ieren bir node.

parse (zmleme): Bir XML yapsn analiz ve traverse etmek.

partial backup (ksmi yedekleme): Bir veritabannn sadece bir ksmnn yedeklenmesi sreci.

partial restore (ksmi geri ykleme): Bir veritabannn sadece bir ksmnn geri yklenmesi s-
reci.

partially trusted code (ksmen gvenilir kod): Korunan bir kaynaa her eriiminde code ac-
cess security (CAS) izin kontrollerinden gemesi gereken bir assembly.

partition function (blm fonksiyonu): Verileri blmlere ayrmak iin snr noktalarn tanm-
layan bir standalone nesne.

partition schema (blm emas): Bir blm fonksiyonunu fiziksel depoya eler.

partitioning (blmleme): Metodun ktsna gre edeerlerine dayanan gruplardaki girdi de-
erleri aralnn blm.

payload: Bir u noktas iin izin verilen ilemleri kstlar; TCP veya HTTP tipinde olabilir.
264 Ek - A

peer review (peer gzden geirme): Resmi veya gayri resmi olarak bir kodun gzden geirilme-
sine alma arkadalarnn dahil olmas sreci.

peer-to-peer replikasyon: Birden fazla sunucunun ayn ema ve verilere abone olmasn sala-
yarak, birden fazla sunucuda ayn anda deiikliklere izin veren bir tr transaction replikasyonu.

PerfMon: Bkz. System Monitor.

performance alert (performans uyars): Performance Monitor araclyla yaplandrlabilen bir


uyar. Bu uyar, performans sayalarna gre bir veya daha fazla kriter ierir. Kriter tarafndan
tanmlanan eik aldnda, kullanc tanml bir eylem gerekletirilir.

performance baseline (performans taban izgisi): Bir performans taban izgisi veya bench-
mark, bir uygulamann belirli kaynaklar ve yklerle nasl performans gstereceini ngrmek iin
kullanlr.

performance counter (performans sayac): Performans sayac, Windows Performance Moni-


tor tarafndan bir uygulamann bir unsurunun performansn izlemek iin kullanlr. Performans
sayalar, bir uygulama kurulurken uygulamaya dahil edilebilir veya .NET Framework kullanlarak
programlamayla oluturulabilir. Kodun, uygulamann performansn lmek iin en ideal yollardan
biridir.

performance modeling (performans modelleme): Uygulamanzn, iyi almas ve iyi alma-


ya devam etmesi iin gerekecek kaynaklar belirlemek zere prototipini oluturma sreci.

Performance Monitor: Sistem ve almakta olan uygulamalar hakkndaki eitli sayalarn iz-
lenmesini salamak zere iletim sistemine dahil edilen Windows uygulamas.

performance objects (performans nesneleri): Uygulama sunucusu zerindeki ilemciler, disk-


ler, bellek gibi belirli bileenlerin deerlerini lmek iin kullanlr. Ayrca, SQL Server ve Speech
Server gibi zel yazlm rnleriyle ilikili sistem bileenlerini lmek iin de kullanlr.

performance spike (performans tkanmas): lemci sresinin kullanmnda, bellek kaynakla-


rnda veya bir uygulamann kulland benzer kaynaklarda dikkate deer ve arpc bir art.

performance test (performans testi): Bir sitenin ve bir sitedeki sayfalarn hedef performans
gereksinimlerini karladn dorulayan bir test.

permission (izin): Bir code access security (CAS) access control entry (ACL).

permission set (izin seti): Birden fazla izinden meydana gelen bir CAS ACL.

pessimistic concurrency (ktmser ezamanllk): ok kullancl veri eriimi iin kullanlan bir
teknik. Bu teknikte, bir kullanc tarafndan okunurken satrlar kilitlenir ve satrn kullanc tarafn-
dan istendii zaman gncellenmesine izin verilir.

physical design (fiziksel tasarm): Bir sistemin her bir alma biriminin, ayr makinelerdeki,
srelerdeki veya dier tasarm elementlerindeki gerek dnya karlklarna ayrlmas.

physical design (fiziksel tasarm): Bir sistemin, farkl katmanlar ayr bilgisayarlarn veya veri
merkezlerinin zerine ayran fiziksel yerleimi.

Platform Invoke: Managed koddan unmanaged kodu armak iin kullanlan bir mekanizma.

point-in-time recovery: Transaction log yedeklemelerini kullanmak iin Full recovery modelini
kullanan bir veritabannn, veritabann zaman iinde yedeklemenin alnd zamanla akmas
gerekmeyen belirli bir zamana kurtarma becerisi. Eer gece yarsnda tam bir veritaban yedek-
lemesi yaplrsa ve saat 04:00da bir log yedeklemesi yaplrsa, veritaban gece yars ve 04:00
arasndaki herhangi bir zamana kurtarlabilir (rnein 03:41 veya 02:22 gibi).
Terimler Szl 265

policy assertion (politika iddias): zel bir gereksinim veya ayar.

policy expression (politika ifadesi): Bir veya daha fazla policy assertionn gruplandrlmas.

policy framework (politika platformu): Belirli bir web servisi veya web servisleriyle ilikilendiril-
mi gereksinimler veya ayarlar seti. Policy frameworklerin genellikle ilgilendii iki alan; ifreleme
ve dijital imzalardr.

polymorphism (ok biimlilik): alma zamannda, istemci kodu tarafndan farkl uygulamala-
ra sahip ayn adl yeler ile deitirilerek kullanlabilecek snflar tanmlama becerisi.

PostBack: Verileri sunucuya geri gnderir. Adn POST metodundan almasna ramen, GET
metodu kullanlarak da bir PostBack ilemi gerekletirilebilir.

precompiling (n derleme): Bir ASP.NET web uygulamasn ilk talepten nce derleyerek, bir
kullanc ilk web sayfasn talep ettiinde meydana gelecek gecikmeyi azaltan bir Publish Web
arac zellii.

primary data file (birincil veri dosyas): Bir veritaban katalou iin bilgileri ieren zorunlu bir
veri dosyas. Birincil veri dosyasnn nerilen uzants .mdfdir. (Bkz. ikincil veri dosyas.)

primary database (birincil veritaban): Log tama ile dier sunuculara datlan orijinal verita-
ban. Birincil veritaban, uygulamadan gncellemeleri alr. (Bkz. ikincil veritaban.)

primary filegroup (birincil dosya grubu): Birincil veri dosyasn ieren dosya grubu. Tm sis-
tem tablolar birincil dosya grubuna ayrlr.

primary key (birincil anahtar): Bir veritaban tablosunda, bir satr benzersiz ekilde tanmlamak
iin kullanlan bir deer.

primary server (birincil sunucu): Birincil veritabanna sahip olan SQL Server veritaban motoru
rnei. (Bkz. ikincil sunucu.)

principal policy: .NET Frameworkn, geerli principal bir uygulama tarafndan kuyrua alnd-
nda hangi varsaylan principaln dndrleceini belirlemek iin kulland ema.

principal: Bir veritaban mirroring oturumunda kurtarlan ve evrim ii olan ve kendisine kar
transactionlarn ilenmesine izin veren veritaban.

PrintDocument: Yazdrmada birincil bileen. Bir PrintDocument bileeni, yazdrlan bir belgeyi
temsil eder.

PrintPreview: Yazdrlan belgenin ekran stndeki n izlemesi. Bir PrintDocument bileeninin n


izlemesini bir PrintPreviewDialog veya bir PrintPreviewControl iinde grntleyebilirsiniz.

private assembly: Bir uygulamann kurulum dizinine yerletirilen bir assembly. Buradaki yerle-
iminden dolay, bu assembly sadece o uygulama tarafndan kullanlr ve dier uygulamalarla
paylalmaz.

privileged mode (ayrcalkl kip): Bazen ekirdek kipi (kernel mode) ilemeye verilen bir ad.

process (sre): Halihazrda almakta olan bir uygulama. Sreler kaynak izolasyonuna im-
kan verir.

profiling (profil oluturma): Performansn yannda bellek ve kaynak kullanm iin de kodu test
etmek. Profil oluturma, kendi kaynaklarna sk ekilde elenmi (tightly coupled) ve ok dk
dzeyde, zel sonular render etmek zere tasarlanm aralar kullanarak, uygulamann lm-
lerini izlemenin bir yoludur.
266 Ek - A

proof-of-concept prototype: Bir zelliin, sistemin mimarisi boyunca tam bir uygulamas. Uy-
gulamay ynn tamamnda yani tm katmanlarda (UI, servisler, business objects ve veritaban)
inceler. Teknoloji nerilerini ve yksek dzeyde tasarm dorulamak iin kullanlr.

protected configuration (korunumlu konfigrasyon): Konfigrasyon dosyalaryla kullanlan,


dosyann blmlerinin ilem annda ifrelenmesine ve zlmesine izin veren mekanizma.

protocol handler (protokol yneticisi): Bir word breaker iin varbinary ve grnt stunlarn-
dan metin verilerini karmak iin bir veya daha fazla filtre kullanan bir sre.

provider classes (salayc snflar): Bir veri deposu ve istemci uygulama arasnda veri transferi
iin kullanabileceiniz classlar.

proxy object (proxy nesnesi): Bir proxy nesnesi, dier bir nesneyi temsil etmek iin kullanlr.
.NET balamnda bir proxy nesnesi, sunucu tarafndan etkinletirilmi marshal-by-reference uzak
nesneleri iin oluturulur.

proxy: Bir XML Web servisi proxysi, bir web servisiyle iletiim kurmak iin retilen ve kullanlan
bir class temsil eder.

Pseudo code: Karmak bir algoritmay kod benzeri metin halinde gsteren kod. Kod (model
deil) yazanlar ve okuyanlar iin kullanl olabilir.

publisher policy (yaymc politikas): Bir assemblynin yazar tarafndan retilen, assemblynin
farkl versiyonlaryla uyumluluu hakkndaki dijital bir ifade. Assemblyler yklenirken, CLR bir
assemblynin hangi versiyonunun yklenmek iin uygun olduunu belirlemek zere yaymc poli-
tikasn kullanr.

pull subscription: Distribution Agent veya Merge Agentn Distributorda alt ve subscription
Distributordan Subscribera eken bir subscription.

Q
quality of service QOS (servis kalitesi) gereksinimi: Sistem iin performans, leklenebilirlik
ve standartlar gibi gz nne alnan unsurlarda ilevsel olmayan gereksinimleri tanmlayan bir
gereksinim.

QueryString: URLin sonuna bir soru iareti (?) eklenerek ve sonra QueryStringe bititirilerek
web sunucusuna aktarlabilecek, ampersand (&) karakterleriyle ayrlm anahtar=deer ifadeleri-
nin bir koleksiyonu.

queue (kuyruk): SQL Server iindeki, gnderilen veya alnan tm mesajlar ieren gizli bir tab-
lo.

queue reader (kuyruk okuyucu): Bir kuyruktan mesajlar alan bir nesne. Bu nesne bir stored
procedure veya dier bir uygulama olabilir.

quit network: Test laboratuvar trafii dnda hibir ilave trafie sahip olmayan bir a.

R
RAID: Redundant Array of Independent Disks. Yazlm araclyla yaplandrlabilir veya bir do-
nanm aygt olarak bulunabilir. Tekrarllk salamak ve I/O performansn artrmak iin kullanr.

RAID 0: Stripe set adnda bir disk dosya sistemi oluturduundan, disk striping olarak da bilinir.
RAID 0, okuma ve yazma ilemleri iin performans gelitirir; nk bu ilemleri set iindeki tm
diskler boyunca datr. RAID 0, hata tolerans salamaz.

RAID 1: Disk mirroring olarak da bilinir; seilen diskin fazladan bir kopyasn salar. RAID 1 oku-
ma performansn gelitirir ama yazma ilemlerinin performansn drebilir.
Terimler Szl 267

RAID 5: En popler RAID dzeyidir. RAID 0n yapt gibi verileri RAID setindeki diskler boyunca
datr ama RAID 5 ayn zamanda, hata toleransn salamak zere parite bilgilerini de ekler.
Parite bilgileri tm diskler boyunca datlr. RAID 5, RAID 1den daha iyi performans salar ama
disk baarsz olduunda okuma performans der.

RC2: Deiken anahtar boyutlarn kullanan DESin (Data Encryption Standard) yerini almak ze-
re tasarlanm bir simetrik ifreleme standard.

RCW (Runtime Callable Wrapper): Bir COM bileeni ve bir .NET assemblysi arasnda yer alan
bir proxy snf; .Net assemblysinin COM bileenine eriip iindeki metotlarn kullanlmasn sa-
lar

read-only filegroup (salt okunur dosya grubu): Deitirilmemesi gereken veritaban nesne-
lerini (gemi tablolar gibi) tutmak zere yaplandrlm bir dosya grubu. Birincil dosya grubu
dndaki tm dosya gruplar salt okunur olarak yaplandrlabilir.

receive (almak): Bir mesajn kuyruktan kaldrlmas.

recovery model (kurtarma modeli): Transactionlarn loga nasl kaydedildiini kontrol eden bir
veritaban seenei; transaction logunun yedeklenip yedeklenmeyeceini ve mevcut geri ykle-
me seeneklerini kontrol eder. Ayrca, kurtarma amacyla bir veritabannn altnda alt mo-
deldir.

recursive trigger: Kendisinin dorudan veya dolayl olarak arlmasna neden olan bir trigger.
Dngye giren trigger da denebilir. Snrsz dngye girmesi veritaban sunucu zerinde yapla-
cak ayarlar ile engellenebilir.

reference architecture (referans mimari): Gelitirme ekibi iin uygulamann dey yn bo-
yunca bir referans uygulamas salar. Gelitiricilere, kodlarn nasl uygulamalar gerektiini gs-
teren bir model salar. Bir referans mimari, tpk bir proof-of-concept prototipi gibidir.

Registration Entries dosyas: Windows Registry anahtarlar ve alt anahtarlar hakknda bilgi
ieren bir dosya. Bu dosya, registry bilgilerini bir sistemden dierine ihra ve ithal etmek iin
kullanlr.

regular expression: Metnin baz ksmlarn karmak veya metni deitirmek zere kullanlabil-
mesi iin, stringin belirtilen biim gereksinimlerini karlayp karlamadn belirlemek amacyla
bir string ile karlatrlabilecek bir karakter seti. rnein, e-postann dzgn formatta girilip
girilmediinin kontrol veya e-posta konusunun kontrol gibi.

reliability testing (gvenirlik testi): Stres testinin bir dier ad.

remote method (uzak metot): Kendini aran makineden farkl bir makine zerinde ileyen bir
metot.

remote object activation (uzak nesne etkinletirmesi): Bir istemcinin uzak bir nesnenin bir r-
neini oluturabilmesi iin, o nesnenin etkinletirilmesi gerekir. .NET Framework iki etkinletirme
kipini salar; sunucu etkinletirmesi ve istemci etkinletirmesi. Sunucu tarafndan etkinletirilen
nesneler, SingleCall veya Singleton olabilir.

Remoting: Farkl bilgisayarlarda bulunan nesneleri, hepsi ayn uygulamaya aitmi gibi arma-
nz salayan datk teknoloji.

replacing an exception (bir istisnay deitirmek): Baz durumlarda, frlatlan bir exceptionn
dorudan istemciye geri gnderilmemesi gerekir. Bu bir exceptionn sarmalanmasna benzer;
ancak deitirme durumun, InnerException zellii bo braklr.

replay trace (tekrar izi): Bir test sistemine kar bir i ykn tekrarlamak iin oluturulan zel
bir iz tipi.
268 Ek - A

replication agent (replikasyon agent): Replikasyon srecini altran bir program. En nemli
replikasyon agentlar Snapshot, Log Reader, Distribution, Merge ve Queue Readerdr.

request (talep): Web taraycsndan web sunucusuna iletiimi ynetir. Ayn zamanda ASP.NETte
Request nesnesi olarak da temsil edilir.

response (cevap): Web sunucusundan web taraycsna iletiimi ynetir. Ayn zamanda ASP.
NETte Response nesnesi olarak da temsil edilir.

restore strategy (geri ykleme stratejisi): Bir veritabannn, izin verilen almama ve maksi-
mum veri kayb miktar iin mesleki gereksinimleri karlarken, kurtarlabilmesini salamak zere
tasarlanm sre. Bir geri ykleme stratejisi olmazsa, bir veritabannn yedeklenmesinin hibir
amac olmayacaktr.

retention (saklama): Bir kuyruun, konuma aka kapatlana kadar bir konumayla ilgili tm
mesajlar korumasn salar.

reverting a database (bir veritabann eski durumuna dndrmek): Kaynak veritabann bir
Database Snapshottan kurtarma sreci.

rig: Test laboratuvar donanmna (agentlar ve denetleyiciler) uygulanan bir terim.

Rijndael: 128 ila 256 bit anahtar boyutlarn kullanan simetrik bir ifreleme algoritmas. Bir hk-
met ifreleme standard olan bu algoritma AES olarak da bilinir.

roaming (dolam): Kullanc irket andaki dier makinelere oturum atnda, kullanc bilgile-
rinin kullancyla birlikte gitmesini salayan bir Windows profil oluturma mekanizmas.

role (rol): zinleri ynetmek iin kullanclar gruplandrma veya snflandrma yntemi.

role-based security (RBS): Kullanclarn kimlik denetimini yapmak ve sonra kullanc hesaplar-
na ve grup yeliklerine atanan izinlere gre onlar yetkilendirmek.

Roles: ASP.NET uygulamalar iin grup yeliini tanmlayan bir class.

roll back (geri sarma): Bir kurulumun baaryla tamamlanmad durumlarda gerekletirilen bir
eylem. Geri sarma, baarszlk noktasna kadar yaplan tm deiikliklerin geri alnmas anlam-
na gelir; bunun sonucunda makine, kurulum teebbsnden nceki durumuna geri dndrlr.

root node: Dier bir dmn iermedii ve tm dier nodelarn atas olan bir node.

Runtime Callable Wrapper (RCW): Bir .NET assemblysi ve bir COM bileeni arasnda yer alan
bir proxy snf; .Net assemblysinin COM bileenine eriip iindeki metotlarn kullanlmasn sa-
lar.

S
sampling rate (rnekleme hz): Analog bir sesi dijital bir temsiline dntrmek iin saniye
bana toplanan ton (veya veri noktas) says. Saniye bana rnek says arttka, sesin kalitesi
de artar.

satellite assemblies (uydu assemblyler): Farkl kltrler iin yerelletirme kaynaklarn ieren
ve ana assemblynin dnda yer alan assemblyler.

SAX: Bkz. Simple API for XML (SAX).

scalar function (skalar fonksiyon): Bir tek deeri dndren bir fonksiyon.

schema (ema): Bir tek namespaceden veritaban nesnelerinin bir koleksiyonu. emalarn te-
mel faydas, emalarn ve kullanclarn ayrlmasdr.
Terimler Szl 269

schema collection (ema koleksiyonu): Bir ad araclyla birbirine balanan bir veya daha
fazla XML emas. Bir Service Broker uygulamasnda bir mesajn gvdesinin geerliliini kontrol
etmek iin kullanlr.

screen reader (ekran okuyucu): Bir web sayfas zerindeki metni sesli szcklere veya kabart-
ma Braille metnine eviren zelletirilmi bir web taraycs arac.

secondary data file (ikincil veri dosyas): Nesneleri ve verileri ieren istee bal dosyalar. Bir
veritaban maksimum 32,766 ikincil dosya ierebilir. kincil bir veri dosyas iin nerilen uzant
.ndfdir. (bkz. birincil veri dosyas.)

secondary database (ikincil veritaban): Log tama sonucunda doan birincil bir veritabannn
datk kopyas. SQL Server, ska transaction log geri yklemeleri araclyla ikincil veritabann
senkronize eder. (Bkz. birincil veritaban.)

secondary server (ikincil sunucu): kincil bir veritabanna sahip olan SQL Server veritaban
motoru rnei. Birden fazla ikincil sunucu yaplandrabilirsiniz. (Bkz. birincil sunucu.)

Secure Sockets Layer (SSL): A iletiimlerini korumak iin public key ifrelemesi kullanan bir
standart.

security access control list (SACL): Dosya veya klasr eriiminin nasl denetleneceini belirle-
yen bir kullanm event logging mekanizmas.

security plan (gvenlik plan): Gelitirme dngsnn tasarm aamasnda oluturulmas ve


uygulama verilerinin gizlilii, btnl ve kullanlabilirlii iin gvenlik politikalarn iermesi ge-
reken bir plan.

security policy (gvenlik politikas): Kod gruplarnn, izin setlerinin ve zel politika
assemblylerinin mantksal bir gruplandrmas.

semistructured data (yar yaplandrlm veri): rnekten rnee deien ve istee bal ele-
mentleri tanmlayan XML verileri. ema heterojendir ve ilikisel bir yap kullanlarak kolayca tem-
sil edilemez. (Bkz. yaplandrlm veri; yaplandrlmam veri.)

send (gnderme): Bir mesaj kuyrua almak.

sequence diagram (sekans emas): Bir kullanm durumunu gerekletirmek zere nesneler
arasnda birlikte alan mesajlar sekansn gsteren bir ema. Bir sekans emas, bir mesaj ak-
n soldan saa ve yukardan aaya gsterir.

serialization: Nesnelerin depolanabilmesi veya transfer edilebilmesi ve daha sonra yeniden


oluturulabilmesi iin serialize ve deserialize edilme sreci.

server control (sunucu kontrol): Kontrolden gelen olaylara cevap vermek zere sunucu tarafl
kod yazlarak programlanabilen bir kontrol.

service (servis): Bir kullanc arayz olmakszn, kendi kullanc oturumunda, arka planda al-
an bir sre.

service master key (servis ana anahtar): Bir SQL Server 2005 rneini kurduunuzda otoma-
tik olarak oluturulan simetrik bir anahtar. Veritaban motoru, bal sunucu parolalarn, balant
stringlerini, hesap kimlik bilgilerini ve veritabannn tm ana anahtarlarn kriptolamak iin servis
ana anahtarn kullanr.

session state (oturum durumu): Web sitenize yapt belirli bir ziyarette sadece kullanc tara-
fndan grntlenen sayfalardan eriilen, Session nesnesinin iinde depolanan veriler.

setting (ayar): Propertylerin (zelliklerin) uygulama oturumlar arasnda kalc olabilmesini sa-
layan bir deer. Ayrca uygulama ayar olarak da adlandrlr.
270 Ek - A

setup project (kurulum projesi): Visual Studio ile oluturulan kurulum projeleri, bir uygulamay
datmak iin kullanlabilecek installer (.msi, .exe) dosyalarn retmek iin kullanlr.

SHA1: Secure Hash Algorithm 1. SHA1 algoritmas iin hash boyutu 160 bittir.

shadow (glge): Bir uygulamay tretilmi classla bir base classa gizleme ve deitirme bece-
risi.

shadowing: Tretilmi bir classla, bir implementasyonu bir base classta gizleme ve deitirme
becerisine karlk gelir.

shared assembly (paylalan assembly): GACye (global assembly cache) yerletirilen ve bu


nedenle bir makinedeki bir veya daha fazla uygulama tarafndan kullanlabilen bir assembly.

shared secret (paylalan sr): Simetrik bir ifreleme anahtar.

showplan: Sorgu optimizer tarafndan retilen bir sorgu plannn grafiksel veya metin tabanl
bir grafii

shredding (paralama): XML verilerini, ilikili tablolarda depolanmak zere uygun bir biime
dntrme sreci.

signature (imza): Bir yenin dn tipi, parametre says ve parametre tipleri.

Simple API for XML (SAX): Bir XML yapsn traverse etmek iin kullanlan bir API (application
programming interface). SAX, XML yapsnn tamamn bellee yklemek ve bir grafii yeniden
oluturmak yerine, aataki her bir node tabannda gezinir ve gezilen nodeun her zmleme
olay iin bir olay karr (bir nodeun balangc veya sonu gibi).

Simple Message Transfer Protocol (SMTP): Standart istemciler e-posta mesajlarn posta su-
nucularna ve posta sunucular, mesajlar kendi aralarnda aktarmak iin kullanr.

Simple recovery model: Veritaban motorunun ilemlerinin ounu minimal olarak loga kay-
dettii ve her checkpointten sonra transaction logunu sildii bir kurtarma modeli. Bir Simple
recovery modelde, transaction logu yedekleyemez veya geri ykleyemezsiniz. Ayrca, her bir veri
sayfasn da geri ykleyemezsiniz. (Bkz. Bulk-Logged recovery model; Full recovery model.)

single-document interface (SDI): Kendilerine zg uygulama ekranlarn ve kontrollerini ynet-


mek iin oluturulan bir kullanc arayz. Bu uygulama tipi bir belge tipine odaklanmaz. Bunun
yerine, mesleki domaine gre bir zellikler seti salar. Alan her ekran ayr ayr alr.

skin dosyas: Kontroln nasl grnmesi gerektiini tanmlayan bir veya daha fazla kontrol zel-
liini ieren bir dosya. Skin dosyalar ASP.NET temalarnn bir parasdr.

SMO: Bkz. SQL Server Management Object (SMO).

snapline: Form Designerda, kontrollerin dier kontrollere hizalandn veya marj ve dolgu tara-
fndan hesaplanan snrlara ulatn gsteren bir gsterge.

snaplines: Kontrol hizalamasna yardmc olmak zere IDEde beliren grsel yardmlar.

snapshot replication (enstantane replikasyonu): Subscriber ve Publisher senkronize etmek


zere her altnda tm verileri kopyalayan bir replikasyon tipi.

SOAP: Talep ve cevap parametreleri iin bir kodlama emas olarak XMLi kullanan ve transport
mekanizmas olarak HTTPyi kullanan, platformdan bamsz bir veri eriim protokol.

SOAP with Attachments (SwA): Dosyalar web servislerine ve web servislerinden transfer et-
mek iin MIME ve SOAPn bir kombinasyonunu kullanan bir teknik.
Terimler Szl 271

SoapSuds: SoapSuds yardmc program .NET Framework 2.0 ile gelir ve uzak bir nesneden
metadatann karlmas iin kullanlr ve uzak nesneyi yeniden oluturmak zere metadatay
kullanr.

source (kaynak): Bir veritabann yklerken, verilerin geldii yer. Dz bir dosyadan bir veritaban
tablosunu yklerken, dz dosya kaynaktr. (Bkz. hedef veya var noktas.)

source database (kaynak veritaban): Database Snapshotn kendisine kar oluturulduu ve-
ritaban.

sparse file (seyrek dosya): Kendi yaps iinde en az bir ayrlmam yer blgesini ieren bir dos-
ya. Ayrma tablosu, dosyay oluturulduu zaman belirtilen boyutuyla listeler ama dosya iindeki
ayrlmam blgeler yznden, disk zerindeki boyut ok daha dktr.

specific culture (zel kltr): Hem dile, hem de kltre zg biimlendirme gereksinimlerini
belirten bir kltr tanmlar. Her zel kltr, iki harfli bir dil ksaltmasna ve iki harfli bir kltr
ksaltmasna sahiptir. rnein en-US ABD iin ngilizce dilini ve en-GB ngiltere iin ngilizce
dilini temsil eder.

SPID: Bkz. system process ID (SPID).

SPLIT: Bir blm fonksiyonuna yeni bir snr noktas ekleyen bir ilem.

sponsor: Bir sponsor genellikle, bir uzak nesnenin kira sresini veya mrn uzatabilen bir is-
temci uygulamasdr.

SQL Server Agent proxy: Bir i admnn SQL Server iindeki eitli alt sistemlere (SQL Server
Integration Services altrma motoru veya replikasyon motoru gibi) erimesini salamak iin
yaplandrdnz bir gvenlik yaps.

SQL Server Management Object (SMO): Microsoft Visual Studio 2005 gibi gelitirme ortamla-
ryla kullanlmak zere tasarlanm bir class ktphanesi. SQL Server iindeki nesnelere prog-
ramsal bir arayz salar. Uygulamanza referans olarak ekleyip veritaban sunucu zerinde prog-
ramsal olarak ilem yaplabilmesini salar.

SQL Server Profiler: SQL Server ile birlikte gelen ve SQL Trace iin bir grafik kullanc arayz
(GUI) salayan bir performans izleme arac. Herhangi bir zamanda veritaban sunucunuz zerin-
de yrtlen sorgular, bu sorgularn ne kadar srede yrtld gibi performansa ait izlemele-
rin yapld ara.

SQL Trace: SQL Serverda yer alan ve SQL Server iindeki hemen her alt sistemde bulunan
verileri toplamanz salayan bir olay API (application programming interface).

stack (yn): .NET Frameworkn bellekte deer tiplerine ayrd yer. Heapte ayrlan deiken-
lerden farkl olarak, geerli kod blouyla ilikili ereve yndan kaldrldnda, yn geri alnr.

stale: Veri kaynayla tutarl olmayan, n bellee alnm bir nesne. Genellikle, kaynak gncel-
lendiinde ama n bellek geersiz klndnda n bellee alnan bir nesne stale haline gelir.

Standby mode: Kullanclara, ikincil bir veritabanna salt okunur eriim vermek iin kullanlan bir
kip. Bu konfigrasyon, sorgular birden fazla sunucuya datmanz ve dolaysyla birincil sunucu-
nun i ykn azaltmanz salayarak uygulamanzn leklenebilirliini artrr.

state veya application state (durum veya uygulama durumu): Bir uygulama iin verileri temsil
eder. Bu durum, sisteminizin katmanlar arasnda hareket eder (kullancdan veritabanna ve ve-
ritabanndan kullancya).rnein kullanc adnn sitenin iindeki sayfalarda session yardmyla
dolamas.

stateless (durumsuz): Bileen dzeyinde verileri depolamadan alabilmek.


272 Ek - A

statistics (istatistik): SQL Server 2005 tarafndan oluturulan, bir stundaki deerlerin dat-
myla ilgili istatistik bilgiler.

stored procedure: SQL Server iinde depolanan ve uygulamalardan veya dier programlama
yaplarnn iinden arlabilen Transact-SQL veya CLR toplu i kodunun ad. Sorgularn tek bir
yerde depolanmasn ve izin verilen lde yrtlmesini salar.

streaming: Dijital medyay, bir a boyunca sreen bir ak halinde iletmek. Dijital medya, alnr
alnmaz istemci yazlm tarafndan oynatlr. Streaming, genellikle bir kullancnn bir dosyay oy-
natmadan nce indirmesini gereksiz klar.

stress test (stres testi): Bir uygulamann ar yk altnda nasl davrandn belirleyen bir test.
Stres testi, genellikle uygulamanzdaki krlma noktalarn bulabilir.

string summary (string zeti): char, varchar, varchar(max), nchar, nvarchar, nvarchar(max),
text ve ntext stunlarnda oluturulan istatistiklerde toplanan ilave bilgiler.

structure (yap): Dier tiplerden oluan, kullanc tarafndan tanmlanm bir deer tipi.

structured data (yaplandrlm veri): Bir kurala uyan XML verileri. likisel bir yap kullanlarak
kolayca temsil edilebilir. (Bkz. yar yaplandrlm veri; yaplandrlmam veri.)

stub: Bir bileen tarafndan sunulan ilevsellii taklit eden bir kod paras. Bir stub, uygulanabile-
cek veya tamamen test edilebilecek snflar ynetmek iin test srasnda kullanlr.

subquery (alt sorgu): Dier bir tablodan veya kaynaktan veri dndrmek iin daha byk bir
sorgunun bir paras olarak kullanlabilecek bir sorgu.

supercomputer (sper bilgisayar): leme becerilerinde dnyada liderlik eden ve ok sayda


grevi ok yksek hzlarda ynetebilen bilgisayar.

swallowing the exception (istisnay yutmak): Bir exception yakalayan ama yeniden frlatma-
yan veya bir Catch blou iinden yeni bir exception oluturmayan bir kodlama deseni.

SWITCH: tablolar arasnda iki blm takas eden, sonsuz derecede leklenebilen bir ilem.

symmetric algorithm (simetrik algoritma): Private key ifrelemesi olarak da bilinir. Bu metot,
bir mesaj imzalamak iin kullanlan anahtarn mesajn ifresinin zlmesi iin de kullanlmasn
gerektirir. Private keyin datlmas gerektiinden, public key metotlarna gre daha az gvenilir
olduu kabul edilir.

symmetric encryption (simetrik ifreleme): Verileri ifrelemek ve zmek iin bir tek gizli anah-
tar kullanan bir ifreleme teknii.

symmetric key (simetrik anahtar): Verileri kriptolamak ve ifreyi zmek iin kullanlan bir anah-
tar. En hzl ifreleme mekanizmasdr ve sk eriilen verilerin ifrelenmesi iin uygundur. (Bkz.
asimetrik anahtar; sertifika.)

synchronous (senkron): Ardk olarak meydana gelen (metodun arld srada) bir metodu
armann bir yolu. Programnn metot Ay ve sonra metot Byi arrsa, metot A dndrlene
kadar metot B arlmaz. .Net uygulamalarn standart alma prensibidir.

sysjobactivity: msdb veritabannda bulunan, SQL Server Agentn SQL Server ilerinin geerli
etkinliini kaydetmek iin kulland bir tablo.

sysjobhistory: msdb veritabannda bulunan, SQL Server Agentn ilerin gemi almalarn
izlemek iin kulland bir tablo.
Terimler Szl 273

System Monitor: Donanm, Windows alt sistemleri ve istatistiksel sayalar sunan dier uygula-
malar iin performans sayalarn yakalamak zere kullanlan, Windowsun salad bir perfor-
mans izleme arac. System Monitor, PrefMon olarak da bilinir.

system process ID (SPID): Bir SQL Server sunucusuna her balanty benzersiz olarak tanm-
layan bir say.

T
table (tablo): Bir veritaban iinde yer alan ve uygulamalar tarafndan depolanan tm verileri
tutan temel depolama yaps.

table-valued function (tablo deerli fonksiyon): Bir tablo deikenini dndren bir fonksiyon.

tail of the log (logun kuyruu): Bir transaction logun, henz yedeklenmemi commit edilen
transactionlar ieren ksm.

target veya destination (hedef veya var noktas): Bir veritaban yklenirken, verilerin gittii
yer. Dz bir dosyadan bir veritaban tablosu yklenirken, veritaban tablosu hedef veya var
noktasdr. (Bkz. kaynak.)

template (ablon): Visual Studioda yeni bir proje ina ederken kullanlan varsaylan ayarlar ve
biimleri temsil etmek iin kullanlr. ablon, yeni projeniz iin bir yapy yklemek iin kullanlabilir
ve balamanz salayacak belirli dosyalar ierebilir.

template control (ablon kontrol): Kullanc arayznn (sunumun) kontrol verilerinden ve


koddan ayrlmasna izin veren bir kontrol. ablonlu kontroller, doal olarak bir kullanc arayz
salamaz. Bunun yerine kullanc arayz, yerel ablonlar araclyla bir sayfa gelitiricisi tara-
fndan salanr; bu da, bir sayfa gelitiricisinin kontrol iin kullanc arayzn zelletirmesine
imkan verir.

temporary table (geici tablo): Karmak sorgularn ina edilmesini kolaylatrmak zere geici
olarak tanmlanabilen bir tablo. # iareti ile oluturulur.

test case (test durumu): Bir test durumu, bir kullanc gereksinimini veya kullanm durumunu
karlamak zere test uygulaycsnn altrd grevler setidir. Test durumu, testi yapan kiinin
atmas gereken admlar, test girdisini ve beklenen sonular tanmlamaldr. Test durumlar testi
yapan kiiler tarafndan yazlr ve Web, yk ve entegrasyon testlerini oluturmak iin kullanlr.

test fixture (test fikstr): Test durumunun altrlmasnda kullanlan ama kendisi altrlabi-
lir olmayan, bir grnt veya metin dosyas gibi bir yap.

test plan (test plan): Uygulamann birok adan dorulanmas iin kullanlacak strateji ve yak-
lam tanmlayan bir belge. Bir test plan, test yneticisi tarafndan oluturulur ve yazlm testinin
tm unsurlar zerindeki ayrntlar iermelidir.

test suite (test paketi): altrma ve ynetim ilemlerini kolaylatrmak zere mantksal kolek-
siyonlarda gruplandrlan bir veya daha fazla test durumu.

test-driven development (test gdml gelitirme): Herhangi bir kod yazmadan nce baar-
sz olan bir test yazma srecini ieren bir gelitirme metodolojisi. Test tamamlandktan (ve baa-
rsz olduktan) sonra, testin gemesi iin kod eklenir. Daha sonra proje, yeni durumla snfn (veya
snflarn) tasarmn gelitirmek zere, tm testlerin gemeye devam etmesini salayacak ekilde
yeniden faktrlere ayrlr.

test-driven development (test gdml gelitirme): Kod yazmadan nce testler oluturma
sreci. Test gdml gelitirmede, gelitiriciler ilk nce testi ve daha sonra, bu testleri karlayan
kodu yazar.
274 Ek - A

theme (tema): Kontroller iin varsaylanlar tanmlayan veya bir web uygulamasndaki tm say-
falar iin tutarl bir grnm salamak zere belirli kontrol ayarlarn ezen, skinler, CSS sayfalar,
grntler ve dier kaynaklarn bir seti.

themes (temalar): ASP.NETte, genel bir grnm tanmlamak zere bir sayfaya veya web
sitesine bir birim olarak uygulanabilecek kontrol zelliklerinin, stil sayfalarnn ve grntlerin bir
koleksiyonu.

think times (dnme zamanlar): Think times terimi, uygulama taleplerinden nce bir kulla-
ncnn dnmek iin harcad sreyi temsil eder. Kullanclarn bir ekran okumas, kararlar
vermesi ve veri girmesi gerekir. Test srasnda gerek kullanc ykn taklit etmek iin, bu zama-
n da taklit etmek isteyeceksiniz.

third-party control (third-party kontrol): Proje ekibi tarafndan oluturulmam veya salanma-
m bir kontrol. Gelitiriciler, zamanlama sorunlarn ve riski azaltmak iin bu kontrolleri kullanr.
Bir third-party kontrol, Visual Studio Toolboxa gml ve bir form zerinde kullanlan bir ara
veya BizTalk veya Commerce Server gibi tam bir uygulama olabilir.

thread safe: Verileri, bozulmadan birden fazla threadden ezamanl olarak kullanabilmek.

thread: Bir uygulamada dier ilemlerle ayn anda meydana gelen bir ilem. Ayn zamanda, bir
threadi oluturmak ve ynetmek iin kullanlan bir Thread class rneine de karlk gelebilir.
rnein, ayn ayda yaplmas gereken ilemler farkl threadler sayesinde yaplabilir. Standart
bir uygulama ierisinde her ilem sra ile yaplr ama thread sayesinde ayn anda birden fazla i
paras asenkron olarak altrlabilir.

timestamp (zaman damgas): Belirli bir eylemin meydana geldii zamana karlk gelen dijital
bir damga. Genelde bu deerler, kullanc etkileimi olmakszn sistem tarafndan otomatik olarak
ayarlanmaldr.

token: Bir tam metin indeksinde bir szcn sktrlm zel bir temsili.

Toolbox: Microsoft Visual Studio IDE iindeki, bir kontroln designera srklenebilecei pence-
re.

ToolStrip: ToolStripItemlar barndrmak iin kullanlan ve kullanc tarafndan alma zamann-


da kolayca yaplandrlabilen bir kontrol.

ToolStripItem: Bir ToolStrip iinde barndrlabilen kontrol. Bir men esini veya ToolStrip iin-
de barndrlabilen birka kontrolden birini temsil edebilir.

ToolStripMenuItem: Bir men esini temsil eden ve genellikle bir MenuStrip iinde barndrlan
bir kontrol.

trace (iz): Belirli bir SQL Tracei altrldnda kt olarak verilen olay ve veri stunlar.

trace events (iz olaylar): SQL Server iinde altrlan stored procedureler, veritaban dosya-
lar veya byyen ya da klen loglar veya retilen sorgu planlar gibi eylemler.

transaction log backup (transaction log yedei): Bir transaction logun etkin ksmnn bir yede-
i. Bu yedek, sadece commit edilmi transactionlar ierir ve alann yeniden kullanlabilmesi iin,
logun yedeklenmi ksmn kaldrr.

transaction log restore (transaction log geri yklemesi): Bir veya daha fazla transaction log
yedeini kullanan bir geri ykleme ilemi.

Transaction Undo File (TUF): Standby Modeun tamamlanmam tm transactionlar kaydettii


dosya. Geri ykleme sreci, transaction btnln salamak iin bu dosyay kullanr. Bir son-
raki geri ykleme sreci meydana geldiinde, commit edilmi tm transactionlar geri ykler.
Terimler Szl 275

transaction: Bir grup halinde altrlan komutlarn mantksal bir seti.

transactional replication: Yaynlanan makalelerdeki deiiklikleri loga kaydetmek iin transac-


tion logu kullanan ve bu deiiklikleri Subscriberlara uygulayan bir replikasyon tipi.

transmission queue (aktarm kuyruu): Gnderilmekte olan mesajlar ieren geici bir kuyruk.
Bu kuyruk, bir u noktasnn bulunamamas durumunda yeniden denenmeleri iin mesajlar da
tutar.

Transparent Client Redirection: Visual Studio 2008 ile birlikte gelen ve principal ve mirror ba-
lantlarnn balant nesnesinde n bellee alnmasn salayan yeni MDAC balantsndaki yer-
leik ilevsellii tanmlayan sre. Principaln baarszlnda, gelitirici mdahalesi veya zel
kodlama olmakszn bir istemci balantsnn mirrora yeniden ynlendirilmesi iin bu kod kulla-
nlr.

transport layer security (transport katman gvenlii): Secure Sockets Layer (SSL) gibi bir
transport kullanlarak, alma zamannda bir istemcinin sertifikas elde edilir.

trigger: Girdi parametreleri kabul etmeyen bir stored proceduren zel durumu. Belirtilen DDL
(data definition language) veya DML (data manipulation language) ilemine cevap olarak, bu kod
otomatik olarak altrlr.

Triple DES: 156bit anahtarlar kullanan bir simetrik ifreleme standard. Triple DES, DESi (Data
Encryption Standard) defa tekrarlar.

TUF: Bkz. Transaction Undo File (TUF).

Type Library Exporter: Bir .NET tipini COMa (Component Object Model) ihra etmek iin kul-
lanlan bir ara.

Type Library Importer: Bir COM tipini .NETe ithal etmek iin kullanlan bir ara.

type safety (tip gvenlii): Yanl elemelerin meydana gelememesi iin belirli bir tipin doru-
lanmas.

typed XML data (yazl XML verileri): Bir XML ema dosyasndaki deklarasyonlara gre yaplan-
drlm bir XML belgesi veya paras.

U
UMS: Bkz. User Mode Scheduler (UMS).

unboxing: Boxing meydana geldikten sonra, bir referans tipinden bir deer tipine geri dntr-
me.

Unicode: Dillerin (Latin, Kiril, brani, Arapa, ince dahil olmak zere) ve scriptlerin ounu des-
tekleyen, on binlerce karakter ieren byk kod sayfas.

Unified Modeling Language (UML): Yazlm mhendisliinde kullanlan bir nesne modelleme
ve spesifikasyon dili.

Uniform Resource Identifier (URI): Intranet veya internet zerinde bulunan bir kayna temsil
eden tanmlaycnn ksaltlm versiyonu. Uzaktan eriimde, uzak bir nesneyi benzersiz ekilde
tanmlamak iin bu URI sunucu tarafnda kullanlr. URL, istemci tarafndan kullanlr.

uninstall (kaldrma): Bir uygulamann tm kalntlarndan kurtularak, makinenin uygulama asla


kurulmam gibi grnmesini salamak.

unit test (birim testi): Uygulamann bir ksmn izole eden ve o birim zerinde tm koullar
test eden bir test. Birim testleri kod olarak yazldnda ve bir birim test platformu (Visual Studio
276 Ek - A

2005te yerleik olan gibi) tarafndan otomatikletirildiinde en etkin ekilde kullanlr. rnein bir
metodun hata verebilecei durumlarn testi.

unit test suite (birim test paketi): Bir tek mantksal varlk zerinde gerekletirilen, birim testle-
rin koleksiyonu. Mantksal varlk genellikle bir classtr.

unstructured data (yaplandrlmam veri): zel bir yapya uymayan XML verileri. Her rnek
tamamen farkl bir yapy izleyebilir; bu yzden, zerinde kolayca arama yaplamaz ve ilikisel bir
yapda temsil edilmesi imkanszdr. (Bkz. yar yaplandrlm veri; yaplandrlm veri.)

untyped XML data (yazlmam XML verileri): Herhangi bir XML ema dosyasndaki deklaras-
yonlara uymayan bir XML belgesi veya paras; bu yzden yapsnn geerlilii kontrol edilemez.

updateable view (gncellenebilir grnm): Bir tek tabloda veri deiikliklerine izin veren bir
grnm. Deiiklikleri sadece grnmn WHERE kouluna elenen satr setiyle kstlamak iin
CREATE VIEW komutu zerinde WITH CHECK OPTION koulunu kullanrsnz.

updategram: XML elementlerinin grnmlerine gre Transact-SQL ilemlerini formlletirmek


iin kullanlan bir XML yaps. lemler, orijinal XML grntsnn XMLin geerli grntsyle
karlatrlmas yoluyla tanmlanr. Tespit edilen deiikliklere gre belirli ilemler altrlr.

use case (kullanm durumu): Genel bir kullanc hedefinde odaklanan grevlerin bir aklamas.
Kullanm durumlar genellikle bir mesleki analist tarafndan yazlr. Kullancnn bir rn satn
almak iin izledii grevler seti, bir kullanm durumuna rnek olabilir. Ayrca kullanc senaryosu
olarak da adlandrlr. rnein bir sat ileminin aamalar.

user (kullanc): Kaynaklara eriim iin tanmlanm bir profil.

user control (kullanc kontrol): GUI designerdaki kullanc kontrolne ve daha sonra kulla-
nc kontrolnn ablon dosyasna (.ascx dosyas) eklenecek her bir kontrole ekstra davran
salayan bir ablon kontrol. .ascx dosyas, web sayfasnn .aspx sayfasna benzer ve sayfa
gerisindeki koda sahip olabilir. Yeniden kullanlabilirlii salamak iin .ascx ve arka plandaki kod
dosyalarnn, kullanc kontroln gerektiren her projeye dahil edilmesi gerekir.

user control (kullanc kontrol): Kompozit kontrol iin dier bir terim.

user mode (kullanc kipi): iletim sistemi dndaki fonksiyonlarla ilikilendirilmi CPU tarafn-
dan gerekletirilen ilem kipi. Kullanc kipi genellikle uygulamalar kullanc tarafndan veya kul-
lanc adna altrldnda kullanlr.

User Mode Scheduler (UMS): lemci kaynaklarn yneten, SQL Servern dahili bir alt sistemi.
Ayrma ilemini Windowsa delege etmek yerine, ilemciler zerindeki tm thread zamanlama-
larn SQL Server dahili olarak ynetir. Bir makindeki her fiziksel veya mantksal ilemci iin bir
UMS oluturulur.

user preferences (kullanc tercihleri): Her bir kullancnn kullanabilecei tercihler. Genellikle
bu ayarlar form boyutlarn ve konumlarn, en sk kullanlan dosyalar ve son kullanlan men
seeneklerini ierir.

user profile (kullanc profili): ASP.NETin bir veritabannda srekli olarak depolayabilecei,
kullancya zg bilgiler. Kullanc profilleri kullanc tercihlerinin, demografik bilgilerin ve kiisel
verilerin izlenmesi iin mkemmeldir.

user requirement (kullanc gereksinimi): Kullanclarn, kendi ilerinin hedeflerini karlamak


zere gerekletirebilmeleri gereken bir grevi tanmlayan bir gereksinim.

user scope (kullanc kapsam): Uygulama ayarlarna karlk geldiinde, ayarlar alma zama-
nnda okunur/yazlrdr.
Terimler Szl 277

user-defined filegroup (kullanc tanml dosya grubu): kincil dosyalar gruplandrmak iin
veritaban yneticisi tarafndan oluturulan bir dosya grubu tipi. Bir veritaban 32,766 kullanc
tanml dosya grubunu ierebilir.

utility modules (yardmc program modlleri): Kullanlacak st dzey bileenler iin temel te-
kil eden en alt dzey bileenden yukar doru entegrasyon testi.

V
validation (geerlilik denetimi): Kullanc tarafndan salanan girdinin belirli gereksinimleri kar-
ladnn dorulanmas. rnein nmerik deerler, alan uzunluklar, deer aralklar ve geerli
tarihler gibi.

value-setting control (deer ayarlama kontrol): Kullancnn, kullanc arayznde bir deer
ayarlamasna imkan veren kontrol. CheckBox, RadioButton ve TrackBar sk kullanlan kontrollere
rnektir.

vertical prototype (dey prototip): Bkz. proof-of-concept prototype.

view (grnm): SQL Serverda depolanan, adlandrlm bir SELECT ifadesi.

ViewState: Web sayfas nesnesi ve child kontrol nesnesi verilerinin sayfa talepleri arasnda sr-
drlebildii mekanizma. Web sayfasnda HTML (Hypertext Markup Language) olarak temsil edi-
lemeyen nesne verileri, ViewStatee yerletirilebilir.

virtual directory (sanal dizin): Internet Information Servicesn bir bileeni; bu, tarayc URL
penceresinde grnen addr. Gerek dosyalarn yer ald dizin ayn ada sahip olmak zorunda
deildir. IIS zerinde tanmlanm tek bir web sitesi altnda duran her web uygulamas iin sanal
dizin yaplmas gerekir.

W
wait type (bekleme tipi): Bir srecin, almasn tamamlamak zere bekledii kaynak tipini
gsteren sembolik bir deer.

Web browser (Web taraycs): HTMLde yazlm web sayfalarn grntlemenin platformdan
bamsz bir yolunu sunar.

Web method (Web metodu): Bir web servisinin web zerinden altrlabilen [WebMetod]
attribute kullanlan metodu.

Web Part: Kullanclarn gizleyebilecei, tayabilecei ve zelletirebilecei bir web kontroln


ieren bir bileen.

Web Parts: zelletirme ve kiiselletirme salamak zere birlikte alan tm kontrollere kar-
lk gelen genel bir terim.

Web server (Web sunucusu): HTTP araclyla taraycdan gelen talepleri alr ve ynetir.

Web server control (Web sunucusu kontrol): HTML sunucu kontrollerinden daha ilevsel ve
daha tutarl bir programlama modeli sunan bir sunucu kontrol.

Web service (Web servisi): Hypertext Transfer Protocol (HTTP) ve Simple Object Access Proto-
col (SOAP) zerinden veri transfer etmenizi salayan bir uygulama. Datk uygulama mimarisin-
de farkl platformlar ve uygulamalar birbirine balamay salayan en kullanl yapdr. Web Ser-
vislerinin herhangi bir sahibi olmad iin hemen hemen her programlama dili desteklemektedir.

Web Services Description Language (WSDL): Bir web servisi metoduna tam olarak neyin gir-
diini tanmlamak iin kullanlan zelletirilmi bir XML grameri.
278 Ek - A

Web setup project (Web kurulum projesi): Bir ASP.NET web uygulamasn kolayca datmak
ve yaplandrmak iin bir Web kurulum projesi kullanlr.

Web test: Uygulamann kullanc arayzn test etmek iin oluturulmu bir test. Visual Studio
Team Test, web testlerinin kaydedilmesini ve verilerin web test parametrelerine seedingini des-
tekler.

web.config dosyas: ASP.NET uygulamalar iin konfigrasyon ayarlarn depolamak zere kul-
lanlan konfigrasyon bilgileri dosyas.

WebForm: HTML iaretlemesini, istemci tarafl kodu veya sunucu tarafl kodu ierebilen ve yerel
programlama modeli kullanlrken bir tek dosyadan, code-behind programlama modeli kullanlr-
ken bir ift dosyadan oluan bir web sayfas.

white box testing: Uygulamann kodunda grnrle sahip bir test tipi. Gelitiriciler white box
testingi kullanr.

widening (geniletme): Hedef tip kaynak tipten gelen tm olas deerleri barndrabildiinde, bir
deerin bir tipten bir dierine dntrlmesi. Bu dnmler dolayl olabilir.

Windows authentication (Windows kimlik denetimi): SQL Server 2005 iin nerilen ve var-
saylan kimlik denetimi kipi. Sadece kimlik denetimi yaplm Windows kullanclar SQL Server
rneine eriim kazanabilir. Bir SQL Server rneine erimesi gereken her Windows kullancs
veya grubu iin bir Windows oturumu eklemeniz gerekir. (Bkz. Mixed Mode kimlik denetimi.)

Windows collation: SQL Servern karakter verilerini nasl sraladn belirleyen bir kural seti.
Kurulum srasnda Windows Control Panel ve SQL Server 2005te adla belirtilir.

Windows Event Log: eitli sistem bileenleri ve uygulamalar tarafndan rapor edilen log girdi-
lerinin Windowstaki merkezi deposunun ad.

Windows kernel objects (Windows ekirdek nesneleri): Sreler aras senkronizasyonu ger-
ekletiren, iletim sistemi tarafndan salanm mekanizmalar. Bunlar mutexleri, semaphorelar
ve eventlar ierir.

Windows Management Instrumentation: Ynetilen bir ortamda, nesneler hakkndaki bilgilere


eriim salayan bir teknoloji. zellikle bilgisayarn donanm bilgilerine erimek iin kullanlr.

Windows Media dosyas: Ses, video veya script verilerini ieren bir dosya. Dosyann ierii,
Windows Media codeclerinden biriyle kodlanr.

Windows Performance Monitor: Sistem ve almakta olan uygulamalar hakkndaki eitli sa-
yalarn izlenmesini salamak zere iletim sistemine dahil edilen Windows uygulamas.

Windows Registry: Windows iletim sistemi, third-party yazlm ve donanm aygtlar hakkndaki
konfigrasyon bilgilerini depolamak iin kullanlan merkezi, hiyerarik bir veritaban.

witness (witness server): High Availability iletim kipindeki arbiter (hakem). Witnessn amac,
veritabannn ayn anda birden fazla rnee sunulamamasn garantilemektir.

wizard (sihirbaz): Bir iletiim kutusu araclyla bir grevi otomatikletiren bir kullanc yardm
biimi.

word breaker: Tam metin indeksli bir stun iinden geerli szckleri karan bir rutin. Bu rutin,
indeks poplasyonu ve tam metin sorgulama srasnda kullanlr.

working set (alma seti): Belirli bir srece adanm fiziksel bellek. Gelitiricilerin ou iin
bu, bir uygulamay altrmak iin gereken bellek miktardr. Ayrca memory footprint olarak da
adlandrlr.
Terimler Szl 279

workload file (i yk dosyas): DTA (Database Engine Tuning Advisor) iin bir girdi olarak
kullanlan SQL Server Profiler izi.

wrapping an exception (bir istisnay sarmalamak): Orijinal bir exceptionn yakaland ve fark-
l bir tipe dntrldnde meydana gelen bir sre. Orijinal exception, InnerException zelli-
ine yerletirilir. Bu nedenle yeni exception orijinal exception sarmalar.

WS-*: gevek ekilde elenmi sistemlerde Security, Reliable Messaging ve Transactions kap-
sayan, gelimekte olan web servisi standartlarnn tm iin yaygn olarak kullanlan bir ksalt-
ma.

WS-Attachments: Web servis taleplerine eklerin nasl ekleneceini tanmlayan bir standardn
ad.

X
XML (eXtensible Markup Language): Uygulama tarafndan okunabilen bilgilerin depolanmas
iin standartlatrlm, metin tabanl bir belge.

XML validation (XML geerlik kontrol): Bir XML rneinin, bir XML ema dosyas tarafndan
tanmlanan tanmlara uyup uymadn belirleme sreci.

XML: Verileri tanmlamak zere kullanlan ve World Wide Web Consortium (W3C) tarafndan
ynetilen bir iaretleme dili.

XML-Binary Optimized Package (XOP): kili verileri, verilerin 64 tabanl kodlamasna bavurul-
mayacak ekilde XML belgeleriyle nasl ilikilendirileceini tanmlayan bir standart.

XmlDocument: XML verilerinin bellek ii (bellek (ram)) temsilini salayan bir class.

XmlNode: Bir XML nodenun, eer varsa child nodelar da dahil olmak zere bellek ii bir temsi-
li.

XmlReader: Bir XML dosyasna veya streamine n bellee alnmam, forward-only (sadece ileri
ynl) eriimini salayan soyut class.

XmlWrite: Forward tabanl (ileri ynl) bir XML yazma modelini salayan soyut class.

XPATH: Hem XML yapsnn, hem de XML ieriinin geerliini kontrol etmek zere, bir XML
rnei iindeki belirli nodelarn aranmas iin bir mekanizma tanmlayan bir W3C (World Wide
Web Consortium) spesifikasyonu.

XPATH axes: Bir XPATH deyiminde, deyimin dndrmesi gereken node setini tanmlayan bir
adm temsil eder.

XPATH predicates: Bir XPATH deyimindeki axes tarafndan tanmlanan node koleksiyonuna
uygulanan koullu bir filtreyi temsil eder. XPATH deyimi tarafndan sadece elenen nodelar dn-
drlecektir.

XQUERY: XML verilerini sorgulamak iin kullanlan deklaratif bir programlama dilini tanmlayan
bir W3C (World Wide Web Consortium) spesifikasyonu.