22. BÖLÜM Veri Tabanı İşlemleri...527



Benzer belgeler
1-) Veritabanımıza bağlanmak için bir SqlConnection nesnesi, 2-) Veritabanındaki bilgileri kullanmak (seçme, kaydetme, silme, güncelleme) için

Veritabanı İşlemleri

Veri Tabanı SQL Server ve Management Studio kurulum linkleri:

ASP.NET CLASS KULLANARAK VERİTABANI İŞLEMLERİ

MySqlConnection connection; MySqlCommand command; MySqlDataReader reader; MySqlDataAdapter adapter; DataTable table;

ADO.NET VERİTABANINA BAĞLANTI. Bir web formu üzerinden veritabanına bağlantımızı anlatacağım. UYGULAMA 1

«BM364» Veritabanı Uygulamaları

Maltepe Üniversitesi Bilgisayar Mühendisliği Bölümü Veri Tabanı ve Yönetimi (BİL 301)

Veri Merkezli Uygulamalar Bağlantılı (Connected) Veri Ortamları

Bu işleçlerin dışında, aşağıda belirtilen karşılaştırma işleçlerinden de yararlanılır.

«BM364» Veritabanı Uygulamaları

Mysql Veritabanı Komutları

SQL Komutları (2) Uzm. Murat YAZICI

SP_RENAMEDB eski_isim, yeni_isim VEYA SP_RENAMEDB 'eski isim', 'yeni isim'

Yukarıdakilerden hangileri DML (Data Manipulation Language) ile gerçekleştirilir?

İNTERNET TABANLI PROGRAMLAMA- 12.ders

Yaptığımız web sitelerinin daha kullanışlı olması için veritabanı sistemleri ile bağlantı kurup ihtiyaca göre verileri okuyup yazmasını isteriz.

VERİ TABANI YÖNETİM SİSTEMLERİ-II

Aşağıdaki tabloyu inceleyin. Sorgulama işlemlerini bu tabloya göre yapacağız.

Tavsiye Edilen Önhazırlık Temel SQL Server 2000 bilgisi edinmek.

"SQL Server Management Studio" yazılımını yüklemek için alttaki resmi sitesinden 180 günlük deneme sürümünü indirebilirsiniz.

Bilgisayar Uygulamaları. MySql

Bu uygulamayı yapabilmek için SQL Server'da Query Analyzer kullanabilmekle beraber, ADO.NET bilgisine sahip olmanız gerekir.

Genel Kavramlar. Bilgisayar ortamında işlenebilecek durumda bulunan kayıtlar. Birbiri ile ilişkili veriler topluluğu ve veriler arası ilişkiler

PERKON PDKS Kurulum ve hızlı başlangıç rehberi

T.C GAZİ ÜNİVERSİTESİ BİLİŞİM ENSTİTÜSÜ YÖNETİM BİLİŞİM SİSTEMLERİ ANA BİLİM DALI MS SQL KOMUTLARI VE MS SQL KOMUTLARI İLE İLGİLİ UYGULAMALAR

SQL (Structured Query Language) kendisi bir programlama dili olmamasına rağmen bir çok kişi tarafından programlama dili olarak bilinir.

1. Hafta MS SQL Server 2008 Kurulum ve Tanıtımı BPR255 Veritabanı. Bu Derste Öğrenecekleriniz: Kurulum:

Ders Tanıtım Sunumu. Database Managegement II. Elbistan Meslek Yüksek Okulu Güz Yarıyılı. Öğr. Gör. Murat KEÇECĠOĞLU

Asp.Net Veritabanı İşlemleri

TEMEL SQL SORGU ÖRNEKLERİ. Yukarıdaki sorguyu yazıp çalıştırdığımızda db_market adında bir veritabanı oluşturulur.

SAKLI YORDAM (Stored Procedure) Sibel Somyürek

ADO.NET. Öğr. Gör. Emine TUNÇEL Kırklareli Üniversitesi Pınarhisar Meslek Yüksekokulu

Veritabanına Giriş. Oğuzhan Ceylan. 19 Eylül 2011

Veritabanına Uygulanması

İngilizce'de Relational Database Management System (RDBMS) olarak ifade edilir.

STORED PROCEDURE LER (Saklı Yordamlar)

EBE-368 Veri Tabanı Yönetim Sistemleri SQL

Karabük Üniversitesi, Mühendislik Fakültesi... WEB TEKNOLOJİLERİ

DAO İLE SQL KOMUTLARI. Sql komutlarını artık veri tabanında kullanmaktan başka çaremiz yok arkadaşlar. Şimdi bu sql derslerimize başlayalım.

SQL veri tabalarına erişmek ve onları kullanmak için geliştirilmiş bir lisandır.

SQL e Giriş. Uzm. Murat YAZICI

BLG4134 Görsel Programlama III. Öğr. Grv. Aybike ŞİMŞEK

C#.Net & Linq (Language Integrated Query)

Veri Tabanı Programlamaya Giriş

İnternet Programcılığı

SQL Server 2008 kurulum için Microsoft Windows Installer 4.5 ve üzeri bileşenin bilgisayarınızda kurulu olması gerekir. İndirmek için tıklayın

Android Ders Notları

MOBİL UYGULAMA GELİŞTİRME

İNTERNET PROGRAMLAMA 2 A S P. N E T. Marmara Teknik Bilimler MYO / Hafta 5 Veri Tabanı İşlemleri

1 GİRİŞ 1 C# Hakkında Genel Bilgiler 1.Net Framework 1 CLR 2 CLR Ve CTS 2 Temel Sınıf Kütüphanesi 3 CIL 3 Algoritma Nedir? 4 Sözde Kod (Pseudocode) 5

Oracle da kullanılan veri tipleri:

Aşağıdaki şemaya dikkat edin. Sorgulamalarımızı genellikle bu şemaya göre yapacağız.

Masa üstünde vt34.mdb dosyası var, onu projemize eklemek için, App_Data ya sağ tıkla Add Existing Item vt34.mdb adlı dosyayı seç Add

1.adım : Sql serverda Stored procedure oluşturmamız gerekiyor. Şu adımları izliyoruz.

SP_RENAMEDB eski_isim, yeni_isim VEYA SP_RENAMEDB 'eski isim', 'yeni isim'

KURUMSAL SİTE YAZILIMI KULLANIM KILAVUZU

2 VISUAL STUDIO 2012 GELİŞTİRME ORTAMI

Data Programming SQL Language. Elbistan Meslek Yüksek Okulu Bahar Yarıyılı

Bölüm 10: PHP ile Veritabanı Uygulamaları

Aşağıdaki şemaya dikkat edin. Sorgulamalarımızı genellikle bu şemaya göre yapacağız.

-- işareti tek satırlık açıklamalarda kullanılır. Açıklama olarak yazılan satırın önüne konulması yeterlidir.

SQL ALWAYS ON SİSTEMİNE YENİ CLUSTER NODE EKLENMESİ

Microsoft SQL Server Sorgulama

İleri Web Programlama

Üst Düzey Programlama

BACKUP BİLGİLERİ YUSUF.KAHVECİ. Yusuf KAHVECİ

8 Oracle da tablo yapısı içinde otomatik artan kolon yoktur. (identity kolon

LOG SHIPPING Yusuf KAHVECİ Senior Database

İLERİ VERİTABANI SİSTEMLERİ SUAT ÜSTKAN

Veritabanı. SQL (Structured Query Language)

Swing ve JDBC ile Database Erişimi

KANTAR UYGULAMASI Kurulum Kılavuzu

Ders Tanıtım Sunumu. Database Managegement II. Elbistan Meslek Yüksek Okulu Güz Yarıyılı. Öğr. Gör. Murat KEÇECĠOĞLU

Fonksiyonlar istenilen deger tipinde dönüs yapabilir. INT, VARCHAR deger döndürebileceğiniz gibi bir tablo da döndürebilirsiniz.

SQL'e Giriş. SELECT Deyimi. SQL Komutları. Yardımcı Deyimler

20461C Querying Microsoft SQL Server Modül Seviye Belirleme Testi

NOT: VERİTABANINDAKİ TABLOLARI OLUŞTURMAYI DA UNUTMAYACAĞIZ.

Veritabanı İşlemleri

Microsoft SQL Server 2005 Express Edition Hızlı Kurulum Dokümanı. 1. Administrator veya denki bir kullanıcı ile logon olunmalıdır.

Güz Yarıyılı MT 487 Bilgisayarda Veri Yapıları Final Çalışma Soruları

Flow Kullanım Klavuzu Mart 2014

5 SQL- Yapısal Sorgulama Dili. Veritabanı 1

XMail. Kurulum ve Senkronizasyon Ayarları Rehberi

JasperReports Server ve Ireport raporlama Sistemi Kurulumu / Kullanımı 1. Bölüm 2. Bölüm 1- JasperReports Server ve Ireport Nedir?

Microsoft SQL Server 2008 Oracle Mysql (Ücretsiz) (Uygulamalarımızda bunu kullanacağız) Access

Veri Tabanı Hafta Dersi

ÜNİTE NESNE TABANLI PROGRAMLAMA-I. Uzm. Orhan ÇELİKER VERİTABANI BAĞLANTISI İÇİNDEKİLER HEDEFLER

ÜNİTE NESNE TABANLI PROGRAMLAMA I. Uzm. Orhan ÇELİKER VERİTABANI SORGULARI İÇİNDEKİLER HEDEFLER

Veritabanı ve Yönetim Sistemleri

GridView ve DetailsView kullanarak kayıt düzenlemek

«BM364» Veritabanı Uygulamaları

SQL 2005 SQL STUDIO MANAGER ACP YAZILIMI KURULUM KILAVUZU

SQL SERVER DATABASE FILE LARINI VE TEMPDB FILE LARINI TAŞIMA OPERASYONU

ACCESS PLATFORMUNDA SQL

SQL Kod ile Tablo Oluşturma

Kepware Veritabanı Ürünleri. Teknolojiye Genel Bir Bakış

Yedek Almak ve Yedekten Geri Dönmek

LINQ Language Integrated Query Dille Bütünleştirilmiş Sorgu Bir Veri Tabanı Tablosundan Veri Gösterme

Microsoft Outlook 2003 Kurulumu

Transkript:

İç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

Bu sorgumuzda!< operatörüyle yaşı 31 den küçük olmayanları getiriyoruz. Veri Tabanı İşlemleri 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

Veritabanına bağlanma Veri Tabanı İşlemleri 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

Insert işlemi Veri Tabanı İşlemleri 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

cmd.commandtype = CommandType.StoredProcedure; Veri Tabanı İşlemleri 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