ADO.NET Entity Framework Giriş

Merhaba Arkadaşlar, Bugünkü konumuzda Microsoft’un .Net Framework 3.5 ile gelen Entity Framework adlı teknolojisinden örnek projemizde nasıl uygulayacağımızdan bahsetmeye çalışacağım. İlk olarak projemizde Entity Framework bağlantısı nasıl gerçekleştiririz Visual Studio 2013 ile ilk önce Blank solution açıyor ve örnek olarak bir WFA projesi seçiyoruz.

Ardından yeni bir folder açıyor ve içerisine Ado.net entity data modeli oluşturarak database ile projemizi entegre etme aşamasına geliyoruz.

Ekleme işlemi tamamlandıktan sonra karşımıza çıkan sihirbazda ister boş veri modeliyle çalışabilir, istersek de veritabanı bağlantısı kurarak bu veritabanı üzerinden model oluşturabiliriz. Uygulamamızı veritabanı ile entegre edeceğiz. Bu yüzden “Generate from database” seçeneğini seçiyoruz.

Şimdi bizden bir veritabanı bağlantısı kurmamızı istiyor. Hazırda bağlantımız varsa onu kullanabileceğimiz gibi yeni bir bağlantı oluşturarak da ilerleyebiliriz. Ben yeni bir bağlantı oluşturacağım.

Bağlantı bilgileri seçildikten sonra veritabanı yapımız tablo view ve stored procedure’ler ile karşımıza gelmektedir. Projemize entegre etmek istediğimiz nesneleri seçip sihirbazımızı tamamlıyoruz.

Sihirbaz tamamlandıktan sonra aşağıda göründüğü gibi her Northwind database oluştu. Bu andan itibaren Northwind isimli database e ait tüm tablolara ilgili tüm işlemleri LINQ’da yaptığımız gibi Object – Property şeklinde kolaylıkla gerçekleştirebiliyoruz.

C#’da Xml’den Veri Okuma (Güncel döviz kurları)

Merhaba,

Bu örneğimizde Türkiye Cumhuriyet Merkez Bankası’nın resmi internet sitesinde insanlara  sunduğu  döviz bilgilerini C# yazıılım dilinde WFA uygulamasına xml den alarak okuyacağız.

Kod yapısı;

SQL Aggregate Functions

Merhaba Arkadaşlar, Bir programlama dilinde fonksiyon denildiğinde akla ilk olarak belli işleri yapmak üzere tasarlanmış kod blokları gelir. Fonksiyonlarla çalışmak, tekrarlanan işleri yapmak üzere, gereksiz kod tekrarını önleyen çok sağlıklı bir yöntemdir.   SQL Fonksiyonları 2 farklı mantık üzerine inşa edilmişlerdir. Bunlardan biraz, yazının indexini oluşturması açısından bahsetmek gerekirse ; Çoklu Satır Fonksiyonları (Aggregate Functions) : Bir sütundaki tüm satırlara uygulanırlar, bir hesap yapıp geriye tek bir değer döndürürler.

  • AVG
  • COUNT
  • FIRST
  • LAST
  • MAX
  • MIN
  • SUM

Tek Satır Fonksiyonları (Scalar Functions) : Tablonun bir satırını temel alarak işlem yapan fonksiyonlardır. Ama her satır için ayrı ayrı işlem yapmaktadır.

  • UPPER
  • LOWER
  • MID
  • LEN
  • ROUND
  • NOW
  • DAY
  • MONTH
  • YEAR

Bu yazımda bazı fonksiyonları kısaca açıklayıp basit örnekler yapmaya çalışacağım. Üzerinde işlem yapabileceğimiz bir database ve tablo oluşturalım  hem kısaca bunları da hatırlamış oluruz.

Şimdi ”insert” komutu ile içerisini bir kaç veri ile dolduralım. Film tarih ve puanlamaları tamam rastgele vereceğim. insert into Yerli(Ad,Tarih,Puan) values (‘Bekçiler Kralı’,1978,9) ile 16 adet film ekledim.

1 Neşeli günler 1978 7
  2 Yol 1980 8
3   Masumiyet 1997 5
4 Züğürt Ağa 1985 9
5 Babam ve Oğlum 2015 7
6 Hababam sınıfı 1975 9
7 Selvi Boylum 1978 9
8 Eşkiya 1996 8
9 Recep İvedik 2005 6
10 Arog 2009 5
11 Gora 2009 5
12 Sevdalı Yürekler 2009 4
13 Kapıcılar Kralı 1974 10
14 Çöpçüler Kralı 1974 10
15 Gol Kralı 1978 10
16 Bekçiler Kralı 1978 9

AVG ve SUM Fonksiyonları

SUM Fonksiyonu ile seçilen bir satırdaki tüm kayıtların toplamı hesaplanıp geri döndürülür, AVG Fonksiyonu ile ise tüm kayıtların ortalaması döndürülür. Tüm filmlerin Puanlarının toplamına ve ortalamasına  ulaşalım ;

COUNT Fonksiyonu

COUNT Fonksiyonu ile oluşturduğunuz sorgunun ürettiği satır sayısı bulunur ve geriye döndürülür. Eğer COUNT fonksiyonunu sadece bir sütun için uygularsanız NULL olmayan, yani değeri boş olmayan kayıtların sayısı bulunur. Tüm filmlerin sayısına COUNT fonksiyonunu kullanarak ulaşabiliriz ;

Herhangi bir film için tarih değerinin NULL olduğunu düşünün, aşağıdaki sorgu bize NULL olan  değerini döndürmeyecektir. Yani 16 yerine 15 değer döndürecektir. select count(Tarih) as Toplamsayı from Yerli

FIRST ve LAST Fonksiyonları

Seçtiğiniz sütun için ilk satıra FIRST Fonksiyonu ile, son satıra ise LAST Fonksiyonu ile ulaşabilirsiniz. İlk tarih değerine ve son Puan değerine ulaşalım ; select FIRST(Tarih) as İlk_tarih, LAST(Puan) as Son_Puan from Yerli Bu sorgu bize 1978 ve 9 değerlerini getirecektir.

MAX ve MIN Fonksiyonları

Seçilen sütundaki en büyük değere MAX Fonksiyonu ile, en küçük değere MIN Fonksiyonu ile ulaşabilirsiniz. IPuanı en yüksek filmin puanına ulaşalım ;

UPPER ve LOWER  Fonksiyonları

Seçilen sütundaki tüm satırlar için büyük harfe veya küçük harfe çevirme işlemini yaparlar. Tüm filmlerin adlarını büyük ve küçük harfe çevirelim ;

SUBSTRING Fonksiyonu

Seçilen kayıtları istenilen karakterinden başlayarak, istenilen uzunluk kadar gösterir. Pek açıklayıcı olmamış olabilir ama örneğe bakınız. Tüm filmlerin ikinci karakterlerinden itibaren, 5 karakter gösterelim ;

LEN Fonksiyonu

Seçilen sütundaki her satır için, kaydın harf sayısını, yani uzunluğunu döndürür. Filmlerin kaç harften oluştuklarına bakalım ; Not: Boş karakterleride sayar.

ROUND Fonksiyonu

Seçilen ondalıklı kayıtlar için yuvarlama işlemini gerçekleştirir. Virgülden kaç basamak sonra yuvarlayacağınızı da fonksiyona parametre olarak verebiliyorsunuz. Fakat vermek zorunda değilsiniz. Örnek sorgu şu şekildedir, bizim tablomuzda onlıklı sayı olmadığı için ekran görüntüsü ile gösteremeyeceğin. select round(Puan) as Yuvarlanmışpuan from Yerli

Tarih Fonksiyonları (Now, Day, Month, Year)

NOW() : Sistemin tarihini geri döndürür. DAY() : Aldığı tarih değerinin gününü döndürür. MONTH() : Aldığı tarih değerinin ayını döndürür. YEAR() : Aldığı tarih değerinin yılını döndürür. Sistemin tarihini döndürelim ;

SELECT NOW() AS Sistem_Tarihi
FROM Filmler

Sistem tarihinin gününü döndürelim ;

SELECT DAY(NOW) AS Gün
FROM Filmler

Sistem tarihinin ayını döndürelim ;

SELECT MONTH(NOW) AS Ay
FROM Filmler

Sistem tarihinin yılını döndürelim ;

SELECT YEAR(NOW) AS Yıl
FROM Filmler

MS SQL LIKE KOMUTU KULLANIMI

Merhaba Arkadaşlar, Bugün sizlere Sql Server üzerinde Like komutunun nasıl kullanılacağını anlatacağım. Öncelikle LIKE komutu nedir? LIKE komutu = Where komutu ile aynı anlamda kullanılabilir yani bir alan içerisinde bir yazı aramak istiyorsak Likekomutu ile arama işlemini yapabiliriz. Hemen bir adet uygulama yapalım;

SQL LIKE Syntax

SELECT column_name(s) FROM table_name WHERE column_name LIKE pattern;

deneme

Bu sorguad; select * from Employees where FirstName like ‘Nancy’ Yapmak istediğimiz  ”Employees” tablosunda, ”FirstName” column da ”Nancy” ile eşit  olan  kayıdı getir. LIKE komutunun kullanımı sadece bununla sınırlı değildir. Birçok kullanım şekli vardır LIKE komutunun şimdi bazı önemli olduğunuz düşündüğüm kullanımlarını da bakalım. 2 Burada ise; select * from Categories where CategoryName like ‘Con%’ sorgusu ile ”Categories” tablosunda  where (Nerede) ”CategoryName” column da, ‘Con%” =Con ile başlayanları getir. % işareti ile yapılmak istenen şudur; % eğer baştaysa= ‘%gel’= Nasıl başlarsa başlasın ama ‘gel’ ile bitsin. % eğer sondaysa= ‘git%’= ‘git’ ile başlasın nasıl biterse bitsin. % eğer başta ve sonda ise= ‘%Selamlar%’= Başı ve sonu da dahil  içinde ‘Selamlar’ ifadesi geçenleri getir. Bira karışmış olabilir ama örneklerle net olacaktır. 3select * from Categories where CategoryName like ‘%s’ Bu sorgu ile ‘CategoryName ‘ column da bulunan verilerden başı ne ile başlarla başlasın sonu ‘s’ ile biten ifadeler sorgulanmıştır.

Burada donem sutununun içerisinde “s” verisi geçen bütün kayıtları listeledik. “s” kelimenin başında ortasında sonunda neresinde olursa olsun hiç farketmez hepsini getirecek. Bunu ‘s’ in başına ve sonua % ifadesini koyarak gerçekleştirdik. Daha farklı kullanımlarda bulunmaktadır.

Bruada ‘__a%’ ile demek istediğim tam olarak şudur; ‘_’ boşluk(ne olursa olsun önemli değil) demektir, 2 adet _ koydum ve 3 karakteri ‘a’ olarak belirledim ve sonuna % koydum. İlk iki karakteri ne olursa olsun 3. karakter ‘a’ olsun ve  ne ile biterse bitsin farketmez. En çok işimize yarayacak komutlar genelde bunlardır.

MS SQL DML

Merhaba Arkadaşlar;

Data Manipulation Language (DML) tabloları şema nesneleri içinde verileri yönetmek için kullanılır.

Bunlardan bazıları;

SELECT – Veritabanından kayıt okur.
INSERT – Tabloya kayıt ekler.
UPDATE – Tablodaki kayıdı günceller.
DELETE – Tablodan kayırları siler ancak kapladığı alan kalır.
MERGE – UPSERT işlemi (ekleme veya güncelleme)
CALL – PL/SQL veya Java alt programı çalıştırır.

 

Şimdi ufak örneklerle bazı komutları inceleyelim;

SELECT – Veritabanından kayıt okur.

İki farklı Nortwind tablosuna Select yaptık.

INSERT- Tabloya kayıt ekler.

Yukarıdaki sorguladığım Shippers tablosuna yeni bir nakliye firması ekleyelim ve eklendiği görelim.

UPDATE – Tablodaki kayıdı günceller.

En son eklediğim ”Benden hızlısı yok” kargo firmasının name  bilgilerini güncelleyelim.

DELETE – Tablodan kayırları siler ancak kapladığı alan kalır.

Eklediğimiz en son kaydı komple tekrar silelim.

 

MS SQL DDL

Merhaba Arkadaşlar,

Data Definition Language (DDL) tabloları veritabanı yapısı veya şema tanımlamak için kullanılır.

Bunlardan bazıları;

CREATE – Veritabanında nesne yaratır.
ALTER – Veritabanının yapısını değiştirir.
DROP – Veritabanından obje siler.
TRUNCATE – Tablodaki kayıtları içerdikleri alan ile birlikte siler.
COMMENT – Yorum ekler.
RENAME – Nesnenin adını değiştirir.

Aşağıdaki örneklerimizde kod üzerinden CREATE,DROP,ALTER VB. işlemleri yapacağız.

Databseoluşturma ve silme; ”create” komutu ile  Okul adında bir database oluşturuyoruz.

Create database Okul

Şimdi bu oluşturduğumuz Database i ”Drop” komutu ile  silelim.

Drop  database Okul

Şimdi ise hızlıca Üniversiteler adında bir database oluşturalım ve  bu database içerisine ”Create Table” diyerek tablolarımızı ve tablolaromızın içine column name, datatype ve Allow nulls alanlarını oluşturalım oluşturalım.

Oluşturduğumuz tabloların diagram görüntüsü ise aşağıdaki gibidir.

Umarım  biraz anlaşılmıştır.

SQL Northwind Database yükleme

Merhaba,

Northwind veri tabanı MS bize sunmuş olduğu ve tamamen yasal olan veri sql öğrenmekl isteyenlerin kullanmasına açık bir veri tabanıdır.
Şimdi Northwind DB’yi nasıl SQL Server’ ımıza ekleyebiliriz onu anlatacağım.
Bu veritabanı sayesinde SQL’de yapmak istediğiniz neredeyse tüm örnekleri deneyebiliriz.

Microsoft SQL Server Management Studio‘yu açıyoruz.

1) Database sağ tıklayıdıktan sonra Restore Database seçeneğini seçiyoruz.

2) Device seçeneğini seçip hemen karşısındaki bulunan 3 noktaya tıklıyoruz.

3) Açılacak olan pencereden Add butonuna tıklıyoruz ve ilgili dosyayı seçiyoruz.

4) Dosyanın bulunduğu yeri seçiyoruz ve OK butonuna tıklıyoruz.

5) Backup Location bölümünde dosya görünüyor ve tekrardan OK butonuna tıklıyoruz.

5

6) Database yazan yere Database ismini veriyoruz ve sonra ilgili Database’i restore bölgesinden işaretliyoruz sonra OK butonuna tıklıyoruz.

7) İşlemimiz sonunda tamamlanıyor.

Hadi hayırlı olsun.

C# Abstract Class Nedir?

Merhaba Arkadaşlar,

Abstact sözcüğünü soyut ya da özet olarak Türkçe’ye çevirebiliriz ancak teknik olarak devam edersek kendisinden kalıtım veren ancak new anahtar sözcüğüyle instance (örnek kopya) alınamayan sınıflardır diyebiliriz.

Aynı zamanda bir abstract sınıf içerisinde yine abstract sözcüğünü kullanarak metotlar oluşturabilir ve böylece abstract sınıfı tıpkı bir interface (arayüz) gibi kullanabiliriz.

Şimdi Visual Studio’yu açıyor ve C# programlama dilinde yeni bir Windows Form projesi oluşturuyoruz.Ardından
“kedi” adında bir abstract class oluşturuyoruz, daha sonra Abstact classımız tıpkı normal bir class niteliğinde olduğu için içerisine property ve metotlarımızı yazıyoruz:

Abstract sınıfımızı oluşturduktan sonra formumuzun load eventi (olayı) içerisinde new anahtar sözcüğüyle instance almaya
çalışıyor ve ortaya çıkan hatayı görüyoruz:

Visual Studio’nun bahsettiği gibi abstract olarak işaretli bir sınıftan instance alınamaz demiştik,ancak abstract class
başka bir sınıfa kalıtım verebilir.O yüzden “Tom” adında bir kedimiz olsun ve abstract olarak yazdığımız kedi sınıfından
kalıtım alsın:

Formumuza tekrar dönüyoruz ve “Tom” sınıfından instance alıyoruz:

Böylece abstract sınıftan kalıtım alan normal bir sınıftan instance alınabildiğini öğrenmiş oluyoruz

Abstact bir sınıfı interface gibi kullanmak için uyacağımız en önemli kural, sınıf içerisindeki hangi üyeyi interface
olarak kullanmak istiyorsak o üyenin başına mutlaka abstract sözcüğünü eklemek ve erişim tipini private olarak belirtmemek zorundayız.

Eğer bir abstract classı interface gibi kullanmaya karar verirseniz, sınıf içerisindeki metotların başına abstract sözcüğünü kullanacağınız için metotlarınız mutlaka ama mutlaka erişim belirteçlerinden (access modifiers – ileride göreceğiz) public (her yere açık şekilde) olarak tanımlanmak zorundadırlar.
Bunun yanı sıra abstract metotları virtual (sanal) olarak işaretleyemeyiz çünkü abstract sınıf kalıtım verme niteliğinde olduğu için zaten sanal yapıdadırlar.

Interface gibi kullanmak istediğimiz metotlar static (durağan) olarak belirtilemezler çünkü interface mantığında static kavramına yer yok. (Kalıtım veren dinamik yapıdadır her zaman)

Şimdi tekrar Visual Studio’ya geri dönüyor ve “köpek” adında yeni bir abstract class oluşturuyoruz.Bu sınıfımız
içerisindeki metotlara dikkat ederseniz tamamının başında abstract olduğunu ve interface konusunda öğrendiğimiz
gibi metodun içinin boş yalnızca gövdesinin olduğunu göreceksiniz:

Kopek sınıfımızdan Karabaş isimli köpeğimiz için “Karabaş ” adında bir sınıf oluşturuyor ve kopek sınıfından kalıtım alıyoruz:

Sanki normal bir interface’den kalıtım almış gibi sınıfımız üyeleri otomatik biçimde doluyor ve metotlarımızın içerisini
doldurmamız için metot içerikleri genişletiliyor.

Bir abstract class ile interface’den kalıtım almanın en önemli farkı şudur: kalıtım alacak sınıf birden çok interface’den
kalıtım alabiliyorken, interface gibi davranan abstract sınıflardan en çok bir kalıtım alabilmektedir.
Yani çoklu kalıtım almak istiyorsak her zaman interface’leri tercih etmeliyiz.

Abstact sınıfların bir başka özelliği ise bir abstract sınıf hem interface gibi hem de kalıtım vermeyen normal bir sınıf
gibi davranabilir.

eki nasıl oluyor?

Abstact bir sınıf içerisindeki metotlardan hangisinin başında abstract yazıyorsa o metot interface üyesi olarak varsayılırken başında abstract yazmayan metotlar normal bir sınıf üyesi gibi davranırlar ve doğal olarak interface gibi davranmasını istediğimiz metotlar yalnızca gövde yapısındayken normal metot yapısında çalışan metotların içine istediğimiz kodları yazabiliriz.

Gelelim pratik bir örneğe…

“Tavsan” adında bir abstract sınıf oluşturalım ve içerisine abstract olan “koş”, abstract olmayan “zıpla” isimli iki metot ve tipi (string,int) önemli olmayan abstract olan ve olmayan renk ve yaş property’leri ekleyelim:

Şimdi de “Pamuk” adında bir sınıf oluşturalım ve abstract olan tavşan sınıfımızdan kalıtım alalım:

Dikkat ederseniz kalıtım aldıktan sonra yalnızca interface gibi davranan “koş” metodumuzun gövdesi “Pamuk” isimli sınıfımızın içerisinde dolduruldu.Interace gibi davranmayan “zıpla” isimli metodumuz ise aslında bir yere kaybolmadı,arka planda bizi bekliyor.

“Pamuk” isimli metodumuzdan instance alıyoruz:

Gördüğünüz gibi soyut sınıfında oluşturduğumuz metotların ikiside geldi ancak aralarındaki tek fark; interface gibi davranan metodun ne yapacağı “normal” isimli metotta “Pamuk” isimli sınıfta  belirlenirken diğeri Abstract isimli sınıfımızda baştan belirlendi.

C# Virtual ve Override Kullanımı

Merhaba Arkadaşlar,

Bugünkü konumuzda Virtual ve Override Kullanımı ile ilgili bir çrnek yapmaya çalışacağım.

Öncelikle virtual anahtar kelimesini inceleyelim; virtual sözcüğü Türkçe’ye çevrildiğinde “sanal” anlamına gelmektedir ve bir sınıfın metodunu sanallaştırarak daha sonra o sınıftan alınacak kalıtım ile metodun içeriğinde değişiklikler yapılarak yeniden kullanılmasına izin verir.

Override sözcüğü ise tam olarak Türkçe’ye çevirilemesinde bazı programcılar “ezmek,büzmek” anlamında kullanırlar.

Visual Studio’yu açalım ve C# programlama dilinde yeni bir Windows Form projesi oluşturduktan sonra “Hesaplamalar” isimli bir sınıf oluşturalım:

Bu sınıfın içerisine “Hesapla” adında virtual bir metot yazalım ve bizden iki sayı istesin ve geriye ondalık sayılar döndürmesi için double değişken değeri döndürtelim.

Hesaplamalar isimli sınıf henüz bir anlam ifade etmediği için hesapla metodunun içerisini boş bıraktık ve herhangi bir matematiksel işlem yaptırmadan sıfır döndürsün istedik,buradaki amacımız bu sınıfın kalıtım verdikten sonra bu metodu yeniden yapılandırmak olacak.
Şimdi bu metodumuzu test edebilmek için formumuza bir buton ve 2 textbox ekliyoruz:

Kullanıcı 2 sayı girecek ve metodumuz girilen sayılara göre hareket edecek,o yüzden kullanıcının butona tıklaması gerektiği için butonumuzun click eventine geçiyor ve “Hesaplamalar” sınıfımızdan instance (örnek kopya) alıyor ve MessageBox.Show() ile sınıfımızın döndüreceği sayısal değeri ekranda göstereceğiz.

Sıra geldik “Topla” isimli bir sınıf yaratmaya,bu sınıfımız “Hesaplamalar” sınıfından kalıtım alsın:

Aldığımız bu kalıtım sayesinde Topla isimli sınıfımız hesapla metodunu da devralmış oldu,yani üst sınıftaki metodu bu sınıftada kullabiliyoruz ancak hesaplamalar sınıfındaki hesapla metodumuz hiçbir işlem yapmadan sıfır döndürdüğü için burada iki sayıyı toplamasını istiyoruz.

Bunun için metodumuzun adını ve parametrelerini bire bir aynı yazıyor ve override sözcüğünü yanına ekliyoruz:

Bu sayede hesaplamalar üst sınıfındaki metodun içeriğini değiştirmiş olduk ve kendisine toplama fonksiyonu vermiş
olduk.Şimdi bu topla sınıfımızdan form üzerinde instance alarak yeniden kullanalım:

Gördüğünüz gibi hesaplamalar sınıfındaki hesapla metodu sıfır döndürürken aynı metodu kalıtım alan topla sınıfında
yeniden yapılandırarak toplama yapmasını sağladık,işte bu olaya metotların kalıtım alarak yeniden yapılandırılması ya da
sık olarak söylendiği gibi  “ezilmesi” diyoruz.

Şimdi ise ”Çarpma” işlemi için bir sınıf oluşturalım ve aynı şeyleri yapalım.

Şimdi bu carpmasınıfımızdan form üzerinde instance alarak yeniden kullanalım:

Virtual ve override konusunda dikkat etmemiz gereken iki nokta var; birincisi bir metodun kalıtım alınarak yeniden yapılandırılabilmesi için adının,dönüş tipinin (int,string gibi) ve parametrelerinin bire bir aynı olması gerekmektedir.

Bir diğer dikkat etmemiz gereken ise daha sonra override edilmeyecek metotlarımızı gereksiz yere virtual ile sanallaştırarak performans düşüşü yaşayabileceğimizi göz önünde bulundurmalıyız.Yani yok yere virtual işaretleme yapmamalıyız.