D.E.İ.B.A || Dünyanın En İyi Bilgisayar Adamları

Arşivde ‘Bilgisayar++’ Kategorisi

Page 1 of 102012345»...Last »


*(SEI: Software Engineering Institute, Yazılım Mühendisliği Enstitüsü)

*(CMM-Capability Maturity Level, Yetenek Olgunluk Seviyesi)

Proje yönetimi, gereksinimlerin yönetimi sürecinin verimliliğini ölçebilir. Bunun için şu ölçütler kullanılabilir: Her gereksinimin durumu, gereksinimlerin toplam kümülatif değişim sayısı, efor ve gereksinimlerin yönetiminde harcanan bütçe. Gereksinimlerin yönetimi sürecinin başarısızlığa uğraması direkt olarak proje yönetimini de etkileyeceği için detaylı bir �gereksinimlerin yönetimi planı� yapılmasında fayda vardır.

Amaçlar

Yazılıma atanmış olan gereksinimleri, yazılım mühendisliği ve yönetim için bir temel referans olmaları için kontrol etmek.Yazılıma atanmış sistem gereksinimleri ile yazılım planları, ürünleri, aktiviteleri tutarlı tutabilmek. Bu amaçlara göre; 1 � Proje, yazılıma atanmış sistem gereksinimleri için yazılı ve kurumsal bir anlaşmayı takip etmelidir.

Yazılıma atanmış bu sistem gereksinimlerine �atanmış gereksinimler� denir. Atanmış gereksinimler, yazılım bileşenleri tarafından gerçekleştirilen sistem gereksinimlerinin bir alt kümesidir. Bu atanmış gereksinimler yazılım geliştirme planının birincil girdilerini oluşturur. Yazılım gereksinimleri analizi atanmış gereksinimleri sadeleştirerek yazılım gereksinimleri belgesi haline getirir. Bu oluşturulan belge şunları belirtir:

  • Atanmış gereksinimler belge haline getirilmiş, raporlanmıştır.
  • Atanmış gereksinimler, yazılım yöneticileri, sistem test grubu, yazılım mühendisliği grubu, sistem mühendisliği grubu, yazılım kalite güvence grubu, yazılım yapılandırma (konfigurasyon) yönetim grubu, belgeleme/raporlama destek grubu tarafından gözden geçirilmiştir.
  • Yazılım planları, ürünleri, aktiviteleri atanmış gereksinimlerdeki değişikliklere tutarlı bir şekilde değiştirilmiştir.

Gerekli Yetenekler

Yetenek �1 Her proje için sistem gereksinimlerini analiz etme ve bunları yazılım, donanım ve diğer sistem bileşenlerine dağıtma sorumluluğu tanımlanma

Sistem gereksinilerinin analizi ve atamalarının yapılması yazılım mühendisliği grubunun sorumluluğu değildir fakat işleri için bir önkoşuldur. Sorumluluk şunları kapsar: 1. Gereksinimlerin yönetimi ve belgelendirilmesi ve bunların proje yaşam döngüsü boyunca dağıtımını yapma

2. Sistem gereksinimlerindeki değişiklikleri ve dağıtımlarını etkilemek, yönlendirme

Yetenek � 2 Atanmış gereksinimleri belgeleme/raporlama, yazıya dönüştürme

Atanmış gereksinimler aşağıdakileri içerir: 1.Yazılım projesinin aktivitesini belirleyen teknik olmayan gereksinimler (anlaşmalar, koşullar, anlaşma ile ilgili terimler).

  • Anlaşma, koşul, anlaşmadan doğan terim örnekleri:
  • Hazırlanması gereken ürünler
  • Hazırlanma tarihleri
  • Ara raporlar (milestones)

2.Yazılımın teknik gereksinimleri.

  • Teknik gereksinim örnekleri:
  • Son kullanıcı, işlemci, destek, birleştirme fonksiyonları
  • Performans gereksinimleri
  • Tasarım kısıtlamaları
  • Programlama dili
  • Arayüz gereksinimleri

3.Yazılım ürünlerinin atanmış gereksinimleri karşılayıp karşılamadığını ölçmek için kullanılacak olan kabul edilebilirlik kriterleri.

Yetenek � 3 Atanmış gereksinimler yönetiminin yapılabilmesi için kaynak ve bütçe sağlanması

1. Uygulama alanında ve yazılım mühendisliğinde yeterli tecrübesi olan kişilerin gereksinimleri yönetmek için atanması. 2. Gereksinim yönetimi için gerekli olan araçların sağlanması.

Örnek araçlar:

  • Hesap çizelgesi programları
  • Yapılandırma yönetimi programları
  • İzleme programları
  • Test yönetimi programları

Yetenek 4 � Yazılım mühendisliği grubu üyeleri ve diğer yazılm ile ilgili grupların üyelerinin kendi gereksinim yönetim aktivitelerini yapabilmeleri için eğitimi

Örnek olarak:

  • Projede kullanılan metod, standard, süreç eğitimi
  • Uygulama alanı eğitimi (sağlık, eğitim, hukuk vs.)

Yapılacak Aktiviteler

Aktivite � 1 Yazılım mühendisliği grubu tarafından, gereksinimler yazılım projesine geçirilmeden önce atanmış gereksinimleri inceleme

1. Tamamlanmamış ve unutulmuş gereksinimler düzeltilir. 2.Atanmış gereksinimlerin:

  • yapılabilir, yazılım ile gerçekleştirilebilir,
  • düzgün ve açıkca belirtilmiş,
  • test edilebilir,
  • birbiriyle tutarlı olup olmadıkları kontrol edilir.

3. Gereksinimleri atamaktan ve analiz etmekten sorumlu olan grup tarafından potansiyel olarak sorun teşkil edecek gereksinimler gözden geçirilir ve gerekli değişiklikler yapılır.

4. Atanmış gereksinimlerden etkilenen gruplar ile görüşmeler yapılır.

Etkilenen grup örnekleri:

  • Yazılım mühendisliği
  • Yazılım tahminleme
  • Sistem mühendisliği
  • Sistem test
  • Yazılım kalite güvence
  • Belgeleme/raporlama destek

Aktivite � 2 Yazılım mühendisliği grubu, atanan gereksinimleri, yazılım planını, ürünü, aktiviteler için temel olarak kullanmak

Atanmış gereksinimler: 1. Kontrol edilebilir, yönetilebilirdir. (Herhangi bir anda, ürünün hangi versiyonu olduğu bilinmektedir ve ne gibi değişiklikler yapıldığı bilinmektedir.)

2. Yazılım planı için referans olur 3. Yazılım gereksinimleri geliştirme için referans olur.

Aktivite � 3 Atanmış gereksinimlere yapılan değişiklikler incelenir ve yazılım projesine dahil edilir.

1. Kurum dışı gruplarla tayin edilen gereksinimler üst düzey yöneticiler tarafından gözden geçirilir, kurum içi gruplara tayin edilen gereksinimler etkilenen gruplar tarafından gözden geçirilir. 2. Atanmış gereksinimlerdeki değişikler yüzünden plan, ürün, aktivitelerde yapılması gereken değişiklikler

  • belirlenir,
  • değerlendirilir,
  • risk analizi yapılır,
  • planlanır,
  • etkilenen gruplarla iletişime geçilir,
  • tamamlanana kadar gözlemlenir.

Ölçümleme & Analiz

Atanmış gereksinimleri yönetmek için kullanılan aktivitelerin durumlarını belirlemek için ölçümlemeler kullanılır

Ölçümleme örnekleri:

  • Her gereksinimin durumu,
  • Atanmış gereksinimler için değişim aktiviteleri,
  • Atanmış gereksinimlere uygulanan değişimlerin kümülatif sayısı

Gerçekleştirimde Doğrulama

Doğrulama � 1 Atanmış gereksinimlerin yönetimi, periyodik aralıklarla üst düzey yönetim tarafından kontrol edilir

Belirli aralıklarla yapılan bu kontrollerin amacı yazılım sürecine belirli bir soyutlama ile bakarak yanlışlıkların farkında olmaktır. Kontroller arasındaki zaman, raporlamalar ve yeni gelişmeler için yeterli olmalıdır.

Doğrulama �2 Atanmış gereksinimlerin yönetimi, periyodik ve olay-tabanlı olarak proje yöneticisi tarafından kontrol edilir

Doğrulama � 3 Yazılım kalite güvence grubu iş ürünlerini ve diğer sonuçları kontrol eder

Bu kontroller aşağıdakileri doğrular: 1. Atanmış gereksinimlerdeki problemlerin, tutarsızlıkların yazılım mühendisliği grubu onları ele almadan önce çözülmesi

2. Atanmış gereksinimlerin değişiminde iş planlarının, ürünlerinin, aktivitelerinin doğru olarak gözden geçirilmesi

Etkili gereksinim yönetimi, yazılım kalitesini arttırır, proje yaşam döngüsü zamanını azaltır.Tam gereksinimler daha iyi bir yazılım tasarımını sağlar ve daha bakımı kolay kod oluşmasını sağlar. Böylelikle zamandan ve paradan tasarruf sağlanır çünkü yanlış mantıkta kodlama yapma veya artık istenmeyen bir özelliğin gerçekleştirimi yapılmamış olur.
NOT: CMM gereksinimleri nasıl yöneteceğinizi söylemez. Onun yerine yazılımın gereksinimlerini karşılamak zorunda olduğunu belirtir ve aşağıdaki soruları dikkate almanızı ister: - Gereksinimlerin ne olduğunu biliyor musun?

- Tüm yazılım geliştirme ekibi ne yapılmak istendiğini biliyor musun?

- Gereksinimler değişince ne yapacaksın?

CMM, gereksinimler değişince onları bir şekilde yönetmek gerektiğini, bunu için de izlenmesi gereken yazılı bir belge/poliçe olması gerektiğini söyler.

Gereksinimlerin yönetimindeki asıl amaç, tüm projeleri kapsayan bir süreç hazırlamaktır. Gereksinimler tüm projelerde farklı olacaktır fakat genel şablon aynı olacaktır. Süreç şablonları değişmeyecektir.

NEDEN GEREKSİNİMLERİN YÖNETİMİ?

Bu soruyu verilecek en güzel yanıt şudur: �Tahminlerinizden çok, müşterinin istekleri doğrultusunda bir yazılım üretebilmek için�.

Belirsizlik, tüm proje risklerinin kökünü oluşturur. Belirsizliğin büyük bir bölümünü de yetersiz gereksinimler analizi oluşturur. Gereksiz veya tekrarlanmış gereksinimler, projenin kapsamının, maliyetinin ne olacağının belirlenmesini engeller. Dahası, projeyi durdurma noktasına getirir. Gereksinimlerdeki eksikleri gidermek, tasarım sırasında 10 kat, gerçekleştirim sırasında ise 100 kat daha fazla maliyettedir.

İyi Gereksinim Yönetimi Nedir?

  • Gereksinimlerin takibi, analizi için kullanıcı merkezli, organize bir yaklaşımdır.
  • Gereksinimlerin nasıl ele alınacağını ve gereksinimlerin yönetimi planını kapsar

- Kimler nasıl iş ile ilgili olacak?

- Gereksinimler ile ilgili hangi bilginin bakımı yapılacak?

- Yeni gereksinimlerle karşılaşılınca hangi süreç izlenecek?

  • Ek gereksinimlerin belirlenmesinde proje özellikleri de göz önüne alınmalıdır

Başarılı bir proje dikkatlice oluşturulmuş ve belgelendirilmiş gereksinimlerle başlar. İyi oluşturulmuş bir gereksinimlerin yönetimi süreci proje takımına tüm projeler boyunca yardımcı olur.

GEREKSİNİMLERİN YÖNETİMİNDE KULLANILAN ARAÇLAR

Aşağıda, gereksinim yönetiminde kullanılan araçları görmektesiniz. Şunu unutmayın ki, kullanılan araç ne kadar iyi olursa olsun, kötü belirlenmiş gereksinimleri yönetmek zordur, maliyeti arttırır, çizelgeyi aşmanıza sebep olur. İnternetteki GY Araçları:

Active!Focus: www.xapware.com

AnalystPro: analysttool.com/

Caliber-RM: www.borland.com/caliber/index.html

C.A.R.E. 2.0: www.sophist.de

Catalyze: www.chiaracorp.com/requirements.htm

CORE: www.vtcorp.com

Cradle: www.threesl.com

DOORS: www2.telelogic.com/doors/index/cfm

EasyRM: www.easy-rm.com/easyrm.php3

Focal Point: www.focalpoint.se

IRqA (Integral Requisite Analyzer): www.irqaonline.com

Mac A&D and Win A&D: www.excelsoftware.com

Projectricity: www.projectricity.com/specification_tool.htm

Prosareq Requirements Manager: www.prosa.fi/eng/pr2Req.htm

Qualica QFD: qualica.de/english/requirements_mgmt.htm

RDD-100: www.holagent.com/new/products/modules.html

RDT: igatech.com/rdt/rdtwalkthrough.html

Reconcile: compuware.com/products/reconcile.html

Requirement Tracing System: www.bandwood.com/cms_exec_summary.htm

Requirements Manager: toolforsystems.com/

Requisite Pro: www.rational.com/products/reqpro/index.jsp

RMTrak: www.rmtrak.com

RTM Workshop: www.chipware.com

SLATE: www.eds.com/products/plm/teamcenter/slate

SpeedReq: www.speedev.com

Team-Trace: www.team-trace.com

TrueReq: www.truereq.com

Vital Link: www.complianceautomation.com

XTie-Requirements Tracer: tbe.com/products/xtie

Kaynaklar:

Brackett, J.W. “Software Requirements.” Curriculum Module SEI-CM-19-1.2, Software Engineering Institute, Carnegie Mellon University, Pittsburgh, Pa., Jan 1990. This paper can be downloaded from the web at http://www.asset.com/WSRD/abstracts/ABSTRACT_1715.html.

Romback, H. D. “Software Specification: A Framework.” Curriculum Module SEI-CM-11-2.1, Software Engineering Institute, Carnegie Mellon University, Pittsburgh, Pa., Jan. 1990. This paper can be downloaded from the web at http://www.asset.com/WSRD/abstracts/ABSTRACT_1709.html.

McConnell, Steve “Software Project Survival Guide: How to Be Sure Your First Important Project Isn�t Your Last.” Redmond, WA: Microsoft Press, 1998.

Jones, Do-While “Repeatable Software Development, Part I: Quality Assurance.” Software Developement, May 1995.

Jones, Do-While “Repeatable Software Development, Part II: Configuration and Requirements Management.” Software Developement, June 1995.

A Field Guide to Effective Requirements Management Under SEI�s Capability Maturity Model

CMM Key Practices for Level 2 - Requirements Management

LTInsights Managing Requirements for Successful Software Projects

Requirements Management Policies and Procedures

Requirements Management Using Tables

Software Program Managers Network - 16 Critical Software Practices TM


Bugünkü makalemizde, bir arayüzü uygulayan sınıf nesnelerinden faydalanarak, bir Sql tablosundan nasıl veri okuyacağımızı ve değişiklikleri veritabanına nasıl göndereceğimizi incelemeye çalışacağız. Geliştireceğimiz örnek, arayüzlerin nasıl oluşturulduğu ve bir sınıfa nasıl uygulandığını incelemekle yetinmeyecek, Sql veritabanımızdaki bir tablodaki belli bir kayda ait verilerin bu sınıf nesnelerine nasıl aktarılacağını da işleyecek. Kısacası uygulamamız, hem arayüzlerin hem sınıfların hemde Sql nesnelerinin kısa bir tekrarı olucak.

Öncelikle uygulamamızın amacından bahsedelim. Uygulamamızı bir Windows uygulaması şeklinde geliştireceğiz. Kullanacağımız veri tablosunda arkadaşlarımızla ilgili bir kaç veriyi tutuyor olacağız. Kullanıcı, Windows formunda, bu tablodaki alanlar için Primary Key niteliği taşıyan bir ID değerini girerek, buna karşılık gelen tablo satırına ait verilerini elde edicek. İstediği değişiklikleri yaptıktan sonra ise bu değişiklikleri tekrar veritabanına gönderecek. Burada kullanacağımız teknik makalemizin esas amacı olucak. Bu kez veri tablosundan çekip aldığımız veri satırının programdaki eşdeğeri, oluşturacağımız sınıf nesnesi olucak. Bu sınıfımız ise, yazmış olduğumuz arayüzü uygulayan bir sınıf olucak. Veriler sınıf nesnesine, satırdaki her bir alan değeri, aynı isimli özelliğe denk gelicek şekilde yüklenecek. Yapılan değişiklikler yine bu sınıf nesnesinin özelliklerinin sahip olduğu değerlerin veri tablosuna gönderilmesi ile gerçekleştirilecek.

Uygulamamızda, verileri Sql veritabanından çekmek için, SqlClient isim uzayında yer alan SqlConnection ve SqlDataReader nesnelerini kullanacağız. Hatırlayacağınız gibi SqlConnection nesnesi ile , bağlanmak istediğimiz veritabanına, bu veritabanının bulunduğu sunucu üzerinden bir bağlantı tanımlıyoruz. SqlDataReader nesnemiz ile de, sadece ileri yönlü ve yanlız okunabilir bir veri akımı sağlayarak, aradığımız kayda ait verilerin elde edilmesini sağlıyoruz. Şimdi uygulamamızı geliştirmeye başlayalım. Öncelikle vs.net ortamında bir Windows Application oluşturalım. Burada aşağıdaki gibi bir form tasarlayalım.

Şekil 1. Form tasarımımız.

Kullanıcı bilgilerini edinmek istediği kişinin ID�nosunu girdikten sonra, Getir başlıklı butona tıklayarak ilgili satırın tüm alanlarına ait verileri getirecek. Ayrıca, kullanıcı veriler üzerinde değişiklik yapabilecek ve bunlarıda Güncelle başlıklı butona tıklayarak Sql veritabanındaki tablomuza aktarabilecek. Sql veritabanında yer alan Kisiler isimli tablomuzun yapısı aşağıdaki gibidir.

Şekil 2. Tablomuzun yapısı.

Şimdi gelelim işin en önemli ve anahtar kısımlarına. Program kodlarımız. Öncelikle arayüzümüzü tasarlayalım. Arayüzümüz, sonra oluşturacağımız sınıf için bir rehber olucak. Sınıfımız, veri tablomuzdaki alanları birer özellik olarak taşıyacağına göre arayüzümüzde bu özellik tanımlarının yer alması gerektiğini söyleyebiliriz. Ayrıca ilgili kişiye ait verileri getirecek bir metodumuzda olmalıdır. Elbette bu arayüze başka amaçlar için üye tanımlamalarıda ekleyebiliriz. Bu konuda tek sınır bizim hayal gücümüz. İşin gerçeği bu makalemizde hayal gücümü biraz kısdım konunun daha fazla dağılmaması amacıyla :) . (Ama siz, örneğin kullanıcının yeni girdiği verileri veritabanına yazıcak bir metod tanımınıda bir üye olarak ekleyebilir ve gerekli kodlamaları yapabilirsiniz.) İşte arayüzümüzün kodları.

public interface IKisi

{

/* Öncelikle tablomuzdaki her alana karşılık gelen özellikler için tanımlamalarımızı yapıyoruz.*/

int KisiID /* KisiID, tablomuzda otomatik artan ve primary key olan bir alandır. Dolayısıyla programcının var olan bir KisiID�sini değiştirmemesi gerekir. Bu nedenle sadece okunabilir bir özellik olarak tanımlanmasına izin veriyoruz. */

{

get;

}

string Ad /* Tablomuzdaki char tipindeki Ad alanımız için string tipte bir alan.*/

{

get;set;

}

string Soyad

{

get;set;

}

DateTime DogumTarihi /* Tablomuzda, DogumTarihi alanımız datetime tipinde olduğundan, DateTime tipinde bir özellik tanımlanmasına izin veriyoruz.*/

{

get;set;

}

string Meslek

{

get;set;

}

void Bul(int KID); /* Bul metod, KID parametresine göre, tablodan ilgili satıra ait verileri alıcak ve alanlara karşılık gelen özelliklere atayacak metodumuzdur.*/

}

Şimdide bu arayüzümüzü uygulayacağımız sınıfımızı oluşturalım. Sınıfımız IKisi arayüzünde tanımlanan her üyeyi uygulamak zorundadır. Bu bildiğiniz gibi arayüzlerin bir özelliğidir.

public class CKisi:IKisi /* IKisi arayüzünü uyguluyoruz.*/

{

/* Öncelikle sınıftaki özelliklerimiz için, verilerin tutulacağı alanları tanımlıyoruz.*/

private int kisiID;

private string ad;

private string soyad;

private DateTime dogumTarihi;

private string meslek;

/* Arayüzümüzde yer alan üyeleri uygulamaya başlıyoruz.*/

public int KisiID

{

get{ return kisiID;}

}

public string Ad

{

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

}

public string Soyad

{

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

}

public DateTime DogumTarihi

{

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

}

public string Meslek

{

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

}

public void Bul(int KID)

{

/* Öncelikle Sql Veritabanımıza bir bağlantı açıyoruz.*/

SqlConnection conFriends=new SqlConnection(”data source=localhost;integrated security=sspi;initial catalog=Friends”);

/* Tablomuzdan, kullanıcının bu metoda parametre olarak gönderdiği KID değerini baz alarak, ilgili KisiID�ye ait verileri elde edicek sql kodunu yazıyoruz.*/

string sorgu=”Select * From Kisiler Where KisiID=”+KID.ToString();

/* SqlCommand nesnemiz yardımıyla sql sorgumuzu çalıştırılmak üzere hazırlıyoruz.*/

SqlCommand cmd=new SqlCommand(sorgu,conFriends);

SqlDataReader rd;/* SqlDataReader nesnemizi yaratıyoruz.*/

conFriends.Open(); /* Bağlantımızı açıyoruz. */

rd=cmd.ExecuteReader(CommandBehavior.CloseConnection); /* ExecuteReader ile sql sorgumuzu çalıştırıyoruz ve sonuç kümesi ile SqlDataReader nesnemiz arasında bir akım(stream) açıyoruz. CommandBehavior.CloseConnection sayesinde, SqlDataReader nesnemizi kapattığımızda, SqlConnection nesnemizinde otomatik olarak kapanmasını sağlıyoruz.*/

while(rd.Read())

{

/* Eğer ilgili KisiID�ye ait bir veri satırı bulunursa, SqlDataReader nesnemizin Read metodu sayesinde, bu satıra ait verileri sınıfımızın ilgili alanlarına aktarıyoruz. Böylece, bu alanların atandığı sınıf özellikleride bu veriler ile dolmuş oluyor.*/

kisiID=(int)rd[”KisiID”];

ad=rd[”Ad”].ToString();

soyad=rd[”Soyad”].ToString();

dogumTarihi=(DateTime)rd[”DogumTarihi”];

meslek=rd[”Meslek”].ToString();

}

rd.Close();

}

public CKisi()

{

}

}

Artık IKisi arayüzünü uygulayan, CKisi isimli bir sınıfımız var.Şimdi Formumuzun kodlarını yazmaya başlayabiliriz. Öncelikle module düzeyinde bir CKisi sınıf nesnesi tanımlayalım.

CKisi kisi=new CKisi();

Bu nesnemiz veri tablosundan çektiğimiz veri satırına ait verileri taşıyacak. Kullanıcı Getir başlıklı button kontrolüne bastığında olucak olayları gerçekleştirecek kodları yazalım.

private void btnGetir_Click(object sender, System.EventArgs e)

{

int id=Convert.ToInt32(txtKisiID.Text.ToString()); /* Kullanıcının TextBox kontrolüne girdiği ID değeri Convert sınıfının ToInt32 metodu ile Integer�a çeviriyoruz.*/

kisi.Bul(id); /* Kisi isimli CKisi sınıfından nesne örneğimizin Bul metodunu çağırıyoruz.*/

Doldur(); /* Doldur Metodu, kisi nesnesinin özellik değerlerini, Formumuzdaki ilgili kontrollere alarak, bir nevi veri bağlama işlemini gerçekleştirmiş oluyor.*/

}

Şimdide Doldur metodumuzun kodlarını yazalım.

public void Doldur()

{

txtAd.Text=kisi.Ad.ToString(); /* txtAd kontrolüne, kisi nesnemizin Ad özelliğinin şu anki değeri yükleniyor. Yani ilgili veri satırının ilgili alanı bu kontrole bağlamış oluyor.*/

txtSoyad.Text=kisi.Soyad.ToString();

txtMeslek.Text=kisi.Meslek.ToString();

txtDogumTarihi.Text=kisi.DogumTarihi.ToShortDateString();

lblKisiID.Text=kisi.KisiID.ToString();

}

Evet görüldüğü gibi artık aradığımız kişiye ait verileri formumuzdaki kontrollere yükleyebiliyoruz. Şimdi TextBox kontrollerimizin TextChanged olaylarını kodlayacağız. Burada amacımız, TextBox�larda meydana gelen değişikliklerin anında, CKisi sınıfından türettiğimiz Kisi nesnesinin ilgili özelliklerine yansıtılabilmesi. Böylece yapılan değişiklikler anında nesnemize yansıyacak. Bu nedenle aşağıdaki kodları ekliyoruz.

/* Metodumuz bir switch case ifadesi ile, aldığı ozellikAdi parametresine göre, CKisi isimli sınıfımıza ait Kisi nesne örneğinin ilgili özelliklerini değiştiriyor.*/

public void Degistir(string ozellikAdi,string veri)

{

switch(ozellikAdi)

{

case “Ad”:

{

kisi.Ad=veri;

break;

}

case “Soyad”:

{

kisi.Soyad=veri;

break;

}

case “Meslek”:

{

kisi.Meslek=veri;

break;

}

case “DogumTarihi”:

{

kisi.DogumTarihi=Convert.ToDateTime(veri);

break;

}

}

}

private void txtAd_TextChanged(object sender, System.EventArgs e)

{

Degistir(”Ad”,txtAd.Text);

}

private void txtSoyad_TextChanged(object sender, System.EventArgs e)

{

Degistir(”Soyad”,txtSoyad.Text);

}

private void txtDogumTarihi_TextChanged(object sender, System.EventArgs e)

{

Degistir(”DogumTarihi”,txtDogumTarihi.Text.ToString());

}

private void txtMeslek_TextChanged(object sender, System.EventArgs e)

{

Degistir(”Meslek”,txtMeslek.Text);

}

private void btnGuncelle_Click(object sender, System.EventArgs e)

{

int id;

id=Convert.ToInt32(lblKisiID.Text.ToString());

Guncelle(id);

}

Görüldüğü gibi kodlarımız gayet basit. Şimdi güncelleme işlemlerimizi gerçekleştireceğimiz kodları yazalım. Kullanıcımız, TextBox kontrollerinde yaptığı değişikliklerin veritabanınada yansıtılmasını istiyorsa Guncelle başlıklı button kontrolüne tıklayacaktır. İşte kodlarımız.

private void btnGuncelle_Click(object sender, System.EventArgs e)

{

/* Güncelleme işlemi, şu anda ekranda olan Kişi için yapılacağından, bu kişiye ait KisiID sini ilgili Label konrolümüzden alıyoruz ve Guncelle isimli metodumuza parametre olarak gönderiyoruz. Asıl güncelleme işlemi Guncelle isimli metodumuzda yapılıyor. */

int id;

id=Convert.ToInt32(lblKisiID.Text.ToString());

Guncelle(id);

}

public void Guncelle(int ID)

{

/* Sql Server�ımıza bağlantımızı oluşturuyoruz.*/

SqlConnection conFriends=new SqlConnection(”data source=localhost;integrated security=sspi;initial catalog=Friends”);

/* Update sorgumuzu oluşturuyoruz. Dikkat edicek olursanız alanlara atanacak değerler, kisi isimli nesnemizin özelliklerinin değerleridir. Bu özellik değerleri ise, TextBox kontrollerinin TextChanged olaylarına ekldeğimiz kodlar ile sürekli güncel tutulmaktadır. En ufak bir değişiklik dahi buraya yansıyabilecektir.*/

string sorgu=”Update Kisiler Set Ad=�”+kisi.Ad+”�,Soyad=�”+kisi.Soyad+”�,Meslek=�”+kisi.Meslek+”�,DogumTarihi=�”+kisi.DogumTarihi.ToShortDateString()+”� Where KisiID=”+ID;

SqlCommand cmd=new SqlCommand(sorgu,conFriends); /* SqlCommand nesnemizi sql cümleciğimiz ve geçerli bağlantımız ile oluşturuyoruz. */

conFriends.Open(); /* Bağlantımızı açıyoruz.*/

try

{

cmd.ExecuteNonQuery(); /* Komutumuzu çalıştırıyoruz.*/

}

catch

{

MessageBox.Show(”Başarısız”);

}

finally /* Update işlemi herhangibir neden ile başarısız olsada, olmasada sonuç olarak(finally) açık olan SqlConnection bağlanıtımızı kapatıyoruz. */

{

conFriends.Close();

}

}

İşte uygulama kodlarımız bu kadar. Şimdi gelin uygulamamızı çalıştırıp deneyelim. Öncelikle KisiID değeri 1000 olan satıra ait verileri getirelim.

Şekil 3. KisiID=1000 Kaydına ait veriler Kisi nesnemize yüklenir.

Şimdi verilerde bir kaç değişiklik yapalım ve güncelleyelim. Ben Ad alanında yer alan “S.” değerini “Selim” olarak değiştirdim. Bu durum sonucunda yapılan değişikliklerin veritabanına yazılıp yazılmadığını ister programımızdan tekrar 1000 nolu satırı getirerek bakabiliriz istersekde Sql Server�dan direkt olarak bakabiliriz. İşte sonuçlar.

Şekil 4. Güncelleme işleminin sonucu.

Page 1 of 102012345»...Last »

Son Yorumlar

Kategoriler