SQL Server - Volkan Atasever

advertisement
İçindekiler
22. BÖLÜM
Veri Tabanı İşlemleri.....................................................................................527
SQL Server...............................................................................................527
Prosedür yazma.......................................................................................543
Temel TSQL Bilgileri.................................................................................548
Veritabanına bağlanma...........................................................................565
Insert işlemi.............................................................................................567
Update işlemi..........................................................................................568
Delete işlemi............................................................................................570
Değer döndüren Stored Procedure kullanma..........................................571
Arama yapma..........................................................................................572
Gridleri Kullanma.....................................................................................573
Otomatik WinForm yetenekleriyle işlem yapma.....................................580
Combobox doldurma...............................................................................586
Listbox doldurma.....................................................................................588
MySQL ile Çalışma...................................................................................590
22. BÖLÜM
Veri Tabanı İşlemleri
SQL SERVER
Bu bölümde C# ile veritabanı programcılığı yapacağız. Eğer veritabanı yönetimini ve
veritabanı sorgulamalarını bilmiyorsanız veritabanı programcılığı kısmını anlamanız çok
zor olur. Bu yüzden SQL Server Jump Start yaparak SQL Server veritabanı yönetimine ve
sorgulamalarına hızlı bir şekilde bahsedip sizi veritabanı programlamaya ısıtmış olacağız.
Şu anda Microsoft’un kendi ürünü olan SQL Server veritabanı serisi .NET geliştiriciler için
birincil veritabanı olmaktadır. C# programlama dilini kullanırken SQL Server sürümlerinden
biri ile de geliştirme yapmaktadırlar. Baktığınız zaman C# programlama dili ile .NET platformu
üstünde yazılım geliştirenler sadece SQL Server sürümleriyle sınırlı değiller. Aynı zaman da
MySQL, MongoDB, MariaDB gibi bir çok veritabanı ile konuşabilirler. Microsoft’un kendi
ürünü olan SQL Server Veritabanı ise .NET platformların çalışan ve çokca tercih edilen bir
ürün olduğunu söylemeden geçemeyeceğim. Bunun sebeplerinden bazıları yanın Reporting
Services, Analysis Server gibi ek araçlarla hem raporlama hem de analiz safhalarını daha
kolay yönetmeye olanak tanır. SQL Profiler isimli uygulamasıyla adım adım veritabanında
527
C# 6.0
ne oluyor takip edebilirsiniz. Ücretsiz sürümü olan SQL Server Express edition’ı istediğiniz
zaman indirebilirsiniz. 10GB’a kadar ücretsiz veritabanı alanıda sunmakta. Çoğu proje için
bu alanın fazlasıyla yeterli olduğunu söylemeden geçemeyeceğim. Piyasada hala SQL Server
2008, SQL Server 2008 R2, SQL Server 2012 ve yeni sürüm SQL Server 2014 veritabanı
sistemlerini görebilirsiniz. Bir veritabanı sunucusu aslında kendi başına bir engine’dir. Yani
bir veritabanı motorudur. Arka planda bir servisle çalışır veri iletişimi gerçeklir. Biz bunları
yönetmek için bir yönetim uygulamasına ihtiyaç duyarız. Bu yönetim uygulaması SQL Server
için Management Studio’dur. MySQL için ise MySQL Workbench uygulamasıdır.
SQL Server’ın doğuşuğu Wikipedia tanımıyla;
“Versiyon 7.0’dan önce “kod tabanı” Sybase SQL Server tarafından Microsoft ’a satıldı, ve
bu Microsoft ’un kurumsal seviyede veritabanı pazarına girişi oldu. Sybase SQL Server 3.0
ile esasen aynı olan ilk versiyon, SQL Server 1.0’ı yaratmak ve pazarlamak adına Microsoft,
Sybase ve Ashton-Tate ile takım oluşturdu. 1992’de Microsoft SQL Server 4.2 sevkedildi.
Daha sonra Windows NT 3.1 ile aynı zamanda Microsoft SQL Server 4.21 piyasaya sunuldu.
Microsoft SQL Server 6.0 Windows NT için dizayn edilmiş ilk versiyon olmasıyla birlikte
Sybase’den talimat alınmaksızın piyasaya çıkartıldı.
SQL Server 7.0, miras Sybase kodu ile yazılan bir “rewrite” versiyonu oldu, ve yerine SQL
Server 2000 çıkartıldı. SQL Server 2000, IA-64 mimarisinden farklı olarak yazılan ilk sürüm
oldu.
SQL Server 2000 sürümünden 10 yıl sonra performansta artışlar görüldü, IDE araçlarını ve
tamamlayıcı başka sistemleri içeren SQL Server 2005 piyasaya sunuldu.” Şeklindedir.
528
Veri Tabanı İşlemleri
Management studio’yu kurduktan sonra çalıştırdığımızda eğer express sürümü yüklemediysek
ve kendi makinemiz üzerinden sunucuya erişeceksek (local) yazmamız yeterlidir.
Eğer SQL Server express sürümünü veya bir den fazla veritabanı motoru kurduysak \ işareti ile
kurduğumuz veritabanı sunucusu motor ismini yani instance’ını belirtmemiz gerekmektedir.
Aynı zamanda kurulum yaparka SQL Server Authentication belirttiyseniz login isminiz sa
olacaktır. Şifreyi belirlediğiniz şifre olarak girebilirsiniz. Diğer durumlarda eğer veritabanı
kurulu bilgisayar üstünden admin yetkileri ile çalışıyorsanız Windows Authentication
seçeneğiyle hiç bir şifre girmeden de login olabilirsiniz.
529
C# 6.0
SQL Server veritabanı sunucusuna bağlandığımız Object Explorer kısmında varsayılan
ayarlarla gelen yapıyı görebilirsiniz.
Veritabanı sunucuna yeni bir veritabanı eklemek için Database kısmına gelip sağ tıklayıp
New Database diyebiliriz.
İsmini belirleyip varsayılan ayarlarla bu veritabanını kullanmaya başlayabiliriz. Şu anda
veritabanımızın ismini csharpkitap olarak belirliyoruz.
530
Veri Tabanı İşlemleri
Eğer veritabanımız yoğun kullanılacak ve durmadan büyüyecekse ilk değer olarak gelen 5MB
veritabanı boyutunu daha yüksek tutmakta fayda var. Ardından Autogrowth özelliğini yüzde
olarak belirlememiz veritabanımız doldukça daha verimli çalışmasına olanak sağlar. Yoksa
1’er mb lık bir büyüme eğer veritabanına 1 dakikada onlarca resim atıyorsanız yavaşlamaya
yol açacaktır.
531
C# 6.0
TEMEL BİLGİLER
Veritabanımızı oluşturur oluşturmaz ilk yapacağımız işlem veritabanımıza tablo eklemek
olmalıdır. Her bir veritabanın en az bir ve daha fazla tablosu olmak zorundadır. Bu sayede
verileri tablolar üzerinde tutabilir. Bunun için veritabanımızı oluşturduktan sonra içinde
bulunan Tables sekmesine gelip sağ tıklamamız gerekmektedir.
Açılan pencerede new table sekmesini seçmeliyiz. Aynı zamanda bir veritabanın içinde hangi
nesneler ve özellikler var buradan ayrıntılarıyla görebiliriz. Örneğin Database Diagrams,
Biews, Programmability bunlardan bir kaçıdır.
New table sekmesine tıklar tıklamaz karşımıza dizayn penceresi çıkacaktır. Bu pencere
üzerinden int, nvarchar,datetime,bit ve char gibi veritiplerini kullanarak tablomuzu dizayn
edelim. İnt bildiğiniz gibi tam sayı değerleri için datetime, tarih değerleri için tutulur. Aynı
şekilde bit, bool değerler içindir. Char karakter ve string deperler içindir. Nvarchar string
değerler içindir.
532
Veri Tabanı İşlemleri
Tablomuzda ilk ID değerimiz primary key yani birincil ve uniq anahtardır. Bunun için üstünde
sağ tıklayıp set primary key dememiz gerekmektedir. Primary key eklediğimiz anda null
değer girilmeyecek şekilde otomatik ayarlama yapılacaktır. Yani allow nulls sekmesindeki tik
kalakacaktır. Artık null karakter girilemez yani boş geçilemez durumdadır.
Bundan sonra yapmamız gereken ikin ayar primary key değerimizin varsayılan olarak bir
değerden başlayıp belirlediğimiz artış miktarı ile her kayıtta kendi kendine artmasıdır. Bunun
için Identity Specification kısmından Is Identity özelliğine Yes dedikten sonra artım miktarını
ve ilk alacağı değeri belirleyebiliyoruz.
533
C# 6.0
Bu ayarlarıda yaptıktan sonra tablo dizayn sekmesinin üstüne sağ tıklayıp save table dememiz
gerekmektedir.
Burada açılan pencere sayesinde tablomuzun belirlediğimiz ismini buraya yazabiliriz.
534
Veri Tabanı İşlemleri
Tabloyu veya tabloları eklediğimizde her daim anında veritabanımızın tables kısmına
yansımamakta. Bunun için veritabanımıza sağ tıklayıp refresh dememiz gerekmektedir.
Aynı şekilde tablolar üzerinden oluşutrduğumuz okuyucular tablosuna tıkladığımızda
columns sekmesine bastığımızda tüm kolonları veri tiplerini ve ayarlarını görebiliriz.
535
C# 6.0
Tablomuza sağ tıklayıp select top 1000 rows dediğimizde kayıtlı bilgilerin ilk 1000 tanesi
gelecektir.
536
Veri Tabanı İşlemleri
Şu anda herhangir bir kayıtlı bilgi olmadığından sadece kolon isimlerini resultsda görebilirsiniz.
Aynı şekilde tabloya sağ tıklayıp edit top 200 rows dediğimizde varolan kolonlardaki kayıtları
düzenlyebildiğiniz gibi görsel bir menü üzerinden yeni kayıtlar girebilirsiniz.
537
C# 6.0
Edit top 200 rows sekmesine tıkladıktan sonra tablomuza 4 adet kayıt girdik. Bu kayıtları
tabloda görebilmekteyiz.
Yeni ve özel bir sorgu yazmak istediğimiz zaman menüden new query sekmesini seçmemiz
gerekmektedir.
Bu sekmeyi seçtiğimizde yazdığımız queryler varsayılan olarak gelen master isimli sistem
veritabanında çalışacaktır. Bunu önlemek için ya veritabanı kolonundan veritabanını
seçmeniz gerekmektedir ya da use komutunu kullanarak hangi veritabanı üstünde sorgu
yazacağınızı belirtmeniz gerekmektedir.
Select * from okuyucular dediğimiz anda okuyucular tablosundaki tüm veriler listelenecektir.
Use csharpkitap komutu ile csharpkitap veritabanını kullanacağımızı belirttik.
538
Veri Tabanı İşlemleri
Veritabanına kayıt girmek için insert komutunu kullanacağız. Insert komutunun yapısı;
Insert tablo_ismi(kolon isimleri) values(değerler) şeklindedir. Insert komutumuzla tablomuza
sınırsız kayıt atabiliriz. Tabi bu C# ile programlama yaparken bilmemiz gereken özelliklerden
biri. Tüm komutları C# programlama diliyle .NET platformunda veritabanına ulaşırkende
kullanabiliriz.
INSERT yani giriş işlemlerinin yanı sıra UPDATE işlemleride veritabanı tablolarında sık sık
yapılmaktadır. Update komutunun yapısı şöyledir;
539
C# 6.0
Update tablo_ismi set tablonun_kolonu=yeni_değer
Tablodaki kolon sayısı kadar set ifadesinden sonra kolon ismi ve yeni değer tanımlayabiliriz.
Ama bu durumda tablodaki tüm değerler güncellenecektir. Bunu kontrollü yapmak için bir
koşul koymamız gerekmektedir. Koşul komutumuz yani sorguları ve update’leri filtreden
geçirmek için kullanacağımız anahtar kelime where anahtar kelimesidir. Burada aritmetik
karşılaştırmalardan mantıksal karşılaştırmalara kadar tüm varyasyonları yapabiliriz.
Tabloların yanı sıra veritabanımızda view dediğimiz veritabanı nesneleride vardır. Çağırımları,
kullanımları ve sorgulamaları tablo yapısıyla aynı şekildedir. Bu tablolara sadece insert,
update ve delete işlemlerini yapamayız.
View oluşturmak için new view dedikten sonra açılan pencereden tablo veya eski yapılan
viewlerden seçebilirsiniz.
540
Veri Tabanı İşlemleri
Seçtiğiniz tabloların istediğiniz kolonun alarak where anahtar kelimesiyle çeşitli sorgularla
kısıtlayabilirsiniz.
View nesnesini kaydetmek tablo kaydetmek gibidir. Save view dediğiniz anda sorgusunu
yazdığınız view kaydolacaktır.
541
C# 6.0
Burada view nesnemize kisiler ismini verdik. Bundan sonra nasıl önceki tablomuza okuyucular
ismi ile ulaşabiliyorsak artık view’imize kisiler ismi ile ulaşabileceğiz.
Yaptığımız bütün View’ler veritabanımızın içindeki views sekmesinde gözükecektir.
Aynı şekilde sağ tıklayıp select top100 dediğimiz zaman oluşturduğumuz view’ın belirlediğimiz
kolonları gelecektir. Where anahtar kelimesi ile koşullar ve sorgular rahatlıkla eklenebilir.
542
Veri Tabanı İşlemleri
PROSEDÜR YAZMA
SQL Server’ın program yazarken kullanacağımız en önemli özelliklerinden biride Stored
Procedure’ler yani saklı yordamlardır. Bu prosedürler bir defa yazılım veritabanına
tanımlandıktan sonra sınırsız sayıda çağırabilirler. İşlemler ve sorgular veritabanı
uzayında yapıldığından uygulamamızdan bir prosedür çağırırsak bize daha hızlı bir sonuç
döndürecektir. Stored prosedürler metotlar ve fonksiyonlar gibi parametre alabilirler ve
parametre döndürebilirler.
Bir prosedür oluşturmak için create procedure anahtar kelimesini kullanmaktayız. Genel
yapısı şu şekildedir;
543
C# 6.0
Create procedure prosedür_ismi
Alınan parametrelet ve dışarıya verilecek parametreler
As
Begin
İşlemler
End
Şeklinde bir yapısı vardır.
Create procedure anahtar kelimelerini kullandığımız gibi proc şeklinde kısaltma halini de
kullanabiliriz.
Eğer bir hata yaptık veya stored prosedürümüzü güncellemek istiyorsak alter anahtar
kelimesini kullanarak içinde gerekli değişikleri yapıp tekrar execute etmemiz gerekmektedir.
544
Veri Tabanı İşlemleri
Unutmayın query penceresinde yaptığınız herşeyi etkinleştirmek için execute butonuna
mutlaka basmanız gerekmektedir. Bu visual studio’da build ve run yapmanızla eş değerdir.
Stored prosedürlerimi execute anahtar kelimesi ile çağırarak çalıştırabilmekteyiz. Execute
anahtar kelimesini kullanabildiğimiz gibi kısaltması olan exec anahtar kelimesinide
kullanabiliriz. Bu şekilde stored prosedür içindeki işlem gerçekleşecektir.
545
C# 6.0
Bir başka stored prosedür olarak insert işlemimizi dışarıdan parametre alarak yapan
bir prosedür tanımlayalım. Bu sayede her seferinde insert values anahtar kelimelerini
kullanmamıza gerek kalmayacak. Stored Procedure deki parametrelerimiz @ işareti ile
belirtilen parametrelerdir. Insert işleminin values kısmınada bu parametreler aktarılmaktadır.
546
Veri Tabanı İşlemleri
Bir stored prosedüre parametre aktarabildiğimiz gibi geri dönüş parametresi de
alabilmekteyiz. Bu metot ve fonksiyonlarda gördüğünüz return ile döndürğünüz işlemin bir
benzeridir.
Profesyonel bir veritabanı tasarımı birden fazla tablo barındırmaktadır. Aşağıda birden fazla
tablo barındıran bir veritabanını görebilirsiniz.
547
C# 6.0
Örneğin bu veritabanın sadece üye ID’sine sahip olarak 4 kolonu birbirine join ile eklediğimizde
bir üyenin ürünlerine ulaşabiliriz. Veritabanı tasarımını iyi yaptığınız sürece tüm işlemlerinizi
kolaylıkla gerçekleştirebilirsiniz.
TEMEL TSQL BİLGİLERİ
Yukarıda dizayn penceresinde tablo oluşturabildiğimiz gibi kodla da tablo oluşturabiliriz.
create table yazarlar
(
ID int primary key identity(100,10),
isim varchar(20),
soyisim varchar(20),
yas int,
dogumtarihi datetime,
evlimi bit,
tckimlik char(11)
)
Şimdi yazarlar tablomuz üzerinde SQL Sorgulamada kullanacağımız en önemli özelliklere
bakalım. Bunun için yazarlar tablomuza belli miktar kayıt attım. Bu sayede bu kayıtlar
üzerinden sorgulama yapabileceğiz.
Yazarlar tablo kayıtlarımız;
548
Veri Tabanı İşlemleri
Şimdi bu kayıtlarımızlar birlikte çeşitli sorgulamalarımızı ve bunların nasıl çalıştığını
inceleyelim.
Bu sorgumuzda = operatörüyle yaşı 30’a eşit olanları getiriyoruz.
Bu sorgumuzda <= operatörüyle yaşı 30’a eşit ve 30’dann küçük olanları getiriyoruz.
Bu sorgumuzda >= operatörüyle yaşı 30’a eşit ve 30’dan büyük olanları getiriyoruz.
549
C# 6.0
Bu sorgumuzda != operatörüyle yaşı 30’a eşit olmayanları getiriyoruz.
550
Veri Tabanı İşlemleri
Bu sorgumuzda !< operatörüyle yaşı 31’den küçük olmayanları getiriyoruz.
Bu sorgumuzda !> operatörüyle yaşı 30’dan büyük olmayanları getiriyoruz.
Bu sorgumuzda between ve and operatörüyle 18 ve 40 yaş arasında olan kişileri
çağırıyoruz.
551
C# 6.0
Bu sorgumuzda yaşı 20 ile 40 arasında olmayanları çağırıyoruz.
Bu sorgumuzda and operatörünü kullanıyoruz. Bu mantıksal bir operatördür. İf deyimlerinde
kullandığımız && operatörüyle aynı işleve sahiptir. Evli ve yaşı 35’ten küçük olanları
listeliyoruz.
552
Veri Tabanı İşlemleri
Bu sorgumuzda or operatörünü kullanıyoruz. Bu mantıksal bir operatördür. İf deyimlerinde
kullandığımız || operatörüyle aynı işleve sahiptir. Evli veya yaşı 35’ten küçük olanları
listeliyoruz.
Bu sorgumuzda distinct anahtar kelimesini kullanıyoruz. Aynı soyisim birden fazla kullansada
sadece tekil olarak tüm soyisimleri getirmektedir.
553
C# 6.0
Bu sorgumuzda kolon değerimizi aritmetik işleme sokuyoruz. Aynı zamanda as anahtar
kelimesi ile kolon ismine takma bir isim veriyoruz.
Bu sorguda metin işlemleri yapıyor iki kolonu arasında boşluk olacak şekilde birleştirip
kolona as operatörüyle takma isim veriyoruz.
554
Veri Tabanı İşlemleri
Bu sorguda isim ve soyisim arasına bir nokta koyup sonunada @ işareti ekleyip bir domain
ekliyoruz. Bunu mail takma ismi ile görüntülüyoruz.
Order by ve asc anahtar kelimesiyle isim kolonuna göre kayıtları a’dan z’ye sıralıyoruz.
555
C# 6.0
Order by anahtar kelimesiyle isim kolonuna göre kayıtları a’dan z’ye sıralıyoruz. Asc
kullanmadığımız zaman da a’dan z’ye sıralama yapmaktadır.
Order by ve desc anahtar kelimeleri ile isim kolonuna göre tersten sıralıyoruz.
556
Veri Tabanı İşlemleri
Bu sorguda top anahtar kelimesi ile en üstteki 5 kaydı alıyoruz.
Bu sorguda yaşı büyükten küçüğe doğru sıralıyoruz ve en üstteki ilk kaydı alıyoruz. Bu sayede
en yaşlı yazarımızı bulmuş oluyoruz.
557
C# 6.0
% karakteri ve _ karakterleri özel karakterlerdir. Alt çizgi yani _ karakteri sadece tek bir
karakter yerine joker olarak geçer. % özel karakteri ise önüne veya arkasına aldığı değerlere
göre ne olursa olsun tüm karakterleri getirir ve boyut önemsemez. V% dediğimiz anda v ile
başlayan ve sonra ne olursa olsun tüm kayıtları getir demek istemekteyiz.
Burada ismi v ile başlayıp soyadı r ile biten kaydı veya kayıtları listeliyoruz.
Bu sorguda _ karakteri ile isminin ilk karakteri ne olursa olsun ama mutlaka ikinci karakterde
a olsun devam önemli değil şeklinde bir sorgu yazmış bulunmaktayız.
Upper fonksiyonu parametre olarak verdiğimiz kolondaki karakterlerinin hepsini büyük
harflerle görmemizi sağlar.
558
Veri Tabanı İşlemleri
lower fonksiyonu parametre olarak verdiğimiz kolondaki karakterlerinin hepsini küçük
harflerle görmemizi sağlar.
559
C# 6.0
Bu sorgudaki max fonksiyonu parametre olarak aldığı kolondaki en büyük değeri döndürür.
Bu sorgudaki min fonksiyonu parametre olarak aldığı kolondaki en küçük değeri döndürür.
Avg fonksiyonu parametre aldığı kolonlardaki değerlerin ortalamasını döndürmektedir. Bu
sorguda yazarlar tablosundaki yasların ortalaması alınmıştır.
Count(*) fonksiyonu o sorgunun geri döndüğü kayıt sayısını vermektedir.
Sum fonksiyonu parametre olarak aldığı kolondaki değerlerin toplamını vermektedir.
560
Veri Tabanı İşlemleri
Substring fonksiyonu belirtilen kolonun hangi karakterler arasında kesme yapılacağını
parametre olarak aldıktan sonra bunları ekrana yansıtmaktadır.
Bu sorgumuzda group by anahtar kelimesi ile evlimi değelerine göre gruplandırma yaptık.
Evlimi bir bit değeri olduğundan ve true,false değerlerini aldığında bize otomatik olarak iki
grup oluşturdu. Bu iki grubunda ortalama yaş ortalamasını avg fonksiyonu ile aldık.
561
C# 6.0
Group by ile kullanılan having anahtar kelimesinde bir koşul belirledik ve sum fonksiyonu ile
yaş kolonlarının toplamını aldık.
Bazen sadece tek tablo ile çalışmaktan daha çok iki veya daha fazla tabloyu birleştirme
ihtiyacı duyarız. Bunun için join dediğimiz kavram bizi büyük zorluklardan kurtarmaktadır. Bu
sayede iki veya daha fazla tabloyu belirlediğimiz kurallara göre birleştirebilmekteyiz.
İlk bahsedeceğimiz kavram inner join kavramıdır. Otomatik birleştirme yapmaya kalktığınızda
da sql server inner join kullanacaktır. Inner join kullanarak iki tabloyu nasıl birleştirdiğinizi
INNER JOIN tablosunda görebilirsiniz. Aynı zamanda kullanımı şöyledir;
select * from tablo1 tab1
inner join tablo2 tab2 on tab1.ID = tab2.ID
562
Veri Tabanı İşlemleri
Left outer join kullanarak iki tabloyu nasıl birleştirdiğinizi LEFT OUTER JOIN tablosunda
görebilirsiniz. Left outer join kullanımı şöyledir;
select * from tablo1 tab1
left outer join tablo2 tab2 on tab1.ID = tab2.ID
Right outer join kullanarak iki tabloyu nasıl birleştirdiğinizi RIGHT OUTER JOIN tablosunda
görebilirsiniz. Rigiht outer join kullanımı şöyledir;
select * from tablo1 tab1
right outer join tablo2 tab2 on tab1.ID = tab2.ID
563
C# 6.0
Left outer join where null kullanarak iki tabloyu nasıl birleştirdiğinizi LEFT OUTER JOIN Where
Null tablosunda görebilirsiniz. Left outer join where null kullanımı şöyledir;
SELECT tab1.*,tab2.*
FROM tablo1 tab1
LEFT OUTER JOIN tablo2 tab2 ON tab1.ID = tab2.ID
WHERE tab2.ID IS NULL
Full outer join where null kullanarak iki tabloyu nasıl birleştirdiğinizi FULL OUTER JOIN Where
Null tablosunda görebilirsiniz. Full outer join where null kullanımı şöyledir;
SELECT t1.*,t2.*
FROM Table1 t1
FULL OUTER JOIN Table2 t2 ON t1.ID = t2.ID
WHERE t1.ID is NULL or t2.ID IS NULL
564
Veri Tabanı İşlemleri
Veritabanına bağlanma
Veri tabanına bağlanırken bağlantı cümlecikleri yazarlarız. Bu cümleciklerin isimleri
connection stringlerdir. Öncelikle bu stringleri nasıl tanımlayabileceğimizi incelyeceğiz.
Bu connection stringleri standar güvenlik veya farklı seçenekler sunarlar. Onlardan birini
seçmemiz gerekecektir.
Standart Güvenlik
Data Source=Sunucu_Adresi;Initial Catalog=DataBase_İsmi;User Id=Kullanıcı_
ismi;Password=Şifre;
Birden fazla SQL Server insatance’ı bulunun yani bir serverda birden fazla SQL Server
Database Engine kurulu olan yerde Sunucu_Adresi kısmında Sunucu_Adresi\instanceİsmi
şeklinde kullanın
Eğer SQL Server 2008 Express kullanıyorsanız Sunucuisminden sonra Sunucuismi\
SQLEXPRESS şeklinde DATA Source’u belirtmeyi unutmayın.
Standart Güvenlik ve alternaf yazım
Bu Connection String’de bir önceki ile aynı etkiyi yapmaktadır. Birden fazla anahtar kelime
olduğu için çeşitli şekillerde gösterilebilmektedir.
Server=Sunucu_Adresi;Database=DataBase_İsmi;User ID=Kullanıcı_
İsmi;Password=Şifre;Trusted_Connection=False;
Güvenli (Trusted) Bağlantı
Data Source=Sunucu_İsmi;Initial Catalog=DataBase_İsmi;Integrated Security=SSPI;
Güvenli (Trusted) Bağlantı ve alternaf yazım
Bu Connection String’de bir önceki ile aynı etkiyi yapmaktadır. Birden fazla anahtar kelime
olduğu için çeşitli şekillerde gösterilebilmektedir. Server=Sunucu_İsmi;Database=DataBase_İsmi;Trusted_Connection=True;
SQL Server instance’ına bağlanmak
Yukarıda belirtildiği gibi bir sunucuda birden fazla SQL Server DatabaseEngin yani insatance
kurulumu varsa aşağıdaki gibi connection string’i düzenlemeniz gerekmektedir
Server=Sunucuismi\Instance_ismi;Database=DataBase_ismi;Trusted_Connection=True;
Windows CE kullanan aygıtlar için Trusted Bağlantı
565
C# 6.0
SSPI veya Trusted bağlantı kullanmanız gerekmektedir. Bunun için aşağıdaki cümleciği
kullanın
Data Source=Sunucu_Adresi;Initial Catalog=DataBase_İsmi;Integrated Security=SSPI;User
ID=Domainİsmi\Kullanıcıİsmi;Password=Şifre;
Bu cümlecik sadece CE aygıtları üstünde çalışacaktır.
IP adresi bağlantı yolu ile
Data Source=190.190.200.100,1433;Network Library=DBMSSOCN;Initial
Catalog=DataBase_İsmi;User ID=Kullanıcı_İsmi;Password=Şifre;
DBMSSOCN=TCP/IP.
SQL Server’ın varsayılan bağlantı portu 1433’dür Data source bu portu kullanır.
MARS (multiple active result sets) Kullanımı
Server=Sunucu_Adresi;Database=DataBase_İsmi;Trusted_Connection=True;
MultipleActiveResultSets=true;
Yerel SQL Server Express bağlantısınıda database’i ekleyerek bağlantı kurmak
Server=.\SQLExpress;AttachDbFilename=c:\asd\qwe\mydbfile.mdf;Database=DataBase_
İsmi; Trusted_Connection=Yes;
Niçin database parametrelerine ihtiyacımız var ? Eğer bu isimde bir database mevcutsa, bu
database’i SQL Server tekrar attach etmeyecek.
Database dosyasını attach etmek ve bunu ihtiva eden lokasyonu SQL Server Express
kurulumuna göstermek
Server=.\SQLExpress;AttachDbFilename=|DataDirectory|databasedosyaismi.mdf;
Database=DataBase_İsmi;Trusted_Connection=Yes;
Niçin database parametrelerine ihtiyacımız var ? Eğer bu isimde bir database mevcutsa, bu
database’i SQL Server tekrar attach etmeyecek.
Database mirroring yaparken kullanacağımız SQL Server bağlantı string’i
Data Source=Sunucu_Adresi;Failover Partner=MirrorServer_Adesi;Initial
Catalog=DataBase_İsmi;Integrated Security=True;
Asenkron işlemlerde SQL Server bağlantısının asenkron isteklere cevap verebilmesi için
aşağıdaki string’i kullanmalısınız.
Server=Sunucu_Adresi;Database=DataBase_İsmi;Integrated Security=True;Asynchronous
Processing=True;
566
Veri Tabanı İşlemleri
Insert işlemi
Veritabanı işlemleri yaparken öncelikle herhangi bir sql komutunu çalıştırabileceğimizi
bilmenizi isterim. Bunun için öncelikle connection stringimizi belirledikten sonra
SqlConeection sınıfımızda oluşturduğumuz nesneye bunu parametre olarak veriyoruz
ardından sqlcommand sınıfımızdan nesne oluşturup bu nesnenin CommandText özelliğine
çalıştırmak istediğimiz sorguyu string olarak tanımlıyoruz. String komutumuzda + ve string
işlemleri ile birleştirme yapaibldiğimiz için dinamik sql cümlecikleri yazabiliyoruz. Bu işlemi
tanımlamak içinde SqlCommand sınıfımızdan oluşturduğumuz nesnenin CommandType
özelliğine CommandType.Text atamasını yapıyoruz. Ardından Connectionımızı Open
metodu ile açtıktan sonra sqlcommand sınıfından oluşturduğumuz nesne üzerinden
ExecuteNonQuery() metotunu çalıştırıyoruz. İsterseniz bir int türünden değişkene bu
metodun geri dönüşünü atayabilirsiniz bu sayede kaç kolonun etkilendiğini görebilirsiniz.
Burada cümleciğimiz inser işlemi olduğundan dolayı insert işlemini gerçekleştirmiş oluyoruz.
public bool insert_islemi(string deger1, string deger2,string
deger3)
{
string con = “Data Source=(local);Initial
Catalog=database_ismi;User Id=sa;Password=sifre_buraya;”;
SqlConnection sqlConnection1 = new SqlConnection(con);
SqlCommand cmd = new SqlCommand();
Int32 rowsAffected;
cmd.CommandText =
“insert tablo_ismi(isim,soyisim,yas,sehir) values(‘” +
deger1 + “’,”+deger2+”,’”+deger3+”’”;
cmd.CommandType = CommandType.Text;
cmd.Connection = sqlConnection1;
try
{
sqlConnection1.Open();
rowsAffected = cmd.ExecuteNonQuery();
}
catch (SqlException hata)
{
return false;
}
finally
{
sqlConnection1.Close();
}
}
return true;
567
C# 6.0
Aynı işlemi bu sefer storedprocedure çalıştırarak parametre aktarması yapacağız. Fakat bu sefer
bazı metotlar ve nesneler değişiklik göstermektedir. Bu sefer SqlCommand sınıfından nesnemize
stored procedure ismini veriyoruz. Aynı zamanda CommandType olarak StoredProcedure
seçeneğini seçmekteyiz. SqlDataReader burada sorgudan dönen geri dönüşü almaktadır.
public bool insert_with_sp(string deger)
{
SqlConnection conn = null;
SqlDataReader rdr = null;
string prm = deger;
try
{
conn = new
SqlConnection(“Data Source=(local);Initial
Catalog=databas_ismi;User Id=sa;Password=sifre_buraya;”);
conn.Open();
SqlCommand cmd = new SqlCommand(“insert_procedure “,
conn);
cmd.CommandType = CommandType.StoredProcedure;
deger));
}
cmd.Parameters.Add(new SqlParameter(“@parametre_ismi”,
rdr = cmd.ExecuteReader();
}
catch
{
return false;
}
return true;
Update işlemi
Insert cümlecğinide yaptığımız işlemin aynısını eğer sql cümleciği yazıyorsak update
cümleciğinde de kullanabiliriz. Sadece update cümelciğinde değil herhangi bir sql cümleciğide
kullanabiliriz.
public bool update_islemi(string deger)
{
string con = “Data Source=(local);Initial
Catalog=kisiler;User Id=sa;Password=sifreburaya;”;
SqlConnection sqlConnection1 = new SqlConnection(con);
SqlCommand cmd = new SqlCommand();
Int32 rowsAffected;
cmd.CommandText =
“UPDATE tablo_ismi set kolon_ismi=’” + deger + “’
WHERE ID=’5’”;
568
Veri Tabanı İşlemleri
cmd.CommandType = CommandType.Text;
cmd.Connection = sqlConnection1;
try
{
sqlConnection1.Open();
rowsAffected = cmd.ExecuteNonQuery();
}
catch (SqlException hata)
{
return false;
}
finally
{
sqlConnection1.Close();
}
}
return true;
Insert prosedürümüzle aynı mantıkta çalışan update prosedürümüzün kod tarafında çağrımı
aynı şekildedir.
public bool update_with_sp(string deger,string kosul)
{
SqlConnection conn = null;
SqlDataReader rdr = null;
string prm = deger;
string prm2 = kosul;
try
{
conn = new
SqlConnection(“Data Source=(local);Initial
Catalog=databas_ismi;User Id=sa;Password=sifre_buraya;”);
conn.Open();
SqlCommand cmd = new SqlCommand(“insertsp”, conn);
cmd.CommandType = CommandType.StoredProcedure;
ismi1”, prm));
ismi1”, prm2));
cmd.Parameters.Add(new SqlParameter(“@parametre_
cmd.Parameters.Add(new SqlParameter(“@parametre_
rdr = cmd.ExecuteReader();
}
catch
{
return false;
}
}
return true;
569
C# 6.0
Insert ve update işlemleriyle aynı şekilde çalıştırdığımız delete cümeleciği ile istediğimi
kolonu silebiliriz.
Delete işlemi
public bool delete_islemi(string deger1, string deger2)
{
string con = “Data Source=(local);Initial Catalog=databas_
ismi;User Id=sa;Password=sifre_buraya;”;
SqlConnection sqlConnection1 = new SqlConnection(con);
SqlCommand cmd = new SqlCommand();
Int32 rowsAffected;
cmd.CommandText =”delete from veri where isim=’” + deger1
+ “’ and yas=”+deger2+””;
cmd.CommandType = CommandType.Text;
cmd.Connection = sqlConnection1;
try
{
sqlConnection1.Open();
rowsAffected = cmd.ExecuteNonQuery();
}
catch (SqlException hata)
{
return false;
}
finally
{
sqlConnection1.Close();
}
}
return true;
Aynı şekilde parametre verdiğimiz bir delete prosedürü ile silme işleminide gerçekleştirebiliriz.
public bool delete_with_sp(string deger,string kosul)
{
SqlConnection conn = null;
SqlDataReader rdr = null;
string prm = deger;
string prm2 = kosul;
try
{
conn = new
SqlConnection(“Data Source=(local);Initial
Catalog=databas_ismi;User Id=sa;Password=sifre_buraya;”);
conn.Open();
SqlCommand cmd = new SqlCommand(“insertsp”, conn);
570
Veri Tabanı İşlemleri
cmd.CommandType = CommandType.StoredProcedure;
ismi1”, prm));
ismi1”, prm2));
cmd.Parameters.Add(new SqlParameter(“@parametre_
cmd.Parameters.Add(new SqlParameter(“@parametre_
rdr = cmd.ExecuteReader();
}
catch
{
return false;
}
return true;
}
Değer döndüren Stored Procedure kullanma
Bu bölümde değer döndüren yani output parametresi olan stored prosedürleri incelemiştik.
Output parametreyi alabilmek için ParameterDirection.Outpur özelliğini kullanmamız
gerekmektedir. Aynı zamanda SqlCommand sınfıından türetilmiş nesnemizin parametresinin
direction özelliğine bunu atamamız gerekmektedir. Bu sayede integer, string, bool veya
herhangi bir veri tipinden nesneyi kullanabilir duruma gelmekteyiz.
private int get_id(string deger)
{
int idnum = 0;
SqlConnection conn = new SqlConnection(“Data
Source=(local);Initial Catalog=databas_ismi;User Id=sa;Password=sifre_
buraya;”);
SqlCommand cmd = new SqlCommand(“cheopsmobile.get_id”,
conn);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add(“@ID”, SqlDbType.Int, 50);
cmd.Parameters.Add(“@deger”, SqlDbType.NVarChar, 50);
cmd.Parameters[“@ID”].Direction = ParameterDirection.
Output;
cmd.Parameters[“@deger”].Value = deger;
cmd.Connection = conn;
try
{
conn.Open();
cmd.ExecuteNonQuery();
idnum = Convert.ToInt32(cmd.Parameters[“@ID”].Value);
}
571
C# 6.0
}
catch
{
return 0;
}
conn.Close();
return idnum;
Stored prosedürlerden sadece bir veri tipinden değişken dönmeyebilir aynı zamanda tüm
tablo ve değişen aralıkta kolonu olan tablolar dönebilir. Bu tabloyu tutabilmek için DataTable
sınıfından bir veri türü tanımlamamız gerekmektedir. DataTable tüm tabloyu kendi içinde
tutabilir ve farklı türlerde bu veriyi ayrıştırabiliriz.
public DataTable sehirleri_al()
{
DataTable dt = null;
try
{
SqlConnection connection = new
SqlConnection(connectionstr);
SqlCommand command = new SqlCommand(“sehirgetir”,
connection);
command.CommandType = CommandType.StoredProcedure;
dt = new DataTable();
SqlDataAdapter adapter = new SqlDataAdapter(command);
adapter.Fill(dt);
}
catch
{
return null;
}
return dt;
}
Arama yapma
Arama yaparken yine bir tablo döndüre prosedür kullanmamız gerekmektedir. Aradığımız
tek bir değişken değilse geriye tablo döndürmemiz gerekmekte. Prosedürümüzün sql
cümleciğini T-SQL deki where, between and gibi anahtar kelimelerle yapılandırmalıyız.
public DataTable tablodonduren_prosedur_parametreli(string
MemberID)
{
DataTable dt=null;
try {
572
Veri Tabanı İşlemleri
SqlConnection connection = new
SqlConnection(connectionstr);
SqlCommand command = new SqlCommand(“tabloal”,
connection);
command.CommandType = CommandType.StoredProcedure;
SqlParameter parametre = new SqlParameter(“@MemberID”,
SqlDbType.Int);
parametre.Value = MemberID;
command.Parameters.Add(parametre);
dt = new DataTable();
SqlDataAdapter adapter = new SqlDataAdapter(command);
adapter.Fill(dt);
}
catch
{
return null;
}
return dt;
}
Gridleri Kullanma
Gridleri kullanmak için toolbox içinden DataGridView kontrolünü projemize eklememiz
gerekmektedir.
Ardından DataGridView için DataSoruce eklememiz gerekmektedir. Bu menüyü DataGridView
kontrolünün üstündeki ok işaretine basarak bulabilirsiniz.
573
C# 6.0
Eğer projenize daha önce datasource eklememişseniz datasource kısmında none seçeneğini
göreceksiniz. Add Project Data Source seçeneğiyle projenize data source ekleyebilirsiniz.
Bu butona bastıktan sonra Data Source Configuration sihirbazı açılacaktır. Açılan pencerede
Database seçeneğini seçmemiz gerekmektedir.
574
Veri Tabanı İşlemleri
Ardından gelen pencerede DataSet sekmesine basmamız gerekmektedir. Daha sonra next
butonu ile devam edelim.
Gelen pencerede yeni bir connection oluşturmak için new connection butonuna basmamız
gerekmektedir.
575
C# 6.0
Server ismi olarak SQL Server Engine’in kurulu olduğu IP adresini girebilirsiniz. Eğer o an
bilgisayarınızda kurulu SQL Server Engine’ini kullanacaksanız (local) yazarak bu durumu
belirlemeniz gerekmektedir.
576
Veri Tabanı İşlemleri
Eğer SQL Server kurulumunda herhangi bir şifre belirlemediyseniz ve kurulumu Windows
Authentication modunda yaptıysanız Windows Authetication seçmeniz yeterlidir. SQL Server
kurulurken System Administrator için bir şifre belirlediyseniz SQL Server Authentication
kullanmanız gerekmektedir. İlk kurulum şifreniz için kullanıcı ismi sa ve şifrede belirlediğiniz
karakterlerdir. Farklı bir kullanıcı ve şifre tanımladıysanız onu da kullanabilirsiniz.
Kullanacağınız veritabanınıda seçtikten sonra bağlantıyı test connection ile test etmeniz
gerekmektedir. Ardından next butonuna basıyoruz.
577
C# 6.0
Açılan pencerede tablolar, viewler, stored prosedürler ve fonksiyonları görebilirsiniz. Bu
sayede DataGridView kontrolüne gelecek verileri veya tabloları belirleyebilirsiniz.
Örneğimiz bir tablo seçtik. Bu tablonun tüm kolonlarını seçtiğimiz için ID,urun_ismi ve urun_
tanimi kolonlarıda Grid’e eklenmiştir.
578
Veri Tabanı İşlemleri
Formumuzun üstünde DataGridView kontrolüne eklenmiş ve çalışan bir tabloyu görebilirsiniz.
Tablodaki tüm verileri gridde listeleyecektir.
DataGridView kontrolü ile ilgili tüm özellikleri ve seçimleri properties penceresinden
yapabilirsiniz.
579
C# 6.0
Otomatik WinForm yetenekleriyle işlem yapma
Windows Formlarla işlem yaparken bir çok veritabanı kontrolünü projenize ekleyebilir
bunlarla hem kod tarafından hem de kullanıcı arayüzü kısmında işlemler yapabilirsiniz. En
sık kullanılan bileşenlerden biriside DataSet’tir. Toolbox’tan DataSet bileşinini formunuza
sürükleyip bırakmanız yeterlidir.
580
Veri Tabanı İşlemleri
DataSet’inizin tipini seçerek saklayacağı verileri düzenleyebilirsisniz.
Dataset bileşenini formunuza sürüklediğinizde ilk defa sürüklediyseniz dataset1 ismiyle
görebilirsiniz. Bu isim değiştirilebilir bir isimdir.
581
C# 6.0
Bir başka bileşinimizde BindingSoruce bileşenidir.
BindinSource bileşeninin DataSource’unu belirleyebilir veya yeni DataSource kullanabilirsiniz.
582
Veri Tabanı İşlemleri
Add Project Data Source seçeneğiyle bu seçimi yapabilirsiniz açılan pencereden yine
Database ikonunu seçip next butonuna basmalısınız.
583
C# 6.0
DataSet seçiminide yaptıktan sonra diğer adımları DataGridView kontrolünde olduğu şekilde
tekrar edebilirsiniz.
BindingNavigator kontrolü oldukça başarılı bir kontroldür. Bağlı veritabanı kayıtları arasında
gezinme yapabilirsiniz.
584
Veri Tabanı İşlemleri
Bir çok profesyonel uygulama veritabanından aldığı verileri anlamlandıran çizelgelerden
oluşur. Bu çizelgeler Pie Chart, Bar Chart gibi oldukça tercih edilen çizelgeler olabilmektedir.
Araç kutumuzda veri tabanı kayıtları ile de bağlanabilecek chart kontrolüde bulunmaktadır.
Bu kontrolüde uygulamanızda kullanabilirsiniz.
585
C# 6.0
Combobox doldurma
Herhangi bir combobox’ı formunuza sürüklediğiniz daha önce oluşturduğunuz
DataSource’lardan birini bu kontrole bağlayıp veritabanından beslenmesini sağlayabilirsiniz.
Bunun için üzerindeki küçük ok sekmesine tıklamanız gerekmektedir.
Açılan pencereden DataSource kısmını seçtikten sonra Display Member özelliği için
dönen değerlerden herhangi birisini kullanabilirsiniz. Data source yoksa önceki kısımlarda
anlattığımız şekilde datasource ekleyip bu kolonları ondan sonra seçebilirsiniz.
586
Veri Tabanı İşlemleri
Combobox kontrolünde Display Member alanı olduğu gibi Value Member alanınada değer
atayabilirsiniz. Bir tanesi görünen değer diğer ise o görünen string ifadenin anahtar değeri
olarak kullanabilirsiniz.
Bir formda çalışan ve veritabanından veri çeken combobox uygulamasının örneğini
görebilirsiniz.
587
C# 6.0
Listbox doldurma
Herhangi bir listbox’ı formunuza sürüklediğiniz daha önce oluşturduğunuz DataSource’lardan
birini bu kontrole bağlayıp veritabanından beslenmesini sağlayabilirsiniz. Bunun için
üzerindeki küçük ok sekmesine tıklamanız gerekmektedir.
Açılan pencereden DataSource kısmını seçtikten sonra Display Member özelliği için
dönen değerlerden herhangi birisini kullanabilirsiniz. Data source yoksa önceki kısımlarda
anlattığımız şekilde datasource ekleyip bu kolonları ondan sonra seçebilirsiniz.
588
Veri Tabanı İşlemleri
listbox kontrolünde Display Member alanı olduğu gibi Value Member alanınada değer
atayabilirsiniz. Bir tanesi görünen değer diğer ise o görünen string ifadenin anahtar değeri
olarak kullanabilirsiniz.
Bir formda çalışan ve veritabanından veri çeken listbox uygulamasının örneğini görebilirsiniz.
589
C# 6.0
MySQL ile Çalışma
MySQL, çok sayıda sistemde çalışan multi threaded ve çok kullanıcılı bir veritabanı yönetim
sistemidir. SQL Server sürümlerine bir alternatif olarak düşünebiliriz. Gerçek düyna da SQL
Server’a rakip olabilecek birden fazla Veritabanı Yönetim Sistemi bulunmaktadır. Oracle
DB saymazsak MySQL en çok kullanılan alternatiflerden biridir. Aynı zamanda sadece
Windows platformlarında değil UNIX, OS/2 ve Linux platformlarında da hızlı bir performans
sergilemektedir. Açık kaynak kodlu bir sistem olduğu için diğer platformlarada port edilebilir
durumdadır. ODBC sürücüleri olduğundan .NET üzerinde de kolaylıkla MySQL veritabanı
yönetim sistemine erişerek MySQL tabanlı uygulamalar geliştirebiliriz.
MySQL tarihçesi şöyledir (Wikipedia’dan alıntıdır);
1994 MySQL’in geliştirilmesine başlandı.
1995 MySQL ilk sürümü yayınlandı.
2001 yılında MySQL 3.23 yayınlandı.
2004 MySQL 4.1 beta sürümü, ve gerçek sürümü Ekim 2004 yılında yayınlandı. (R-trees and
B-trees, subqueries, prepared statements)
2008: MySQL 5.1 sürümü yayınlandı. (event scheduler, partitioning, plugin API, row-based
replication, server log tables)
2008 Ocak: Sun Microsystems, bir milyar dolara MySQL’i satın aldı.
2009 Nisan: Oracle, Sun Microsystems’i satın aldı. Oracle, MySQL’i geliştirmeye devam
edeceğini duyurdu.
MySQL Aşağıdaki yapıladı desteklemektedir;
Tables (Tablo)
Views (Görüntü) (Görüntüleme)
Procedures (Prosedür)
590
Veri Tabanı İşlemleri
Triggers
Cursors
MySQL veritabanı yönetim sistemini kurduktan sonra doğrudan .NET uygulamaları altında
C# ile geliştirme yapamazsınız. Bunun için .NET Connector’a ihtiyacınız var. MySQL ADO.NET
sürücüsünü mysql sitesinden indirebilirsiniz.
MySQL sürücüsünü kurmak indirdikten sonra bilgisayarınıza şöyle kurabilirsiniz;
Setup Type kısmında istediğiniz kurulum tipini seçeceksiniz.
591
C# 6.0
Complete seçeneğini seçerseniz tüm frameworkler ve compact framework gibi alternatif
araçlarda sisteminize yüklenecektir.
592
Veri Tabanı İşlemleri
MySQL veritabanı motorunun yönetimini yapacağınız uygulama MySQL Workbench
uygulamasıdır. Bu uygulama SQL Server üstündeki Management Studio’ya denk gelmektedir.
Workbench ekranı üstünden birden fazla connection ekleyebilir veya yerel sunucunuzdaki
verilerle çalışıp yönetebilirsiniz.
593
C# 6.0
Workbenc üzerinde birden fazla araç barınmaktadır.
594
Veri Tabanı İşlemleri
Tables, Views, Stored Procedures ve Functions kısmından işlevsel tüm özellikleri
kullanabilirsiniz.
Aynı SQL Server üzerinde kullandığımız sql cümleciklerini ufak bazı değişikliklerle MySQL
üzerinde de kullanabilirsiniz. Select * from yapısı aynı şekilde MySQL içinde de geçerlidir.
Farklı bir lokasyondaki veritabanına bağlanmak için aynı şekilde connect to database
seçeneğini seçerek bağlantı sağlayabilirsiniz.
595
C# 6.0
.NET uygulamamızda C# ile MySQL bağlantılı yazılım yazmak için öncelikle referanslar
kısmından yüklediğimiz mysql connector’un dll paketlerini eklememiz gerekmektedir.
Kullanacağımız MySQL.Data referansı bize gerekli alt yapıyı sağlayacaktır. Aynı zamanda
Entity Framework yapısı içinde destek bulunmaktadır.
596
Veri Tabanı İşlemleri
Referanslara eklediğimizde MySql.Data başlığının projemize eklenmiş olduğunu görebiliriz.
Uygulamamızı yazarken gerekli olan namespace’ler MySql.Data, MySql, MySql.Data.
MySqlClient isim alanlarıdır. Sql Server kodlaması yaparken kullandığımız SqlConnection gibi
sınıfların isimleri bu isim alanı altında MySqlConnection gibi ufak değişiklikler göstermiştir.
Aynı şekilde SqlCommand MySql ile kodlama yaparken MySqlCommand ismini almıştır.
597
C# 6.0
SqlDataAdapter ismi ise MySqlDataAdapter olmuştur. Bu şekilde klasik Ado.NET kodlaması
yapabilirsiniz.
MySQL ile bağlanan ve işlemler yapan bir sınıf aşağıdaki şekilde tanımlanmış ve
kodlanmıştır.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data.SqlClient;
using System.Data;
using MySql.Data;
using MySql;
using MySql.Data.MySqlClient;
namespace sample_db
{
public class dblayer
{
string connectionstr;
public dblayer()
{
connectionstr = “Network Address=IP_Adresi;” +
“Initial Catalog=’database_ismi’;” +
“Persist Security Info=no;” +
“User Name=’kullanıcı_ismi’;” +
“Password=’parola’”;
}
public DataTable etkinlikleri_al()
{
DataTable dt = null;
try
{
MySqlConnection connection = new MySqlConnection(connectionstr);
string mysqlquery = “SELECT * FROM sample_db.etkinlik order by etkinlik.tarih
desc”;
MySqlCommand command = new MySqlCommand(mysqlquery, connection);
connection.Open();
dt = new DataTable();
MySqlDataAdapter adapter = new MySqlDataAdapter(command);
adapter.Fill(dt);
}
598
Veri Tabanı İşlemleri
}
catch
{
return null;
}
return dt;
public DataTable projeleri_al()
{
DataTable dt = null;
try
{
MySqlConnection connection = new MySqlConnection(connectionstr);
string mysqlquery = “SELECT * FROM sample_db.proje order by id desc”;
MySqlCommand command = new MySqlCommand(mysqlquery, connection);
connection.Open();
dt = new DataTable();
MySqlDataAdapter adapter = new MySqlDataAdapter(command);
adapter.Fill(dt);
}
catch
{
return null;
}
return dt;
}
public DataTable haberleri_al(string baslangic, string bitis)
{
DataTable dt = null;
try
{
MySqlConnection connection = new MySqlConnection(connectionstr);
string mysqlquery = “SELECT * FROM sample_db.haber where yayin_tarihi
between “ + baslangic + “ and “ + bitis + “order by haber.yayin_tarihi desc”;
MySqlCommand command = new MySqlCommand(mysqlquery, connection);
connection.Open();
dt = new DataTable();
MySqlDataAdapter adapter = new MySqlDataAdapter(command);
adapter.Fill(dt);
}
catch
{
return null;
}
return dt;
599
C# 6.0
}
public DataTable duyurulari_al(string baslangic, string bitis)
{
DataTable dt = null;
try
{
MySqlConnection connection = new MySqlConnection(connectionstr);
string mysqlquery = “SELECT * FROM sample_db.haber where yayin_tarihi
between “+baslangic+” and “+bitis+” order by haber.yayin_tarihi desc”;
MySqlCommand command = new MySqlCommand(mysqlquery, connection);
connection.Open();
dt = new DataTable();
MySqlDataAdapter adapter = new MySqlDataAdapter(command);
adapter.Fill(dt);
}
catch
{
return null;
}
return dt;
}
}
}
600
Download